-
Notifications
You must be signed in to change notification settings - Fork 846
Description
Users complain that the handy run test | debug test links above their test functions ignore the flags they set in their launch configuration (example, example, example). They can fallback on settings.json using go.testFlags, go.delveConfig, etc, but that is not obvious or intuitive and has surprised users with additional limitations for debug test vs run test (e.g. #1636, microsoft/vscode-go#2894 (comment), microsoft/vscode-go#2115 (comment)).
According to @ramya-rao-a, a while back there was no way to feed current selected launch configuration into the codelens, so another set of dlv-related settings was supported as an alternative. Since then a new mechanism to support this could have been introduced, so we should investigate what is possible now.
Below is a quick way to reproduce the current behavior:
Test function:
func TestA(t *testing.T) {
log.Println("TestA running")
if !testing.Verbose() {
t.Fatal()
}
}
Selected launch configuration
{
"name": "Launch test function",
"type": "go",
"request": "launch",
"mode": "test",
"program": "${workspaceFolder}",
"args": [
"-test.run", "TestA", // no impact with or without on `run/debug test`, which adds its own `-run ^TestA$`
"-test.v"
]
},
Debug with ▷ Start Debugging or Run > Start Debugging (F5)
Uses launch.json configuration, so the test passes.

Debug with debug test
Doesn't use launch.json configuration, so the test fails.

Run with Run > Run Without Debugging (^F5)
Uses launch.json configuration, so the test passes. (Note that this actually goes through the debug adapter, which launches dlv - see #336)

Run with run test
Doesn't use launch.json configuration, so the test fails. (Note that this uses go test and bypasses dlv - see #336)

Adding flags to settings.json
"go.testFlags": ["-test.v"]
run test now passes, but debug test behavior is unchanged.
"go.testFlags": ["-args","-test.v"]
run test passes, but only prints "ok", no details. debug test works as expected.
"go.testFlags": ["-v", "-args","-test.v"]
Combining these makes both work as expected - pass and print verbose details.