Skip to content

Commit 769fae1

Browse files
committedNov 29, 2021
Add unit tests
1 parent 1b50340 commit 769fae1

File tree

10 files changed

+158
-35
lines changed

10 files changed

+158
-35
lines changed
 

‎go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.16
44

55
require (
66
github.com/go-generalize/go2ts v1.0.5 // indirect
7+
github.com/google/go-cmp v0.5.6 // indirect
78
github.com/k0kubun/pp v3.0.1+incompatible // indirect
89
github.com/mattn/go-colorable v0.1.8 // indirect
910
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect

‎go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ github.com/go-generalize/go2ts v1.0.4/go.mod h1:075q+zcpc6IjwYy9WpJpY+M9ssbEA6uc
33
github.com/go-generalize/go2ts v1.0.5 h1:AA0crVIsEmxmcPDorBXevOt8cEwVl3iLkCEaElb/Mmk=
44
github.com/go-generalize/go2ts v1.0.5/go.mod h1:075q+zcpc6IjwYy9WpJpY+M9ssbEA6uccjzWwr59t3M=
55
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
6+
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
7+
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
68
github.com/iancoleman/strcase v0.1.2/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE=
79
github.com/k0kubun/pp v3.0.1+incompatible h1:3tqvf7QgUnZ5tXO6pNAZlrvHgl6DvifjDrd9g2S9Z40=
810
github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg=

‎pkg/generator/generator.go

+6-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
_ "embed"
77
"fmt"
88
"sort"
9-
"strings"
109
"text/template"
1110

1211
tstypes "github.com/go-generalize/go2ts/pkg/types"
@@ -51,7 +50,6 @@ type generatorParam struct {
5150
Consts []constant
5251
Objects []object
5352

54-
FileName string
5553
UseTimePackage bool
5654
}
5755

@@ -60,22 +58,19 @@ type metadata struct {
6058
inlineIndex int
6159
}
6260

63-
func NewGenerator(types map[string]tstypes.Type, prereserved []string, fileName string) *Generator {
61+
func NewGenerator(types map[string]tstypes.Type, prereserved []string) *Generator {
6462
prs := map[string]string{}
6563
for _, p := range prereserved {
6664
_, name := SplitPackegeStruct(p)
6765
prs[name] = p
6866
}
6967

7068
return &Generator{
71-
types: types,
72-
generatorParam: generatorParam{
73-
FileName: strings.TrimSuffix(fileName, ".dart"),
74-
},
75-
76-
converted: map[string]string{},
77-
reserved: map[string]struct{}{},
78-
prereserved: prs,
69+
types: types,
70+
generatorParam: generatorParam{},
71+
converted: map[string]string{},
72+
reserved: map[string]struct{}{},
73+
prereserved: prs,
7974
}
8075
}
8176

‎pkg/generator/generator_test.go

+83-16
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,41 @@
11
package generator
22

33
import (
4+
_ "embed"
5+
"encoding/json"
6+
"fmt"
47
"os"
8+
"os/exec"
9+
"path/filepath"
510
"testing"
611

712
"github.com/go-generalize/go2ts/pkg/parser"
13+
"github.com/google/go-cmp/cmp"
814
)
915

10-
func TestGenerate(t *testing.T) {
11-
// filter := func(opt *parser.FilterOpt) bool {
12-
// if opt.Dependency {
13-
// return true
14-
// }
15-
// if !opt.BasePackage {
16-
// return false
17-
// }
18-
// if !opt.Exported {
19-
// return false
20-
// }
16+
const runnerDart = `import 'dart:convert';
17+
import 'dart:io';
18+
import 'gen.dart';
2119
22-
// return strings.HasSuffix(opt.Name, "Request") || strings.HasSuffix(opt.Name, "Response")
23-
// }
20+
void main(List<String> arguments) async {
21+
final input = await stdin.transform(utf8.decoder).join('');
2422
25-
psr, err := parser.NewParser("./testdata/standard", parser.All)
23+
print(jsonEncode(%s.fromJson(jsonDecode(input)).toJson()));
24+
}
25+
`
26+
27+
func parseJson(t *testing.T, v string) map[string]interface{} {
28+
t.Helper()
29+
m := map[string]interface{}{}
30+
if err := json.Unmarshal([]byte(v), &m); err != nil {
31+
t.Fatal(err)
32+
}
2633

34+
return m
35+
}
36+
37+
func testWithDatasets(t *testing.T, dir, structName string) {
38+
psr, err := parser.NewParser(dir, parser.All)
2739
if err != nil {
2840
t.Fatal(err)
2941
}
@@ -33,14 +45,69 @@ func TestGenerate(t *testing.T) {
3345
if err != nil {
3446
t.Fatal(err)
3547
}
36-
gen := NewGenerator(res, []string{}, "a.dart")
48+
gen := NewGenerator(res, []string{})
3749
b, err := gen.Generate()
3850

3951
if err != nil {
4052
t.Fatal(err)
4153
}
4254

43-
if err := os.WriteFile("./testdata/standard/gen.dart", []byte(b), 0744); err != nil {
55+
if err := os.WriteFile(filepath.Join(dir, "/gen.dart"), []byte(b), 0744); err != nil {
56+
t.Fatal(err)
57+
}
58+
59+
runnerDart := fmt.Sprintf(
60+
runnerDart,
61+
structName,
62+
)
63+
64+
runnerDartPath := filepath.Join(dir, "/runner.dart")
65+
66+
if err := os.WriteFile(runnerDartPath, []byte(runnerDart), 0744); err != nil {
4467
t.Fatal(err)
4568
}
69+
70+
datasetsDir := filepath.Join(dir, "datasets")
71+
72+
des, err := os.ReadDir(datasetsDir)
73+
74+
if err != nil {
75+
t.Fatal(err)
76+
}
77+
78+
for _, d := range des {
79+
t.Run(d.Name(), func(t *testing.T) {
80+
fp, err := os.Open(filepath.Join(datasetsDir, d.Name(), "input.json"))
81+
82+
if err != nil {
83+
t.Fatal(err)
84+
}
85+
defer fp.Close()
86+
87+
cmd := exec.Command("dart", "run", runnerDartPath)
88+
cmd.Stdin = fp
89+
output, err := cmd.CombinedOutput()
90+
if err != nil {
91+
t.Fatal(err, string(output))
92+
}
93+
94+
expectedBytes, err := os.ReadFile(filepath.Join(datasetsDir, d.Name(), "output.json"))
95+
if err != nil {
96+
t.Fatal(err)
97+
}
98+
99+
t.Log("output", string(output))
100+
101+
expectedJson := parseJson(t, string(expectedBytes))
102+
outputJson := parseJson(t, string(output))
103+
104+
if diff := cmp.Diff(expectedJson, outputJson); diff != "" {
105+
t.Errorf("diff: %s", diff)
106+
}
107+
})
108+
}
109+
}
110+
111+
func TestGenerator_Generate(t *testing.T) {
112+
testWithDatasets(t, "testdata/standard", "PostUserRequest")
46113
}

‎pkg/generator/testdata/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.dart

‎pkg/generator/testdata/standard/.gitignore

-1
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"Array": [
3+
"OK",
4+
"Failure"
5+
],
6+
"B": {"a": false},
7+
"Mode": 1,
8+
"s": "sss",
9+
"Status": {
10+
"aaa": [
11+
"OK",
12+
"Failure"
13+
],
14+
"bbb": null
15+
},
16+
"SinS": {
17+
"A": true,
18+
"B": "sss",
19+
"C": [
20+
"sss",
21+
"sss"
22+
]
23+
},
24+
"T": "2006-04-13T14:12:53.424212Z"
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"Array": [
3+
"OK",
4+
"Failure"
5+
],
6+
"B": {"a": false},
7+
"Mode": 1,
8+
"s": "sss",
9+
"Status": {
10+
"aaa": [
11+
"OK",
12+
"Failure"
13+
],
14+
"bbb": null
15+
},
16+
"SinS": {
17+
"A": true,
18+
"B": "sss",
19+
"C": [
20+
"sss",
21+
"sss"
22+
]
23+
},
24+
"SinSs": null,
25+
"T": "2006-04-13T14:12:53.424212Z"
26+
}

‎pubspec.lock

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
11
# Generated by pub
22
# See https://dart.dev/tools/pub/glossary#lockfile
33
packages:
4-
json_annotation:
4+
clock:
5+
dependency: transitive
6+
description:
7+
name: clock
8+
url: "https://pub.dartlang.org"
9+
source: hosted
10+
version: "1.1.0"
11+
intl:
512
dependency: "direct main"
613
description:
7-
name: json_annotation
14+
name: intl
815
url: "https://pub.dartlang.org"
916
source: hosted
10-
version: "4.1.0"
11-
meta:
17+
version: "0.17.0"
18+
path:
1219
dependency: transitive
1320
description:
14-
name: meta
21+
name: path
1522
url: "https://pub.dartlang.org"
1623
source: hosted
17-
version: "1.7.0"
24+
version: "1.8.0"
1825
sdks:
1926
dart: ">=2.12.1 <3.0.0"

‎pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ environment:
55
sdk: '>=2.12.1 <3.0.0'
66

77
dependencies:
8-
json_annotation: ^4.0.0
8+
intl: ^0.17.0

0 commit comments

Comments
 (0)
Please sign in to comment.