Testing using elixirscript.test · elixirscript/elixirscript@fe1dda9 · GitHub
Skip to content

Commit fe1dda9

Browse files
committed
Testing using elixirscript.test
1 parent d2c8b27 commit fe1dda9

11 files changed

Lines changed: 108 additions & 205 deletions

File tree

Makefile

Lines changed: 1 addition & 0 deletions

lib/elixir_script_test/test.ex

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ defmodule ElixirScript.Test do
2626

2727
context = Macro.escape(context)
2828
contents = Macro.escape(contents, unquote: true)
29-
name = String.to_atom("__test_#{String.replace(message, " ", "_")}")
29+
name = message
30+
|> String.replace(" ", "_")
31+
|> String.replace(~r/[^A-Za-z0-9]/, "")
32+
33+
name = String.to_atom("__test_#{name}")
3034

3135
quote bind_quoted: [context: context, contents: contents, message: message, name: name] do
3236
def unquote(name)(unquote(context)) do
@@ -54,11 +58,16 @@ defmodule ElixirScript.Test do
5458

5559
test_script_path = Path.join([:code.priv_dir(:elixir_script), "testrunner", "index.js"])
5660

57-
{out, _a} = System.cmd "node", [test_script_path] ++ js_files, into: IO.stream(:stdio, :line)
61+
{_, exit_status} = System.cmd "node", [test_script_path] ++ js_files, into: IO.stream(:stdio, :line)
5862

5963
# Delete directory at the end
6064
File.rm_rf!(output)
6165

62-
:ok
66+
case exit_status do
67+
0 ->
68+
:ok
69+
_ ->
70+
:error
71+
end
6372
end
6473
end

lib/mix/tasks/elixirscript.test.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ defmodule Mix.Tasks.Elixirscript.Test do
1111
Mix.Task.run "app.start"
1212

1313
path = Path.join([default_test_path(), "**", "*_test.exs"])
14-
ElixirScript.Test.start(path)
14+
case ElixirScript.Test.start(path) do
15+
:error ->
16+
System.at_exit(fn _ -> exit({:shutdown, 1}) end)
17+
:ok ->
18+
:ok
19+
end
1520
end
1621

1722
defp default_test_path do

priv/testrunner/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ const runner = require('./testRunner.js').default;
33

44
const testFiles = process.argv.slice(2);
55
runner.start(testFiles).then((results) => {
6-
console.log(`${results.tests} tests, ${results.success} succeeded, ${results.failed} failed`);
6+
process.stdout.write('\n\n');
7+
process.stdout.write(`${results.tests} tests, ${results.success} succeeded, ${results.failed} failed\n`);
78

89
if (results.failed > 0) {
910
process.exit(1);

priv/testrunner/testRunner.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,46 @@ function runTests(mod, results) {
2525
try {
2626
test.get(Symbol.for('test'))(context);
2727
results.success++;
28+
process.stdout.write('.');
2829
} catch (e) {
29-
handleError(e);
3030
results.failed++;
31+
handleError(e, test, results, mod);
3132
}
3233
}
3334
}
3435
}
3536

36-
function handleError(e) {
37+
function handleError(e, test, results, mod) {
3738
if (e.__reason) {
3839
if (e.__reason instanceof Map && e.__reason.get(Symbol.for('message'))) {
39-
console.error(e.__reason.get(Symbol.for('message')));
40-
console.error(e.__reason.get(Symbol.for('expr')).toString());
41-
console.error(e.__reason.get(Symbol.for('left')).toString());
42-
console.error(e.__reason.get(Symbol.for('right')).toString());
40+
const errorMessage = e.__reason.get(Symbol.for('message'));
41+
const expr = e.__reason.get(Symbol.for('expr'));
42+
const left = e.__reason.get(Symbol.for('left'));
43+
const right = e.__reason.get(Symbol.for('right'));
44+
const moduleName = Symbol.keyFor(mod.default.__MODULE__).replace('Elixir.', '');
45+
let testMessage = test.get(Symbol.for('message'));
46+
testMessage = `${results.failed}) ${testMessage} (${moduleName})`;
47+
48+
printErrorLine(testMessage);
49+
printErrorLine(errorMessage);
50+
printErrorLine(left, 'left');
51+
printErrorLine(right, 'right');
4352
}
4453
} else {
4554
console.error(e.message);
4655
}
4756
}
4857

58+
function printErrorLine(value, label = null) {
59+
if (value !== Symbol.for('ex_unit_no_meaningful_value')) {
60+
if (label) {
61+
console.error(`${label}: ${value}`);
62+
} else {
63+
console.error(`${value}`);
64+
}
65+
}
66+
}
67+
4968
export default {
5069
start,
5170
};

test/integration/integration_test.exs

Lines changed: 0 additions & 47 deletions
This file was deleted.

test/support/helpers.ex

Lines changed: 0 additions & 41 deletions
This file was deleted.

test/support/integration.ex

Lines changed: 0 additions & 42 deletions
This file was deleted.

test/support/term_converter.ex

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 62 additions & 0 deletions

0 commit comments

Comments
 (0)