From 7c1f361e253dbc61e2456c9778104da18f61a0a5 Mon Sep 17 00:00:00 2001 From: Yury Smolsky Date: Fri, 1 Jun 2018 13:14:48 +0300 Subject: [PATCH] test: add comments for all test actions Every action has a short annotation. The errorCheck function has a comment adapted from errchk script. Removed redundant assigments to tmpDir. Change-Id: Ifdd1284de046a0ce2aad26bd8da8a8e6a7707a8e Reviewed-on: https://go-review.googlesource.com/115856 Run-TryBot: Yury Smolsky TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- test/run.go | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/test/run.go b/test/run.go index 3cd1911877..99ef79feb1 100644 --- a/test/run.go +++ b/test/run.go @@ -616,6 +616,8 @@ func (t *test) run() { t.err = fmt.Errorf("unimplemented action %q", action) case "asmcheck": + // Compile Go file and match the generated assembly + // against a set of regexps in comments. ops := t.wantedAsmOpcodes(long) for _, env := range ops.Envs() { cmdline := []string{"build", "-gcflags", "-S"} @@ -640,6 +642,9 @@ func (t *test) run() { return case "errorcheck": + // Compile Go file. + // Fail if wantError is true and compilation was successful and vice versa. + // Match errors produced by gc against errors in comments. // TODO(gri) remove need for -C (disable printing of columns in error messages) cmdline := []string{goTool(), "tool", "compile", "-C", "-e", "-o", "a.o"} // No need to add -dynlink even if linkshared if we're just checking for errors... @@ -664,10 +669,11 @@ func (t *test) run() { return case "compile": + // Compile Go file. _, t.err = compileFile(runcmd, long, flags) case "compiledir": - // Compile all files in the directory in lexicographic order. + // Compile all files in the directory as packages in lexicographic order. longdir := filepath.Join(cwd, t.goDirName()) pkgs, err := goDirPackages(longdir, singlefilepkgs) if err != nil { @@ -682,8 +688,9 @@ func (t *test) run() { } case "errorcheckdir", "errorcheckandrundir": - // errorcheck all files in lexicographic order - // useful for finding importing errors + // Compile and errorCheck all files in the directory as packages in lexicographic order. + // If errorcheckdir and wantError, compilation of the last package must fail. + // If errorcheckandrundir and wantError, compilation of the package prior the last must fail. longdir := filepath.Join(cwd, t.goDirName()) pkgs, err := goDirPackages(longdir, singlefilepkgs) if err != nil { @@ -725,8 +732,10 @@ func (t *test) run() { fallthrough case "rundir": - // Compile all files in the directory in lexicographic order. - // then link as if the last file is the main package and run it + // Compile all files in the directory as packages in lexicographic order. + // In case of errorcheckandrundir, ignore failed compilation of the package before the last. + // Link as if the last file is the main package, run it. + // Verify the expected output. longdir := filepath.Join(cwd, t.goDirName()) pkgs, err := goDirPackages(longdir, singlefilepkgs) if err != nil { @@ -763,6 +772,7 @@ func (t *test) run() { } case "build": + // Build Go file. _, err := runcmd(goTool(), "build", goGcflags(), "-o", "a.exe", long) if err != nil { t.err = err @@ -770,7 +780,7 @@ func (t *test) run() { case "builddir", "buildrundir": // Build an executable from all the .go and .s files in a subdirectory. - useTmp = true + // Run it and verify its output in the buildrundir case. longdir := filepath.Join(cwd, t.goDirName()) files, dirErr := ioutil.ReadDir(longdir) if dirErr != nil { @@ -839,9 +849,10 @@ func (t *test) run() { } } - case "buildrun": // build binary, then run binary, instead of go run. Useful for timeout tests where failure mode is infinite loop. + case "buildrun": + // Build an executable from Go file, then run it, verify its output. + // Useful for timeout tests where failure mode is infinite loop. // TODO: not supported on NaCl - useTmp = true cmd := []string{goTool(), "build", goGcflags(), "-o", "a.exe"} if *linkshared { cmd = append(cmd, "-linkshared") @@ -866,6 +877,9 @@ func (t *test) run() { } case "run": + // Run Go file if no special go command flags are provided; + // otherwise build an executable and run it. + // Verify the output. useTmp = false var out []byte var err error @@ -908,6 +922,8 @@ func (t *test) run() { } case "runoutput": + // Run Go file and write its output into temporary Go file. + // Run generated Go file and verify its output. rungatec <- true defer func() { <-rungatec @@ -943,6 +959,8 @@ func (t *test) run() { } case "errorcheckoutput": + // Run Go file and write its output into temporary Go file. + // Compile and errorCheck generated Go file. useTmp = false cmd := []string{goTool(), "run", goGcflags()} if *linkshared { @@ -1038,6 +1056,17 @@ func splitOutput(out string, wantAuto bool) []string { return res } +// errorCheck matches errors in outStr against comments in source files. +// For each line of the source files which should generate an error, +// there should be a comment of the form // ERROR "regexp". +// If outStr has an error for a line which has no such comment, +// this function will report an error. +// Likewise if outStr does not have an error for a line which has a comment, +// or if the error message does not match the . +// The syntax is Perl but its best to stick to egrep. +// +// Sources files are supplied as fullshort slice. +// It consists of pairs: full path to source file and it's base name. func (t *test) errorCheck(outStr string, wantAuto bool, fullshort ...string) (err error) { defer func() { if *verbose && err != nil { -- 2.50.0