package parser import ( "testing" "github.com/samber/lo" "github.com/stretchr/testify/require" ) func TestParseDirectory(t *testing.T) { tests := []struct { name string dir string want []string wantErr bool }{ { name: "should find single bound service", dir: "testdata/struct_literal_single", want: []string{"main.GreetService"}, wantErr: false, }, { name: "should find multiple bound services", dir: "testdata/struct_literal_multiple", want: []string{"main.GreetService", "main.OtherService"}, wantErr: false, }, { name: "should find multiple bound services over multiple files", dir: "testdata/struct_literal_multiple_files", want: []string{"main.GreetService", "main.OtherService"}, wantErr: false, }, { name: "should find multiple bound services over multiple packages", dir: "testdata/struct_literal_multiple_other", want: []string{"main.GreetService", "services.OtherService"}, wantErr: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { Debug = true got, err := ParseDirectory(tt.dir) if (err != nil) != tt.wantErr { t.Errorf("ParseDirectory() error = %v, wantErr %v", err, tt.wantErr) return } for name, pkg := range got.packages { for structName, structType := range pkg.boundStructs { require.NotNil(t, structType) require.True(t, lo.Contains(tt.want, name+"."+structName)) tt.want = lo.Without(tt.want, name+"."+structName) } } require.Empty(t, tt.want) }) } } //func TestGenerateTypeScript(t *testing.T) { // tests := []struct { // name string // dir string // want string // wantErr bool // }{ // { // name: "should find single bound service", // dir: "testdata/struct_literal_single", // want: `namespace main { // class GreetService { // SomeVariable: number; // } //} //`, // wantErr: false, // }, // { // name: "should find multiple bound services", // dir: "testdata/struct_literal_multiple", // want: `namespace main { // class GreetService { // SomeVariable: number; // } // class OtherService { // } //} //`, // wantErr: false, // }, // { // name: "should find multiple bound services over multiple files", // dir: "testdata/struct_literal_multiple_files", // want: `namespace main { // class GreetService { // SomeVariable: number; // } // class OtherService { // } //} //`, // wantErr: false, // }, // { // name: "should find bound services from other packages", // dir: "../../examples/binding", // want: `namespace main { // class localStruct { // } //} //namespace models { // class Person { // Name: string; // } //} //namespace services { // class GreetService { // SomeVariable: number; // Parent: models.Person; // } //} //`, // wantErr: false, // }, // } // for _, tt := range tests { // t.Run(tt.name, func(t *testing.T) { // Debug = true // context, err := ParseDirectory(tt.dir) // if (err != nil) != tt.wantErr { // t.Errorf("ParseDirectory() error = %v, wantErr %v", err, tt.wantErr) // return // } // // ts, err := GenerateModels(context) // require.NoError(t, err) // require.Equal(t, tt.want, string(ts)) // // }) // } //}