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

"Go: Generate Unit Tests For Function" does not handle generics #3425

Closed
haraldrudell opened this issue Jun 16, 2024 · 3 comments
Closed

"Go: Generate Unit Tests For Function" does not handle generics #3425

haraldrudell opened this issue Jun 16, 2024 · 3 comments
Milestone

Comments

@haraldrudell
Copy link

haraldrudell commented Jun 16, 2024

What version of Go, VS Code & VS Code Go extension are you using?

Version Information
  • Run go version to get version of Go from the VS Code integrated terminal.

    • go version go1.22.3 darwin/arm64
  • Run gopls -v version to get version of Gopls from the VS Code integrated terminal.

  • Run code -v or code-insiders -v to get version of VS Code or VS Code Insiders.

    • 1.90.0
  • Check your installed extensions to get the version of the VS Code Go extension

    • Go v0.41.4
  • Run Ctrl+Shift+P (Cmd+Shift+P on Mac OS) > Go: Locate Configured Go Tools command.

    • Tools Configuration

Environment

GOBIN: undefined
toolsGopath:
gopath: /Users/foxyboy/go
GOROOT: /opt/homebrew/Cellar/go/1.22.3/libexec
PATH: /Users/foxyboy/bin:/Users/foxyboy/go/bin:/opt/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/foxyboy/Library/Android/sdk/platform-tools:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin

Tools

go:	/opt/homebrew/bin/go: go version go1.22.3 darwin/arm64

gopls:	/Users/foxyboy/go/bin/gopls	(version: v0.15.3 built with go: go1.22.1)
gotests:	/Users/foxyboy/go/bin/gotests	(version: v1.6.0 built with go: go1.22.0)
gomodifytags:	/Users/foxyboy/go/bin/gomodifytags	(version: v1.16.0 built with go: go1.22.0)
impl:	/Users/foxyboy/go/bin/impl	(version: v1.1.0 built with go: go1.22.0)
goplay:	/Users/foxyboy/go/bin/goplay	(version: v1.0.0 built with go: go1.22.0)
dlv:	/Users/foxyboy/go/bin/dlv	(version: v1.22.0 built with go: go1.22.0)
staticcheck:	/Users/foxyboy/go/bin/staticcheck	(version: v0.4.6 built with go: go1.22.0)

Go env

Workspace Folder (parl): /opt/sw/parl

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/foxyboy/Library/Caches/go-build'
GOENV='/Users/foxyboy/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/foxyboy/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/foxyboy/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/opt/homebrew/Cellar/go/1.22.3/libexec'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/opt/homebrew/Cellar/go/1.22.3/libexec/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.3'
GCCGO='gccgo'
AR='ar'
CC='cc'
CXX='c++'
CGO_ENABLED='1'
GOMOD='/opt/sw/parl/go.mod'
GOWORK='/opt/sw/parl/go.work'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/sq/0x1_9fyn1bv907s7ypfryt1c0000gn/T/go-build2682538169=/tmp/go-build -gno-record-gcc-switches -fno-common'

Share the Go related settings you have added/edited

Run Preferences: Open Settings (JSON) command to open your settings.json file.
Share all the settings with the go. or ["go"] or gopls prefixes.

Describe the bug

A clear and concise description of what the bug.
A clear and concise description of what you expected to happen.

Steps to reproduce the behavior:

  1. In the below program, right-click the “return” line and select “Go: Generate Unit Test For Function”
  2. BUG: toaster: “No tests generated for ….go”

EXPECTED:
a *_test.go file to be created

It has been requested by others to explain why tests are not generated, and the statement has been that gopls does not provide why it is not creating tests

Regardless, tests should be created

/*
© 2024–present Harald Rudell <[email protected]> https://haraldrudell.github.io/haraldrudell/)
ISC License
*/

package parl

type AnyCount[T any] struct{}

func (a AnyCount[T]) Count() (count int) {
	return
}

@gopherbot gopherbot added this to the Untriaged milestone Jun 16, 2024
@adonovan adonovan changed the title Tests Are Not Created with toaster: No tests generated for… "Go: Generate Unit Tests For Function" fails with "BUG: toaster: “No tests generated for ….go” Jun 18, 2024
@adonovan
Copy link
Member

This VS Code command invokes the gotests command as a subprocess. The generateTests function in vscode-go/src/goGenerateTests.ts doesn't use the stderr value returned by child_process.execFile, so the explanation is discarded. It should at least be printed to the log.

@hyangah
Copy link
Contributor

hyangah commented Jun 20, 2024

The following is the exact command the extension uses to call gotests,
and the message shown in the prompt is the only output/feedback coming from the gotests tool
for this specific case

$ gotests -w -only ^AnyCount[T]Count$ /Users/hakim/xx/main.go
No tests generated for /Users/hakim/xx/main.go

The pattern passed to the -only flag param is wrong, but also, gotests nor the extension's integration doesn't support generics.

Related: cweill/gotests#165
Proposed plan: migrate the functionality to gopls - golang/go#47479 and #1594

@hyangah hyangah changed the title "Go: Generate Unit Tests For Function" fails with "BUG: toaster: “No tests generated for ….go” "Go: Generate Unit Tests For Function" does not handle generics Jun 20, 2024
@hyangah
Copy link
Contributor

hyangah commented Jun 20, 2024

Thanks for the report @haraldrudell
Closing since the root cause is in the upstream tool, and we hope to provide better error messages when gopls takes over the functionality.

@hyangah hyangah closed this as not planned Won't fix, can't repro, duplicate, stale Jun 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants