Skip to content

Commit 79fc19f

Browse files
committed
Added import and export tests
1 parent 7de68b4 commit 79fc19f

File tree

4 files changed

+142
-25
lines changed

4 files changed

+142
-25
lines changed

lib/es_tree/tools/builder.ex

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -203,19 +203,6 @@ defmodule ESTree.Tools.Builder do
203203
}
204204
end
205205

206-
@spec export_declaration(
207-
ESTree.Declaration.t,
208-
[ESTree.ExportSpecifier.t],
209-
boolean,
210-
ESTree.Identifier.t | nil,
211-
ESTree.SourceLocation.t | nil
212-
) :: ESTree.ExportDeclaration.t
213-
def export_declaration(declaration, specifiers \\ [], default \\ false, source \\ nil, loc \\ nil) do
214-
%ESTree.ExportDeclaration{
215-
declaration: declaration, specifiers: specifiers, default: default, source: source, loc: loc
216-
}
217-
end
218-
219206
@spec export_default_declaration(
220207
ESTree.Declaration.t | ESTree.Expression.t | nil,
221208
ESTree.SourceLocation.t | nil

lib/es_tree/tools/generator.ex

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ defmodule ESTree.Tools.Generator do
1313
:">>>=" , :"|=" , :"^=" , :"&=", :++, :--
1414
]
1515

16-
@indent " "
17-
1816
@spec generate(ESTree.operator | ESTree.Node.t) :: binary
1917
def generate(operator) when operator in @operators do
2018
to_string(operator)
@@ -557,21 +555,21 @@ defmodule ESTree.Tools.Generator do
557555
end
558556

559557
def generate(%ESTree.ImportDeclaration{specifiers: [%ESTree.ImportDefaultSpecifier{}] = specifiers, source: source}) do
560-
specifiers = Enum.map_join(specifiers, ",", &generate(&1))
558+
specifiers = Enum.map_join(specifiers, ", ", &generate(&1))
561559
source = generate(source)
562560

563561
"import #{specifiers} from #{source};"
564562
end
565563

566564
def generate(%ESTree.ImportDeclaration{specifiers: [%ESTree.ImportNamespaceSpecifier{}] = specifiers, source: source}) do
567-
specifiers = Enum.map_join(specifiers, ",", &generate(&1))
565+
specifiers = Enum.map_join(specifiers, ", ", &generate(&1))
568566
source = generate(source)
569567

570568
"import #{specifiers} from #{source};"
571569
end
572570

573571
def generate(%ESTree.ImportDeclaration{specifiers: specifiers, source: source}) do
574-
specifiers = Enum.map_join(specifiers, ",", &generate(&1))
572+
specifiers = Enum.map_join(specifiers, ", ", &generate(&1))
575573
source = generate(source)
576574

577575
"import { #{specifiers} } from #{source};"
@@ -610,27 +608,26 @@ defmodule ESTree.Tools.Generator do
610608
end
611609

612610
def generate(%ESTree.ExportNamedDeclaration{declaration: nil, specifiers: specifiers, source: nil} = ast) do
613-
IO.inspect(ast)
614-
specifiers = Enum.map_join(specifiers, ",", &generate(&1))
611+
specifiers = Enum.map_join(specifiers, ", ", &generate(&1))
615612

616-
"export #{specifiers};"
613+
"export { #{specifiers} };"
617614
end
618615

619616
def generate(%ESTree.ExportNamedDeclaration{declaration: nil, specifiers: specifiers, source: source}) do
620-
specifiers = Enum.map_join(specifiers, ",", &generate(&1))
617+
specifiers = Enum.map_join(specifiers, ", ", &generate(&1))
621618
source = generate(source)
622619

623-
"export #{specifiers} from #{source};"
620+
"export { #{specifiers} } from #{source};"
624621
end
625622

626623
def generate(%ESTree.ExportSpecifier{local: local, exported: exported}) do
627624
local = generate(local)
628625
exported = generate(exported)
629626

