Skip to content

Commit fe1dda9

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

File tree

11 files changed

+108
-205
lines changed

11 files changed

+108
-205
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ js_test:
1717

1818
elixir_test:
1919
mix test --cover
20+
mix elixirscript.test
2021

2122
clean:
2223
rm -rf priv/build

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
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
defmodule ElixirScript.Test.Test do
2+
use ElixirScript.Test
3+
4+
test "Atom.to_string" do
5+
val = Atom.to_string(:atom)
6+
assert val == "atom"
7+
end
8+
9+
test "String interpolation with number" do
10+
val = "#{5}"
11+
assert val == "5"
12+
end
13+
14+
test "shorthand failure" do
15+
orders = [%{email: "[email protected]"},%{email: "[email protected]"}]
16+
17+
val = Enum.reduce(orders, [],
18+
&(&2 ++ [ [:option, %{value: &1.email}, &1.email] ]))
19+
20+
assert val == [
21+
[:option, %{value: "[email protected]"}, "[email protected]"],
22+
[:option, %{value: "[email protected]"}, "[email protected]"]
23+
]
24+
end
25+
26+
test "map equals" do
27+
map1 = %{test: "map"}
28+
map2 = %{test: "map"}
29+
30+
assert map1 == map2
31+
end
32+
33+
test "multi-remote call" do
34+
map = %{token_count: 5_000_000}
35+
val = map.token_count.toLocaleString()
36+
37+
assert val == "5,000,000"
38+
end
39+
40+
test "filter names in guards" do
41+
has? = 5
42+
43+
val = case 5 do
44+
_ when has? == 5 ->
45+
true
46+
end
47+
48+
assert val == true
49+
end
50+
51+
test "tuple_get" do
52+
map = %{{1} => 5}
53+
val = Map.get(map, {1})
54+
55+
assert val == 5
56+
end
57+
58+
test "multi_bind" do
59+
[_a | _] = val = [1, 2, 3, 4, 5]
60+
assert val == [1, 2, 3, 4, 5]
61+
end
62+
end

0 commit comments

Comments
 (0)