Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(test): allow gno test to default to the current directory #3453

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions gnovm/cmd/gno/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,6 @@ func (c *testCfg) RegisterFlags(fs *flag.FlagSet) {
}

func execTest(cfg *testCfg, args []string, io commands.IO) error {
if len(args) < 1 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you make it work by simply putting args as []string{"."} when it's empty? The current approach, verifying paths, looks a bit hacky.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Putting args as []string{"."} when it's empty works for simple cases like gno test, but it falls apart once you add flags, because args won't be empty anymore.

I also have to check if ./... is in args, since when you run a command with ./... and no matching packages are found, the paths end up with a length of 0. That would incorrectly make it look like there are no path args, which is a false positive.

So while verifying paths might seem a bit clunky, it’s necessary to handle all these edge cases properly.

return flag.ErrHelp
}

// guess opts.RootDir
if cfg.rootDir == "" {
cfg.rootDir = gnoenv.RootDir()
Expand All @@ -159,9 +155,16 @@ func execTest(cfg *testCfg, args []string, io commands.IO) error {
if err != nil {
return fmt.Errorf("list targets from patterns: %w", err)
}

// Assume current directory if no paths are provided
if len(paths) == 0 {
io.ErrPrintln("no packages to test")
return nil
for _, arg := range args {
if strings.Contains(arg, "/...") {
io.ErrPrintln("no packages to test")
return nil
}
}
paths = []string{"."}
}

if cfg.timeout > 0 {
Expand Down
6 changes: 0 additions & 6 deletions gnovm/cmd/gno/testdata/test/no_args.txtar

This file was deleted.

6 changes: 6 additions & 0 deletions gnovm/cmd/gno/testdata/test/no_path_empty_dir.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Run gno test without path argument on an empty dir

gno test

! stdout .+
stderr '[no test files]'
8 changes: 8 additions & 0 deletions gnovm/cmd/gno/testdata/test/no_path_empty_gno.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Test empty gno without path argument

gno test

! stdout .+
stderr '\? \. \[no test files\]'

-- empty.gno --
99 changes: 99 additions & 0 deletions gnovm/cmd/gno/testdata/test/no_path_flag_run.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Run test on gno.land/p/demo/ufmt without path argument

gno test

gno test -v

! stdout .+
stderr '=== RUN TestRun/hello'
stderr '=== RUN TestRun/hi_you'
stderr '=== RUN TestRun/hi_me'
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

gno test -v -run .*

! stdout .+
stderr '=== RUN TestRun/hello'
stderr '=== RUN TestRun/hi_you'
stderr '=== RUN TestRun/hi_me'
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

gno test -v -run NotExists

! stdout .+
! stderr '=== RUN TestRun'

gno test -v -run .*/hello

! stdout .+
stderr '=== RUN TestRun/hello'
! stderr '=== RUN TestRun/hi_you'
! stderr '=== RUN TestRun/hi_me'
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

gno test -v -run .*/hi

! stdout .+
! stderr '=== RUN TestRun/hello'
stderr '=== RUN TestRun/hi_you'
stderr '=== RUN TestRun/hi_me'
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

gno test -v -run .*/NotExists

! stdout .+
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

gno test -v -run Run/.*

! stdout .+
stderr '=== RUN TestRun/hello'
stderr '=== RUN TestRun/hi_you'
stderr '=== RUN TestRun/hi_me'
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

gno test -v -run Run/

! stdout .+
stderr '=== RUN TestRun/hello'
stderr '=== RUN TestRun/hi_you'
stderr '=== RUN TestRun/hi_me'
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

gno test -v -run Run/hello

! stdout .+
stderr '=== RUN TestRun/hello'
! stderr '=== RUN TestRun/hi_you'
! stderr '=== RUN TestRun/hi_me'
stderr '=== RUN TestRun'
stderr '--- PASS: TestRun'

-- run.gno --
package run

-- run_test.gno --
package run

import (
"fmt"
"testing"
)

func TestRun(t *testing.T) {
cases := []string {
"hello",
"hi you",
"hi me",
}
for _, tc := range cases {
t.Run(tc, func(t *testing.T) {})
}
}
26 changes: 26 additions & 0 deletions gnovm/cmd/gno/testdata/test/no_path_valid_filetest.txtar
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd say this and the following test (valid_test) are redundant, I would remove them

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed those two tests.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Test with a valid _filetest.gno file

gno test

! stdout .+
stderr 'ok \. \d\.\d\ds'

gno test -v

stdout 'test'
stderr '=== RUN file/valid_filetest.gno'
stderr '--- PASS: file/valid_filetest.gno \(\d\.\d\ds\)'
stderr 'ok \. \d\.\d\ds'

-- valid.gno --
package valid

-- valid_filetest.gno --
package main

func main() {
println("test")
}

// Output:
// test
18 changes: 18 additions & 0 deletions gnovm/cmd/gno/testdata/test/no_path_valid_test.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Test with a valid _test.gno file without path argument

gno test

! stdout .+
stderr 'ok \. \d\.\d\ds'

-- valid.gno --
package valid

-- valid_test.gno --
package valid

import "testing"

func TestAlwaysValid(t *testing.T) {
// noop
}
Loading