5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 21:00:31 +08:00
wails/v3/internal/generator/analyse_test.go
Fabio Massaioli f01b4b9a21
[v3] Fix binding generator bugs (#4001)
* Add some clarifying comments

* Remove special handling of window parameters

* Improve internal method exclusion

* Add test for internal method exclusion

* Remove useless blank field from app options

This is a leftover from an older version of the static analyser. It should have been removed long ago.

* Remove redundant godebug setting

gotypesalias=1 is the default starting with go1.23

* Use new range for syntax to simplify code

* Remove generator dependency on github.com/samber/lo

* Ensure generator testing tasks do not use the test cache

* Rename cyclic types test

* Test for cyclic imports

* Fix import cycle between model files

* Sort class aliases after their aliased class

* Test class aliases

* Fix length of default value for array types

* Test array initialization

* Add changelog

* Update changelog

* Fix contrived marking technique in model sorting algorithm

* Update binding example

* Update test data

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-01-17 18:56:07 +11:00

117 lines
2.2 KiB
Go

package generator
import (
"encoding/json"
"errors"
"go/types"
"os"
"path"
"path/filepath"
"slices"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/pterm/pterm"
"github.com/wailsapp/wails/v3/internal/generator/config"
)
func TestAnalyser(t *testing.T) {
type testParams struct {
name string
want []string
}
// Gather tests from cases directory.
entries, err := os.ReadDir("testcases")
if err != nil {
t.Fatal(err)
}
tests := make([]testParams, 0, len(entries)+1)
for _, entry := range entries {
if !entry.IsDir() {
continue
}
test := testParams{
name: entry.Name(),
want: make([]string, 0),
}
want, err := os.Open(filepath.Join("testcases", entry.Name(), "bound_types.json"))
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
t.Fatal(err)
}
} else {
err = json.NewDecoder(want).Decode(&test.want)
want.Close()
if err != nil {
t.Fatal(err)
}
}
for i := range test.want {
test.want[i] = path.Clean("github.com/wailsapp/wails/v3/internal/generator/testcases/" + test.name + test.want[i])
}
slices.Sort(test.want)
tests = append(tests, test)
}
// Add global test.
{
all := testParams{
name: "...",
}
for _, test := range tests {
all.want = append(all.want, test.want...)
}
slices.Sort(all.want)
tests = append(tests, all)
}
// Resolve system package paths.
systemPaths, err := ResolveSystemPaths(nil)
if err != nil {
t.Fatal(err)
}
for _, test := range tests {
pkgPattern := "github.com/wailsapp/wails/v3/internal/generator/testcases/" + test.name
t.Run("pkg="+test.name, func(t *testing.T) {
pkgs, err := LoadPackages(nil, pkgPattern)
if err != nil {
t.Fatal(err)
}
for _, pkg := range pkgs {
for _, err := range pkg.Errors {
pterm.Warning.Println(err)
}
}
got := make([]string, 0)
services, err := FindServices(pkgs, systemPaths, config.DefaultPtermLogger(nil))
if err != nil {
t.Error(err)
}
for obj := range services {
got = append(got, types.TypeString(obj.Type(), nil))
}
slices.Sort(got)
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("Found services mismatch (-want +got):\n%s", diff)
}
})
}
}