diff --git a/examples/gno.land/p/demo/tests/tests.gno b/examples/gno.land/p/demo/tests/tests.gno index f0e4173f313..1a2c2526d01 100644 --- a/examples/gno.land/p/demo/tests/tests.gno +++ b/examples/gno.land/p/demo/tests/tests.gno @@ -8,6 +8,8 @@ import ( rtests "gno.land/r/demo/tests" ) +const World = "world" + // IncCounter demonstrates that it's possible to call a realm function from // a package. So a package can potentially write into the store, by calling // an other realm. diff --git a/examples/gno.land/p/demo/tests/tests_test.gno b/examples/gno.land/p/demo/tests/tests_test.gno new file mode 100644 index 00000000000..49caf2a0294 --- /dev/null +++ b/examples/gno.land/p/demo/tests/tests_test.gno @@ -0,0 +1,18 @@ +package tests_test + +import ( + "testing" + + "gno.land/p/demo/tests" +) + +var World = "WORLD" + +func TestGetHelloWorld(t *testing.T) { + // tests.World is 'world' + s := "hello " + tests.World + World + const want = "hello worldWORLD" + if s != want { + t.Errorf("got %q want %q", s, want) + } +} diff --git a/gnovm/cmd/gno/test.go b/gnovm/cmd/gno/test.go index bd3284ce84a..38615c88c4e 100644 --- a/gnovm/cmd/gno/test.go +++ b/gnovm/cmd/gno/test.go @@ -299,15 +299,6 @@ func gnoTestPkg( // XXX: display a warn? mode = tests.ImportModeStdlibsPreferred } - testStore := tests.TestStore( - rootDir, "", - stdin, stdout, stderr, - mode, - ) - if verbose { - testStore.SetLogStoreOps(true) - } - if !verbose { // TODO: speedup by ignoring if filter is file/*? mockOut := bytes.NewBufferString("") @@ -329,9 +320,19 @@ func gnoTestPkg( // tfiles, ifiles := gno.ParseMemPackageTests(memPkg) tfiles, ifiles := parseMemPackageTests(memPkg) + testPkgName := getPkgNameFromFileset(ifiles) // run test files in pkg - { + if len(tfiles.Files) > 0 { + testStore := tests.TestStore( + rootDir, "", + stdin, stdout, stderr, + mode, + ) + if verbose { + testStore.SetLogStoreOps(true) + } + m := tests.TestMachine(testStore, stdout, gnoPkgPath) if printRuntimeMetrics { // from tm2/pkg/sdk/vm/keeper.go @@ -347,17 +348,38 @@ func gnoTestPkg( } } - // run test files in xxx_test pkg - { - testPkgName := getPkgNameFromFileset(ifiles) - if testPkgName != "" { - m := tests.TestMachine(testStore, stdout, testPkgName) - m.RunMemPackage(memPkg, true) - err := runTestFiles(m, ifiles, testPkgName, verbose, printRuntimeMetrics, runFlag, io) - if err != nil { - errs = multierr.Append(errs, err) + // test xxx_test pkg + if len(ifiles.Files) > 0 { + testStore := tests.TestStore( + rootDir, "", + stdin, stdout, stderr, + mode, + ) + if verbose { + testStore.SetLogStoreOps(true) + } + + m := tests.TestMachine(testStore, stdout, testPkgName) + + memFiles := make([]*std.MemFile, 0, len(ifiles.FileNames())+1) + for _, f := range memPkg.Files { + for _, ifileName := range ifiles.FileNames() { + if f.Name == "gno.mod" || f.Name == ifileName { + memFiles = append(memFiles, f) + break + } } } + + memPkg.Files = memFiles + memPkg.Name = testPkgName + memPkg.Path = memPkg.Path + "_test" + m.RunMemPackage(memPkg, true) + + err := runTestFiles(m, ifiles, testPkgName, verbose, printRuntimeMetrics, runFlag, io) + if err != nil { + errs = multierr.Append(errs, err) + } } } diff --git a/gnovm/cmd/gno/testdata/gno_test/flag_run.txtar b/gnovm/cmd/gno/testdata/gno_test/flag_run.txtar index 838206d15f9..23e5734011e 100644 --- a/gnovm/cmd/gno/testdata/gno_test/flag_run.txtar +++ b/gnovm/cmd/gno/testdata/gno_test/flag_run.txtar @@ -2,16 +2,8 @@ gno test . -stdout '=== RUN TestRun/hello' # show that t.Run doesn't care about -verbose -stdout '=== RUN TestRun/hi_you' -stdout '=== RUN TestRun/hi_me' - gno test ./run_test.gno -stdout '=== RUN TestRun/hello' # show that t.Run doesn't care about -verbose -stdout '=== RUN TestRun/hi_you' -stdout '=== RUN TestRun/hi_me' - gno test -verbose . stdout '=== RUN TestRun/hello' diff --git a/gnovm/cmd/gno/testdata/gno_test/pkg_underscore_test.txtar b/gnovm/cmd/gno/testdata/gno_test/pkg_underscore_test.txtar new file mode 100644 index 00000000000..d0455dce53c --- /dev/null +++ b/gnovm/cmd/gno/testdata/gno_test/pkg_underscore_test.txtar @@ -0,0 +1,69 @@ +# Test a pkg name with _test as suffix + +# Set up GNOROOT in the current directory. +mkdir $WORK/gnovm +symlink $WORK/gnovm/stdlibs -> $GNOROOT/gnovm/stdlibs +env GNOROOT=$WORK + +gno test -verbose ./examples/gno.land/p/demo/hello + +stderr '=== RUN TestHello' +stderr '--- PASS: TestHello.*' + +stderr '=== RUN TestHullo' +stderr '--- PASS: TestHullo.*' + +stderr '=== RUN file/z0_filetest.*' + +-- examples/gno.land/p/demo/hello/gno.mod -- +module gno.land/p/demo/hello + +-- examples/gno.land/p/demo/hello/hello.gno -- +package hello + +var Name = "foo" + +-- examples/gno.land/p/demo/hello/hello_test.gno -- +package hello_test + +import ( + "testing" + + "gno.land/p/demo/hello" +) + +var Name = "bar" + +func TestHello(t *testing.T) { + s := "hello " + hello.Name + " " + Name + const want = "hello foo bar" + if s != want { + t.Errorf("got: %q want %q", s, want) + } +} + +-- examples/gno.land/p/demo/hello/hullo_test.gno -- +package hello + +import ( + "testing" +) + +func TestHullo(t *testing.T) { + s := "hullo " + Name + const want = "hullo foo" + if s != want { + t.Errorf("got: %q want %q", s, want) + } +} + +-- examples/gno.land/p/demo/hello/z0_filetest.gno -- +package main + +import "gno.land/p/demo/hello" + +func main() { + println("filetest " + hello.Name) +} + +// Output: filetest foo