You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
testscript: merge coverage from all test binary executions
First, consolidate how top-level commands registered via RunMain are
executed. Before, they could only be run directly, such as "foo <args>".
This worked because the command would run the test binary with a special
TESTSCRIPT_COMMAND env variable, telling the sub-process what command to
run.
The unfortunate side effect was that the commands only worked when
called directly. They wouldn't work when called indirectly, such as
"exec foo" or "go build -toolexec=foo".
To fix that inconsistency, we now set up a directory in $PATH with all
the commands as copies of the test binary. The test binary sub-process
knows what command it should execute thanks to os.Args[0]. This also
lets us get rid of the TESTSCRIPT_COMMAND dance.
Second, make all top-level command executions write coverage profiles if
the -coverprofile test flag was used. Similar to the case before, this
only used to work for direct command executions, not indirect ones. Now
they all get merged into the final coverage profile.
This is accomplished by having them all write coverage profiles under a
shared directory. Once all scripts have run, the parent process walks
that directory and merges all profiles found in it.
Third, add a test that ensures both of the refactors above work well. It
lives under gotooltest, since it runs the real "go test -coverprofile".
It checks all three ways mentioned above to run a top-level command, as
well as checking that all three count towards the total coverage.
Note that some tests needed to be amended to keep working after the
refactor. For example, some tests used a custom "echo" command as well
as the system's "exec echo". Since now both of those would execute the
testscript command, rename that command to fprintargs, which is also
clearer and less ambiguous.
Similarly, dropgofrompath had to be used in one more test, and had to be
adapted to actually do the intended thing on Windows rather than just
emptying the entire PATH variable.
Also swap Go's 1.16beta1 for 1.16rc1 in CI, since the former is now
failing due to a bug in setup-go.
0 commit comments