diff --git a/.gitignore b/.gitignore index 227a411b..c3381e7a 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,8 @@ gradient-*.tar # Temporary files, for example, from tests. /tmp/ +# Beam files compiled from examples +test/examples/_build/ + +# MacOS DS_Store .DS_Store diff --git a/test/examples/Elixir.Basic.beam b/test/examples/Elixir.Basic.beam deleted file mode 100644 index 4833b69a..00000000 Binary files a/test/examples/Elixir.Basic.beam and /dev/null differ diff --git a/test/examples/Elixir.Call.beam b/test/examples/Elixir.Call.beam deleted file mode 100644 index 21d5dd8b..00000000 Binary files a/test/examples/Elixir.Call.beam and /dev/null differ diff --git a/test/examples/Elixir.CallRemoteException.beam b/test/examples/Elixir.CallRemoteException.beam deleted file mode 100644 index 8f6a7d17..00000000 Binary files a/test/examples/Elixir.CallRemoteException.beam and /dev/null differ diff --git a/test/examples/Elixir.CorrectSpec.beam b/test/examples/Elixir.CorrectSpec.beam deleted file mode 100644 index 10add2bc..00000000 Binary files a/test/examples/Elixir.CorrectSpec.beam and /dev/null differ diff --git a/test/examples/Elixir.ListComprehension.beam b/test/examples/Elixir.ListComprehension.beam deleted file mode 100644 index 233f3886..00000000 Binary files a/test/examples/Elixir.ListComprehension.beam and /dev/null differ diff --git a/test/examples/Elixir.ListEx.beam b/test/examples/Elixir.ListEx.beam deleted file mode 100644 index 65ba4759..00000000 Binary files a/test/examples/Elixir.ListEx.beam and /dev/null differ diff --git a/test/examples/Elixir.MapEx.beam b/test/examples/Elixir.MapEx.beam deleted file mode 100644 index bdd28ab1..00000000 Binary files a/test/examples/Elixir.MapEx.beam and /dev/null differ diff --git a/test/examples/Elixir.NestedModules.ModuleA.beam b/test/examples/Elixir.NestedModules.ModuleA.beam deleted file mode 100644 index 3ebc5579..00000000 Binary files a/test/examples/Elixir.NestedModules.ModuleA.beam and /dev/null differ diff --git a/test/examples/Elixir.NestedModules.ModuleB.beam b/test/examples/Elixir.NestedModules.ModuleB.beam deleted file mode 100644 index 1108c005..00000000 Binary files a/test/examples/Elixir.NestedModules.ModuleB.beam and /dev/null differ diff --git a/test/examples/Elixir.NestedModules.beam b/test/examples/Elixir.NestedModules.beam deleted file mode 100644 index a2851080..00000000 Binary files a/test/examples/Elixir.NestedModules.beam and /dev/null differ diff --git a/test/examples/Elixir.Pipe.beam b/test/examples/Elixir.Pipe.beam deleted file mode 100644 index 4bd4d5c0..00000000 Binary files a/test/examples/Elixir.Pipe.beam and /dev/null differ diff --git a/test/examples/Elixir.RangeEx.beam b/test/examples/Elixir.RangeEx.beam deleted file mode 100644 index 034f30a1..00000000 Binary files a/test/examples/Elixir.RangeEx.beam and /dev/null differ diff --git a/test/examples/Elixir.Receive.beam b/test/examples/Elixir.Receive.beam deleted file mode 100644 index 6aed1e0a..00000000 Binary files a/test/examples/Elixir.Receive.beam and /dev/null differ diff --git a/test/examples/Elixir.SimpleApp.beam b/test/examples/Elixir.SimpleApp.beam deleted file mode 100644 index 6c25549e..00000000 Binary files a/test/examples/Elixir.SimpleApp.beam and /dev/null differ diff --git a/test/examples/Elixir.SpecAfterSpec.beam b/test/examples/Elixir.SpecAfterSpec.beam deleted file mode 100644 index 4792ed14..00000000 Binary files a/test/examples/Elixir.SpecAfterSpec.beam and /dev/null differ diff --git a/test/examples/Elixir.SpecWrongName.beam b/test/examples/Elixir.SpecWrongName.beam deleted file mode 100644 index 87e4030f..00000000 Binary files a/test/examples/Elixir.SpecWrongName.beam and /dev/null differ diff --git a/test/examples/Elixir.StringExample.beam b/test/examples/Elixir.StringExample.beam deleted file mode 100644 index d8fe914c..00000000 Binary files a/test/examples/Elixir.StringExample.beam and /dev/null differ diff --git a/test/examples/Elixir.Try.beam b/test/examples/Elixir.Try.beam deleted file mode 100644 index 3b2392d5..00000000 Binary files a/test/examples/Elixir.Try.beam and /dev/null differ diff --git a/test/examples/Elixir.Tuple.beam b/test/examples/Elixir.Tuple.beam deleted file mode 100644 index cfd54fa0..00000000 Binary files a/test/examples/Elixir.Tuple.beam and /dev/null differ diff --git a/test/examples/Elixir.Typespec.beam b/test/examples/Elixir.Typespec.beam deleted file mode 100644 index b859438d..00000000 Binary files a/test/examples/Elixir.Typespec.beam and /dev/null differ diff --git a/test/examples/Elixir.TypespecBeh.beam b/test/examples/Elixir.TypespecBeh.beam deleted file mode 100644 index 1b24c7bf..00000000 Binary files a/test/examples/Elixir.TypespecBeh.beam and /dev/null differ diff --git a/test/examples/Elixir.TypespecWhen.beam b/test/examples/Elixir.TypespecWhen.beam deleted file mode 100644 index ab61b438..00000000 Binary files a/test/examples/Elixir.TypespecWhen.beam and /dev/null differ diff --git a/test/examples/basic/Elixir.Basic.Atom.beam b/test/examples/basic/Elixir.Basic.Atom.beam deleted file mode 100644 index 0fdbc98d..00000000 Binary files a/test/examples/basic/Elixir.Basic.Atom.beam and /dev/null differ diff --git a/test/examples/basic/Elixir.Basic.Binary.beam b/test/examples/basic/Elixir.Basic.Binary.beam deleted file mode 100644 index 88108aeb..00000000 Binary files a/test/examples/basic/Elixir.Basic.Binary.beam and /dev/null differ diff --git a/test/examples/basic/Elixir.Basic.Char.beam b/test/examples/basic/Elixir.Basic.Char.beam deleted file mode 100644 index 1e8c750f..00000000 Binary files a/test/examples/basic/Elixir.Basic.Char.beam and /dev/null differ diff --git a/test/examples/basic/Elixir.Basic.Charlist.beam b/test/examples/basic/Elixir.Basic.Charlist.beam deleted file mode 100644 index d893b72b..00000000 Binary files a/test/examples/basic/Elixir.Basic.Charlist.beam and /dev/null differ diff --git a/test/examples/basic/Elixir.Basic.Float.beam b/test/examples/basic/Elixir.Basic.Float.beam deleted file mode 100644 index 5560a5cf..00000000 Binary files a/test/examples/basic/Elixir.Basic.Float.beam and /dev/null differ diff --git a/test/examples/basic/Elixir.Basic.Int.beam b/test/examples/basic/Elixir.Basic.Int.beam deleted file mode 100644 index 47236136..00000000 Binary files a/test/examples/basic/Elixir.Basic.Int.beam and /dev/null differ diff --git a/test/examples/basic/Elixir.Basic.String.beam b/test/examples/basic/Elixir.Basic.String.beam deleted file mode 100644 index 156779ba..00000000 Binary files a/test/examples/basic/Elixir.Basic.String.beam and /dev/null differ diff --git a/test/examples/conditional/Elixir.Conditional.Case.beam b/test/examples/conditional/Elixir.Conditional.Case.beam deleted file mode 100644 index 155e0367..00000000 Binary files a/test/examples/conditional/Elixir.Conditional.Case.beam and /dev/null differ diff --git a/test/examples/conditional/Elixir.Conditional.Cond.beam b/test/examples/conditional/Elixir.Conditional.Cond.beam deleted file mode 100644 index aefce016..00000000 Binary files a/test/examples/conditional/Elixir.Conditional.Cond.beam and /dev/null differ diff --git a/test/examples/conditional/Elixir.Conditional.Guard.beam b/test/examples/conditional/Elixir.Conditional.Guard.beam deleted file mode 100644 index 015f46ff..00000000 Binary files a/test/examples/conditional/Elixir.Conditional.Guard.beam and /dev/null differ diff --git a/test/examples/conditional/Elixir.Conditional.If.beam b/test/examples/conditional/Elixir.Conditional.If.beam deleted file mode 100644 index 5f2d39a7..00000000 Binary files a/test/examples/conditional/Elixir.Conditional.If.beam and /dev/null differ diff --git a/test/examples/conditional/Elixir.Conditional.Unless.beam b/test/examples/conditional/Elixir.Conditional.Unless.beam deleted file mode 100644 index 0981b6be..00000000 Binary files a/test/examples/conditional/Elixir.Conditional.Unless.beam and /dev/null differ diff --git a/test/examples/conditional/Elixir.Conditional.With.beam b/test/examples/conditional/Elixir.Conditional.With.beam deleted file mode 100644 index e34be90c..00000000 Binary files a/test/examples/conditional/Elixir.Conditional.With.beam and /dev/null differ diff --git a/test/examples/record/Elixir.RecordEx.beam b/test/examples/record/Elixir.RecordEx.beam deleted file mode 100644 index 5d6cf6ed..00000000 Binary files a/test/examples/record/Elixir.RecordEx.beam and /dev/null differ diff --git a/test/examples/record/Elixir.Test.R1.beam b/test/examples/record/Elixir.Test.R1.beam deleted file mode 100644 index ac0e11a8..00000000 Binary files a/test/examples/record/Elixir.Test.R1.beam and /dev/null differ diff --git a/test/examples/record/Elixir.Test.R2.beam b/test/examples/record/Elixir.Test.R2.beam deleted file mode 100644 index db66aeff..00000000 Binary files a/test/examples/record/Elixir.Test.R2.beam and /dev/null differ diff --git a/test/examples/record/Elixir.Test.S1.beam b/test/examples/record/Elixir.Test.S1.beam deleted file mode 100644 index 871f009f..00000000 Binary files a/test/examples/record/Elixir.Test.S1.beam and /dev/null differ diff --git a/test/examples/record/Elixir.Test.S2.beam b/test/examples/record/Elixir.Test.S2.beam deleted file mode 100644 index 50d58511..00000000 Binary files a/test/examples/record/Elixir.Test.S2.beam and /dev/null differ diff --git a/test/examples/record/Elixir.Test.beam b/test/examples/record/Elixir.Test.beam deleted file mode 100644 index 06b4937b..00000000 Binary files a/test/examples/record/Elixir.Test.beam and /dev/null differ diff --git a/test/examples/struct/Elixir.StructEx.beam b/test/examples/struct/Elixir.StructEx.beam deleted file mode 100644 index a82dd642..00000000 Binary files a/test/examples/struct/Elixir.StructEx.beam and /dev/null differ diff --git a/test/examples/type/Elixir.ListInfer.beam b/test/examples/type/Elixir.ListInfer.beam deleted file mode 100644 index e46ead42..00000000 Binary files a/test/examples/type/Elixir.ListInfer.beam and /dev/null differ diff --git a/test/examples/type/Elixir.RecordEx.beam b/test/examples/type/Elixir.RecordEx.beam deleted file mode 100644 index 47ab9330..00000000 Binary files a/test/examples/type/Elixir.RecordEx.beam and /dev/null differ diff --git a/test/examples/type/Elixir.SWrongRet.beam b/test/examples/type/Elixir.SWrongRet.beam deleted file mode 100644 index a7914871..00000000 Binary files a/test/examples/type/Elixir.SWrongRet.beam and /dev/null differ diff --git a/test/examples/type/Elixir.WrongRet.beam b/test/examples/type/Elixir.WrongRet.beam deleted file mode 100644 index 7e45ef95..00000000 Binary files a/test/examples/type/Elixir.WrongRet.beam and /dev/null differ diff --git a/test/examples/type/record.ex b/test/examples/type/record.ex index d0d311d5..93a804d3 100644 --- a/test/examples/type/record.ex +++ b/test/examples/type/record.ex @@ -1,4 +1,4 @@ -defmodule RecordEx do +defmodule RecordType do require Record Record.defrecord(:user, name: "john", age: 25) diff --git a/test/gradient/ast_specifier_test.exs b/test/gradient/ast_specifier_test.exs index 9ebf53de..5dcb3c6b 100644 --- a/test/gradient/ast_specifier_test.exs +++ b/test/gradient/ast_specifier_test.exs @@ -19,7 +19,7 @@ defmodule Gradient.AstSpecifierTest do end test "integer" do - {tokens, ast} = load("basic/Elixir.Basic.Int.beam", "basic/int.ex") + {tokens, ast} = load("Elixir.Basic.Int.beam", "basic/int.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -29,7 +29,7 @@ defmodule Gradient.AstSpecifierTest do end test "float" do - {tokens, ast} = load("basic/Elixir.Basic.Float.beam", "basic/float.ex") + {tokens, ast} = load("Elixir.Basic.Float.beam", "basic/float.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() assert {:function, 2, :float, 0, [{:clause, 2, [], [], [{:float, 2, 0.12}]}]} = inline @@ -38,7 +38,7 @@ defmodule Gradient.AstSpecifierTest do end test "atom" do - {tokens, ast} = load("basic/Elixir.Basic.Atom.beam", "basic/atom.ex") + {tokens, ast} = load("Elixir.Basic.Atom.beam", "basic/atom.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -48,7 +48,7 @@ defmodule Gradient.AstSpecifierTest do end test "char" do - {tokens, ast} = load("basic/Elixir.Basic.Char.beam", "basic/char.ex") + {tokens, ast} = load("Elixir.Basic.Char.beam", "basic/char.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -58,7 +58,7 @@ defmodule Gradient.AstSpecifierTest do end test "charlist" do - {tokens, ast} = load("basic/Elixir.Basic.Charlist.beam", "basic/charlist.ex") + {tokens, ast} = load("Elixir.Basic.Charlist.beam", "basic/charlist.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -83,7 +83,7 @@ defmodule Gradient.AstSpecifierTest do end test "string" do - {tokens, ast} = load("basic/Elixir.Basic.String.beam", "basic/string.ex") + {tokens, ast} = load("Elixir.Basic.String.beam", "basic/string.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -209,7 +209,7 @@ defmodule Gradient.AstSpecifierTest do end test "binary" do - {tokens, ast} = load("basic/Elixir.Basic.Binary.beam", "basic/binary.ex") + {tokens, ast} = load("Elixir.Basic.Binary.beam", "basic/binary.ex") [complex2, complex, bin_block, bin | _] = AstSpecifier.run_mappers(ast, tokens) @@ -279,7 +279,7 @@ defmodule Gradient.AstSpecifierTest do end test "case conditional" do - {tokens, ast} = load("conditional/Elixir.Conditional.Case.beam", "conditional/case.ex") + {tokens, ast} = load("Elixir.Conditional.Case.beam", "conditional/case.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -309,7 +309,7 @@ defmodule Gradient.AstSpecifierTest do end test "if conditional" do - {tokens, ast} = load("conditional/Elixir.Conditional.If.beam", "conditional/if.ex") + {tokens, ast} = load("Elixir.Conditional.If.beam", "conditional/if.ex") [block, inline, if_ | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -360,7 +360,7 @@ defmodule Gradient.AstSpecifierTest do end test "unless conditional" do - {tokens, ast} = load("conditional/Elixir.Conditional.Unless.beam", "conditional/unless.ex") + {tokens, ast} = load("Elixir.Conditional.Unless.beam", "conditional/unless.ex") [block | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -385,7 +385,7 @@ defmodule Gradient.AstSpecifierTest do end test "cond conditional" do - {tokens, ast} = load("conditional/Elixir.Conditional.Cond.beam", "conditional/cond.ex") + {tokens, ast} = load("Elixir.Conditional.Cond.beam", "conditional/cond.ex") [block, inline | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -456,7 +456,7 @@ defmodule Gradient.AstSpecifierTest do end test "with conditional" do - {tokens, ast} = load("conditional/Elixir.Conditional.With.beam", "conditional/with.ex") + {tokens, ast} = load("Elixir.Conditional.With.beam", "conditional/with.ex") [block | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -586,7 +586,7 @@ defmodule Gradient.AstSpecifierTest do end test "guards" do - {tokens, ast} = load("conditional/Elixir.Conditional.Guard.beam", "conditional/guards.ex") + {tokens, ast} = load("Elixir.Conditional.Guard.beam", "conditional/guards.ex") [guarded_case, guarded_fun | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -711,42 +711,42 @@ defmodule Gradient.AstSpecifierTest do [block | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() - assert {:function, 11, :lc_complex, 0, + assert {:function, 10, :lc_complex, 0, [ - {:clause, 11, [], [], + {:clause, 10, [], [], [ - {:call, 12, {:remote, 12, {:atom, 12, :lists}, {:atom, 12, :reverse}}, + {:call, 11, {:remote, 11, {:atom, 11, :lists}, {:atom, 11, :reverse}}, [ - {:call, 12, {:remote, 12, {:atom, 12, Enum}, {:atom, 12, :reduce}}, + {:call, 11, {:remote, 11, {:atom, 11, Enum}, {:atom, 11, :reduce}}, [ - {:map, 12, + {:map, 11, [ - {:map_field_assoc, 12, {:atom, 12, :__struct__}, {:atom, 12, Range}}, - {:map_field_assoc, 12, {:atom, 12, :first}, {:integer, 12, 0}}, - {:map_field_assoc, 12, {:atom, 12, :last}, {:integer, 12, 5}}, - {:map_field_assoc, 12, {:atom, 12, :step}, {:integer, 12, 1}} + {:map_field_assoc, 11, {:atom, 11, :__struct__}, {:atom, 11, Range}}, + {:map_field_assoc, 11, {:atom, 11, :first}, {:integer, 11, 0}}, + {:map_field_assoc, 11, {:atom, 11, :last}, {:integer, 11, 5}}, + {:map_field_assoc, 11, {:atom, 11, :step}, {:integer, 11, 1}} ]}, - {nil, 12}, - {:fun, 12, + {nil, 11}, + {:fun, 11, {:clauses, [ - {:clause, 12, [{:var, 12, :_n@1}, {:var, 12, :_@1}], [], + {:clause, 11, [{:var, 11, :_n@1}, {:var, 11, :_@1}], [], [ - {:case, [generated: true, location: 12], - {:op, 12, :==, - {:op, 12, :rem, {:var, 12, :_n@1}, {:integer, 12, 3}}, - {:integer, 12, 0}}, + {:case, [generated: true, location: 11], + {:op, 11, :==, + {:op, 11, :rem, {:var, 11, :_n@1}, {:integer, 11, 3}}, + {:integer, 11, 0}}, [ - {:clause, [generated: true, location: 12], - [{:atom, [generated: true, location: 12], true}], [], + {:clause, [generated: true, location: 11], + [{:atom, [generated: true, location: 11], true}], [], [ - {:cons, 12, - {:op, 12, :*, {:var, 12, :_n@1}, {:var, 12, :_n@1}}, - {:var, 12, :_@1}} + {:cons, 11, + {:op, 11, :*, {:var, 11, :_n@1}, {:var, 11, :_n@1}}, + {:var, 11, :_@1}} ]}, - {:clause, [generated: true, location: 12], - [{:atom, [generated: true, location: 12], false}], [], - [{:var, 12, :_@1}]} + {:clause, [generated: true, location: 11], + [{:atom, [generated: true, location: 11], false}], [], + [{:var, 11, :_@1}]} ]} ]} ]}} @@ -1044,7 +1044,7 @@ defmodule Gradient.AstSpecifierTest do end test "struct" do - {tokens, ast} = load("struct/Elixir.StructEx.beam", "struct/struct.ex") + {tokens, ast} = load("Elixir.StructEx.beam", "struct/struct.ex") [get2, get, update, empty, struct | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -1161,7 +1161,7 @@ defmodule Gradient.AstSpecifierTest do end test "record" do - {tokens, ast} = load("record/Elixir.RecordEx.beam", "record/record.ex") + {tokens, ast} = load("Elixir.RecordEx.beam", "record/record.ex") [update, init, empty, macro3, macro2, macro1 | _] = AstSpecifier.run_mappers(ast, tokens) |> Enum.reverse() @@ -1294,7 +1294,7 @@ defmodule Gradient.AstSpecifierTest do end test "typespec when" do - {tokens, ast} = load("/Elixir.TypespecWhen.beam", "/typespec_when.ex") + {tokens, ast} = load("Elixir.TypespecWhen.beam", "/typespec_when.ex") [spec | _] = AstSpecifier.run_mappers(ast, tokens) @@ -1324,7 +1324,7 @@ defmodule Gradient.AstSpecifierTest do end test "typespec behavior" do - {tokens, ast} = load("/Elixir.TypespecBeh.beam", "/typespec_beh.ex") + {tokens, ast} = load("Elixir.TypespecBeh.beam", "/typespec_beh.ex") [callback1, callback2 | _] = AstSpecifier.run_mappers(ast, tokens) diff --git a/test/gradient/elixir_checker_test.exs b/test/gradient/elixir_checker_test.exs index 75a223ca..9b291135 100644 --- a/test/gradient/elixir_checker_test.exs +++ b/test/gradient/elixir_checker_test.exs @@ -32,7 +32,7 @@ defmodule Gradient.ElixirCheckerTest do ast = load("Elixir.SpecAfterSpec.beam") assert [ - {_, {:spec_error, :spec_after_spec, 3, :convert_a, 1}} + {_, {:spec_error, :spec_after_spec, 3, :convert, 1}} ] = ElixirChecker.check(ast, []) end end diff --git a/test/gradient/elixir_fmt_test.exs b/test/gradient/elixir_fmt_test.exs index aa390578..a2dde51a 100644 --- a/test/gradient/elixir_fmt_test.exs +++ b/test/gradient/elixir_fmt_test.exs @@ -362,7 +362,7 @@ defmodule Gradient.ElixirFmtTest do @spec load_record_type_example(map()) :: map() defp load_record_type_example(config) do - {_tokens, ast} = load("type/Elixir.RecordEx.beam", "type/record.ex") + {_tokens, ast} = load("Elixir.RecordType.beam", "type/record.ex") {errors, forms} = type_check_file(ast, []) @@ -379,7 +379,7 @@ defmodule Gradient.ElixirFmtTest do @spec load_wrong_ret_error_examples(map()) :: map() defp load_wrong_ret_error_examples(config) do - {_tokens, ast} = load("type/Elixir.WrongRet.beam", "type/wrong_ret.ex") + {_tokens, ast} = load("Elixir.WrongRet.beam", "type/wrong_ret.ex") {errors, forms} = type_check_file(ast, []) names = get_function_names_from_ast(forms) diff --git a/test/gradient/tokens_test.exs b/test/gradient/tokens_test.exs index a9f7f453..49d5593b 100644 --- a/test/gradient/tokens_test.exs +++ b/test/gradient/tokens_test.exs @@ -47,7 +47,7 @@ defmodule Gradient.TokensTest do describe "get_conditional/1" do test "case" do - {tokens, _ast} = load("conditional/Elixir.Conditional.Case.beam", "conditional/case.ex") + {tokens, _ast} = load("Elixir.Conditional.Case.beam", "conditional/case.ex") tokens = Tokens.drop_tokens_to_line(tokens, 2) opts = [end_line: -1] assert {:case, _} = Tokens.get_conditional(tokens, 4, opts) @@ -57,7 +57,7 @@ defmodule Gradient.TokensTest do end test "if" do - {tokens, _ast} = load("conditional/Elixir.Conditional.If.beam", "conditional/if.ex") + {tokens, _ast} = load("Elixir.Conditional.If.beam", "conditional/if.ex") tokens = Tokens.drop_tokens_to_line(tokens, 2) opts = [end_line: -1] assert {:if, _} = Tokens.get_conditional(tokens, 4, opts) @@ -67,7 +67,7 @@ defmodule Gradient.TokensTest do end test "unless" do - {tokens, _ast} = load("conditional/Elixir.Conditional.Unless.beam", "conditional/unless.ex") + {tokens, _ast} = load("Elixir.Conditional.Unless.beam", "conditional/unless.ex") tokens = Tokens.drop_tokens_to_line(tokens, 2) opts = [end_line: -1] @@ -75,7 +75,7 @@ defmodule Gradient.TokensTest do end test "cond" do - {tokens, _ast} = load("conditional/Elixir.Conditional.Cond.beam", "conditional/cond.ex") + {tokens, _ast} = load("Elixir.Conditional.Cond.beam", "conditional/cond.ex") tokens = Tokens.drop_tokens_to_line(tokens, 2) opts = [end_line: -1] @@ -86,7 +86,7 @@ defmodule Gradient.TokensTest do end test "with" do - {tokens, _ast} = load("conditional/Elixir.Conditional.With.beam", "conditional/with.ex") + {tokens, _ast} = load("Elixir.Conditional.With.beam", "conditional/with.ex") tokens = Tokens.drop_tokens_to_line(tokens, 6) opts = [end_line: -1] diff --git a/test/mix/tasks/gradient_test.exs b/test/mix/tasks/gradient_test.exs index c7bb0c73..2d2d150b 100644 --- a/test/mix/tasks/gradient_test.exs +++ b/test/mix/tasks/gradient_test.exs @@ -5,52 +5,49 @@ defmodule Mix.Tasks.GradientTest do @no_problems_msg "No problems found!" - @examples_path "test/examples/" - @type_path Path.join([@examples_path, "type"]) + @examples_path "test/examples" + @build_path Path.join([@examples_path, "_build"]) - @s_wrong_ret_beam "Elixir.SWrongRet.beam" - @s_wrong_ret_ex "s_wrong_ret.ex" + @s_wrong_ret_beam Path.join(@build_path, "Elixir.SWrongRet.beam") + @s_wrong_ret_ex Path.join([@examples_path, "type", "s_wrong_ret.ex"]) test "--no-compile option" do info = "Compiling project..." - output = run_task(@type_path, [@s_wrong_ret_beam]) + output = run_task([@s_wrong_ret_beam]) assert String.contains?(output, info) - dir = Path.join(@type_path, "_build") - :os.cmd(String.to_charlist("rm -Rf " <> dir)) - - output = run_task(@type_path, ["--no-compile", "--", @s_wrong_ret_beam]) + output = run_task(["--no-compile", "--", @s_wrong_ret_beam]) assert not String.contains?(output, info) end test "path to the beam file" do - output = run_task(@type_path, test_opts([@s_wrong_ret_beam])) + output = run_task(test_opts([@s_wrong_ret_beam])) assert 3 == String.split(output, @s_wrong_ret_ex) |> length() end test "path to the ex file" do - output = run_task(@type_path, test_opts([@s_wrong_ret_ex])) + output = run_task(test_opts([@s_wrong_ret_ex])) assert 3 == String.split(output, @s_wrong_ret_ex) |> length() end test "no_fancy option" do - output = run_task(@type_path, test_opts([@s_wrong_ret_beam])) + output = run_task(test_opts([@s_wrong_ret_beam])) assert String.contains?(output, "The integer on line") assert String.contains?(output, "The tuple on line") - output = run_task(@type_path, test_opts(["--no-fancy", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--no-fancy", "--", @s_wrong_ret_beam])) assert String.contains?(output, "The integer \e[33m1\e[0m on line") assert String.contains?(output, "The tuple \e[33m{:ok, []}\e[0m on line") end describe "colors" do test "no_colors option" do - output = run_task(@type_path, test_opts([@s_wrong_ret_beam])) + output = run_task(test_opts([@s_wrong_ret_beam])) assert String.contains?(output, IO.ANSI.cyan()) assert String.contains?(output, IO.ANSI.red()) - output = run_task(@type_path, test_opts(["--no-colors", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--no-colors", "--", @s_wrong_ret_beam])) assert not String.contains?(output, IO.ANSI.cyan()) assert not String.contains?(output, IO.ANSI.red()) end @@ -58,7 +55,6 @@ defmodule Mix.Tasks.GradientTest do test "--expr-color and --type-color option" do output = run_task( - @type_path, test_opts([ "--no-fancy", "--expr-color", @@ -77,7 +73,6 @@ defmodule Mix.Tasks.GradientTest do test "--underscore_color option" do output = run_task( - @type_path, test_opts([ "--underscore-color", "green", @@ -92,51 +87,50 @@ defmodule Mix.Tasks.GradientTest do end test "--no-gradualizer-check option" do - output = run_task(@type_path, test_opts(["--no-gradualizer-check", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--no-gradualizer-check", "--", @s_wrong_ret_beam])) assert String.contains?(output, "No problems found!") end test "--no-ex-check option" do - beam = "Elixir.SpecAfterSpec.beam" - ex_spec_error_msg = "The spec convert_a/1 on line" + beam = Path.join(@build_path, "Elixir.SpecAfterSpec.beam") + ex_spec_error_msg = "The spec convert/1 on line" - output = run_task(@examples_path, test_opts([beam])) + output = run_task(test_opts([beam])) assert String.contains?(output, ex_spec_error_msg) - output = run_task(@examples_path, test_opts(["--no-ex-check", "--", beam])) + output = run_task(test_opts(["--no-ex-check", "--", beam])) assert not String.contains?(output, ex_spec_error_msg) end @tag if(System.version() >= "1.13", do: :skip, else: :ok) test "--no-specify option" do - output = run_task(@type_path, test_opts([@s_wrong_ret_beam])) + output = run_task(test_opts([@s_wrong_ret_beam])) assert String.contains?(output, "on line 3") assert String.contains?(output, "on line 6") - output = run_task(@type_path, test_opts(["--no-specify", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--no-specify", "--", @s_wrong_ret_beam])) assert String.contains?(output, "on line 0") assert not String.contains?(output, "on line 3") assert not String.contains?(output, "on line 6") end test "--stop-on-first-error option" do - output = run_task(@type_path, test_opts(["--stop-on-first-error", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--stop-on-first-error", "--", @s_wrong_ret_beam])) assert 2 == String.split(output, @s_wrong_ret_ex) |> length() end test "--fmt-location option" do - output = run_task(@type_path, test_opts(["--fmt-location", "none", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--fmt-location", "none", "--", @s_wrong_ret_beam])) assert String.contains?(output, "s_wrong_ret.ex: The integer is expected to have type") - output = run_task(@type_path, test_opts(["--fmt-location", "brief", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--fmt-location", "brief", "--", @s_wrong_ret_beam])) assert String.contains?(output, "s_wrong_ret.ex:3: The integer is expected to have type") - output = - run_task(@type_path, test_opts(["--fmt-location", "verbose", "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--fmt-location", "verbose", "--", @s_wrong_ret_beam])) assert String.contains?( output, @@ -147,19 +141,19 @@ defmodule Mix.Tasks.GradientTest do test "--no-deps option" do info = "Loading deps..." - output = run_task(@type_path, ["--no-compile", "--", @s_wrong_ret_beam]) + output = run_task(["--no-compile", "--", @s_wrong_ret_beam]) assert String.contains?(output, info) - output = run_task(@type_path, ["--no-compile", "--no-deps", "--", @s_wrong_ret_beam]) + output = run_task(["--no-compile", "--no-deps", "--", @s_wrong_ret_beam]) assert not String.contains?(output, info) end test "--infer option" do - beam = "Elixir.ListInfer.beam" - output = run_task(@type_path, test_opts([beam])) + beam = Path.join(@build_path, "Elixir.ListInfer.beam") + output = run_task(test_opts([beam])) assert String.contains?(output, @no_problems_msg) - output = run_task(@type_path, test_opts(["--infer", "--", beam])) + output = run_task(test_opts(["--infer", "--", beam])) assert not String.contains?(output, @no_problems_msg) assert String.contains?(output, "list_infer.ex: The variable on line 4") end @@ -167,27 +161,13 @@ defmodule Mix.Tasks.GradientTest do test "--code-path option" do ex_file = "wrong_ret.ex" - output = run_task(@type_path, test_opts(["--code-path", ex_file, "--", @s_wrong_ret_beam])) + output = run_task(test_opts(["--code-path", ex_file, "--", @s_wrong_ret_beam])) assert not String.contains?(output, @s_wrong_ret_ex) assert String.contains?(output, ex_file) end - def run_task(rel_path, args) do - run_in_path(rel_path, fn -> - capture_io(fn -> Mix.Tasks.Gradient.run(args) end) - end) - end + def run_task(args), do: capture_io(fn -> Mix.Tasks.Gradient.run(args) end) - def run_in_path(path, fun) do - cwd = File.cwd!() - File.cd(path) - res = fun.() - File.cd(cwd) - res - end - - def test_opts(opts) do - ["--no-comile", "--no-deps"] ++ opts - end + def test_opts(opts), do: ["--no-comile", "--no-deps"] ++ opts end diff --git a/test/support/helpers.ex b/test/support/helpers.ex index 2203dfbd..43ba48e8 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -1,11 +1,12 @@ defmodule Gradient.TestHelpers do alias Gradient.Types, as: T - @examples_path "test/examples/" + @examples_path "test/examples" + @examples_build_path "test/examples/_build" @spec load(String.t()) :: T.forms() def load(beam_file) do - beam_file = String.to_charlist(@examples_path <> beam_file) + beam_file = String.to_charlist(Path.join(@examples_build_path, beam_file)) {:ok, {_, [abstract_code: {:raw_abstract_v1, ast}]}} = :beam_lib.chunks(beam_file, [:abstract_code]) @@ -15,8 +16,8 @@ defmodule Gradient.TestHelpers do @spec load(String.t(), String.t()) :: {T.tokens(), T.forms()} def load(beam_file, ex_file) do - beam_file = String.to_charlist(@examples_path <> beam_file) - ex_file = @examples_path <> ex_file + beam_file = String.to_charlist(Path.join(@examples_build_path, beam_file)) + ex_file = Path.join(@examples_path, ex_file) {:ok, {_, [abstract_code: {:raw_abstract_v1, ast}]}} = :beam_lib.chunks(beam_file, [:abstract_code]) @@ -30,8 +31,8 @@ defmodule Gradient.TestHelpers do @spec example_data() :: {T.tokens(), T.forms()} def example_data() do - beam_path = (@examples_path <> "Elixir.SimpleApp.beam") |> String.to_charlist() - file_path = @examples_path <> "simple_app.ex" + beam_path = Path.join(@examples_build_path, "Elixir.SimpleApp.beam") |> String.to_charlist() + file_path = Path.join(@examples_path, "simple_app.ex") code = File.read!(file_path) @@ -50,7 +51,7 @@ defmodule Gradient.TestHelpers do @spec example_tokens() :: T.tokens() def example_tokens() do - file_path = @examples_path <> "conditional/cond.ex" + file_path = Path.join(@examples_path, "conditional/cond.ex") code = File.read!(file_path) @@ -65,7 +66,7 @@ defmodule Gradient.TestHelpers do @spec example_string_tokens() :: T.tokens() def example_string_tokens() do - file_path = @examples_path <> "string_example.ex" + file_path = Path.join(@examples_path, "string_example.ex") code = File.read!(file_path) diff --git a/test/test_helper.exs b/test/test_helper.exs index 46d22413..a86b330f 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1,15 +1,19 @@ ExUnit.start() -defmodule TestHelper do - def compile_test_examples(examples_path) do - ex_blob = examples_path <> "/*.ex" +defmodule ExamplesCompiler do + @build_path "test/examples/_build/" - for path <- Path.wildcard(ex_blob) do - System.cmd("elixirc", ["-o", examples_path, path]) + def compile(pattern) do + case File.mkdir(@build_path) do + :ok -> + paths = Path.wildcard(pattern) + Kernel.ParallelCompiler.compile_to_path(paths, @build_path) + :ok + + _ -> + :error end end end -# TestHelper.compile_test_examples("test/examples") -# TestHelper.compile_test_examples("test/examples/basic") -# TestHelper.compile_test_examples("test/examples/conditional") +ExamplesCompiler.compile("test/examples/**/*.ex")