630627
if local == exported do
631-
"{#{local}}"
628+
"#{local}"
632629
else
633-
"{#{exported} as #{local} }"
630+
"#{exported} as #{local}"
634631
end
635632
end
636633

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
defmodule ESTree.Tools.Generator.ExportDeclaration.Test do
2+
use ShouldI
3+
alias ESTree.Tools.Builder
4+
alias ESTree.Tools.Generator
5+
6+
should "convert export named declaration with a declaration" do
7+
ast = Builder.export_named_declaration(
8+
Builder.identifier(:test)
9+
)
10+
11+
assert Generator.generate(ast) == "export test;"
12+
end
13+
14+
should "convert export named declaration with one specifier" do
15+
ast = Builder.export_named_declaration(nil, [
16+
Builder.export_specifier(
17+
Builder.identifier(:test),
18+
Builder.identifier(:test)
19+
)]
20+
)
21+
22+
assert Generator.generate(ast) == "export { test };"
23+
end
24+
25+
should "convert export named declaration with one specifier with an alias" do
26+
ast = Builder.export_named_declaration(nil, [
27+
Builder.export_specifier(
28+
Builder.identifier(:test),
29+
Builder.identifier(:test1)
30+
)]
31+
)
32+
33+
assert Generator.generate(ast) == "export { test as test1 };"
34+
end
35+
36+
should "convert export declaration with more than one specifier" do
37+
ast = Builder.export_named_declaration(nil,
38+
[
39+
Builder.export_specifier(
40+
Builder.identifier(:top),
41+
Builder.identifier(:top)
42+
),
43+
Builder.export_specifier(
44+
Builder.identifier(:test),
45+
Builder.identifier(:test1)
46+
)
47+
],
48+
Builder.literal(:test)
49+
)
50+
51+
assert Generator.generate(ast) == "export { top, test as test1 } from 'test';"
52+
end
53+
54+
55+
should "convert export all declaration" do
56+
ast = Builder.export_all_declaration(Builder.literal(:test))
57+
58+
assert Generator.generate(ast) == "export * from 'test';"
59+
end
60+
61+
end
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
defmodule ESTree.Tools.Generator.ImportDeclaration.Test do
2+
use ShouldI
3+
alias ESTree.Tools.Builder
4+
alias ESTree.Tools.Generator
5+
6+
should "convert import declaration with one specifier" do
7+
ast = Builder.import_declaration([
8+
Builder.import_specifier(
9+
Builder.identifier(:test),
10+
Builder.identifier(:test)
11+
)],
12+
Builder.literal(:test)
13+
)
14+
15+
assert Generator.generate(ast) == "import { test } from 'test';"
16+
end
17+
18+
should "convert import declaration with one specifier with an alias" do
19+
ast = Builder.import_declaration([
20+
Builder.import_specifier(
21+
Builder.identifier(:test),
22+
Builder.identifier(:test1)
23+
)],
24+
Builder.literal(:test)
25+
)
26+
27+
assert Generator.generate(ast) == "import { test as test1 } from 'test';"
28+
end
29+
30+
should "convert import declaration with more than one specifier" do
31+
ast = Builder.import_declaration(
32+
[
33+
Builder.import_specifier(
34+
Builder.identifier(:top),
35+
Builder.identifier(:top)
36+
),
37+
Builder.import_specifier(
38+
Builder.identifier(:test),
39+
Builder.identifier(:test1)
40+
)
41+
],
42+
Builder.literal(:test)
43+
)
44+
45+
assert Generator.generate(ast) == "import { top, test as test1 } from 'test';"
46+
end
47+
48+
49+
should "convert import declaration with one default specifier" do
50+
ast = Builder.import_declaration([
51+
Builder.import_default_specifier(
52+
Builder.identifier(:test),
53+
Builder.identifier(:test)
54+
)],
55+
Builder.literal(:test)
56+
)
57+
58+
assert Generator.generate(ast) == "import test from 'test';"
59+
end
60+
61+
should "convert import declaration with a namespace specifier" do
62+
ast = Builder.import_declaration([
63+
Builder.import_namespace_specifier(
64+
Builder.identifier(:test)
65+
)],
66+
Builder.literal(:test)
67+
)
68+
69+
assert Generator.generate(ast) == "import * as test from 'test';"
70+
end
71+
72+
end

0 commit comments

Comments
 (0)