mirror of
https://github.com/golang/go.git
synced 2025-05-30 19:52:53 +00:00
cmd/go: add mv and support "! cmp" in script tests
For #50183 Change-Id: Ie384333fb7a69d0d2cfaba0cfc4eb7afba2fd745 Reviewed-on: https://go-review.googlesource.com/c/go/+/380916 Trust: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
6eb58cdffa
commit
827babf6aa
@ -491,6 +491,7 @@ var scriptCmds = map[string]func(*testScript, simpleStatus, []string){
|
||||
"go": (*testScript).cmdGo,
|
||||
"grep": (*testScript).cmdGrep,
|
||||
"mkdir": (*testScript).cmdMkdir,
|
||||
"mv": (*testScript).cmdMv,
|
||||
"rm": (*testScript).cmdRm,
|
||||
"skip": (*testScript).cmdSkip,
|
||||
"stale": (*testScript).cmdStale,
|
||||
@ -585,10 +586,6 @@ func (ts *testScript) cmdChmod(want simpleStatus, args []string) {
|
||||
|
||||
// cmp compares two files.
|
||||
func (ts *testScript) cmdCmp(want simpleStatus, args []string) {
|
||||
if want != success {
|
||||
// It would be strange to say "this file can have any content except this precise byte sequence".
|
||||
ts.fatalf("unsupported: %v cmp", want)
|
||||
}
|
||||
quiet := false
|
||||
if len(args) > 0 && args[0] == "-q" {
|
||||
quiet = true
|
||||
@ -597,14 +594,11 @@ func (ts *testScript) cmdCmp(want simpleStatus, args []string) {
|
||||
if len(args) != 2 {
|
||||
ts.fatalf("usage: cmp file1 file2")
|
||||
}
|
||||
ts.doCmdCmp(args, false, quiet)
|
||||
ts.doCmdCmp(want, args, false, quiet)
|
||||
}
|
||||
|
||||
// cmpenv compares two files with environment variable substitution.
|
||||
func (ts *testScript) cmdCmpenv(want simpleStatus, args []string) {
|
||||
if want != success {
|
||||
ts.fatalf("unsupported: %v cmpenv", want)
|
||||
}
|
||||
quiet := false
|
||||
if len(args) > 0 && args[0] == "-q" {
|
||||
quiet = true
|
||||
@ -613,17 +607,18 @@ func (ts *testScript) cmdCmpenv(want simpleStatus, args []string) {
|
||||
if len(args) != 2 {
|
||||
ts.fatalf("usage: cmpenv file1 file2")
|
||||
}
|
||||
ts.doCmdCmp(args, true, quiet)
|
||||
ts.doCmdCmp(want, args, true, quiet)
|
||||
}
|
||||
|
||||
func (ts *testScript) doCmdCmp(args []string, env, quiet bool) {
|
||||
func (ts *testScript) doCmdCmp(want simpleStatus, args []string, env, quiet bool) {
|
||||
name1, name2 := args[0], args[1]
|
||||
var text1, text2 string
|
||||
if name1 == "stdout" {
|
||||
switch name1 {
|
||||
case "stdout":
|
||||
text1 = ts.stdout
|
||||
} else if name1 == "stderr" {
|
||||
case "stderr":
|
||||
text1 = ts.stderr
|
||||
} else {
|
||||
default:
|
||||
data, err := os.ReadFile(ts.mkabs(name1))
|
||||
ts.check(err)
|
||||
text1 = string(data)
|
||||
@ -638,14 +633,28 @@ func (ts *testScript) doCmdCmp(args []string, env, quiet bool) {
|
||||
text2 = ts.expand(text2, false)
|
||||
}
|
||||
|
||||
if text1 == text2 {
|
||||
return
|
||||
}
|
||||
|
||||
if !quiet {
|
||||
eq := text1 == text2
|
||||
if !eq && !quiet && want != failure {
|
||||
fmt.Fprintf(&ts.log, "[diff -%s +%s]\n%s\n", name1, name2, diff(text1, text2))
|
||||
}
|
||||
ts.fatalf("%s and %s differ", name1, name2)
|
||||
switch want {
|
||||
case failure:
|
||||
if eq {
|
||||
ts.fatalf("%s and %s do not differ", name1, name2)
|
||||
}
|
||||
case success:
|
||||
if !eq {
|
||||
ts.fatalf("%s and %s differ", name1, name2)
|
||||
}
|
||||
case successOrFailure:
|
||||
if eq {
|
||||
fmt.Fprintf(&ts.log, "%s and %s do not differ", name1, name2)
|
||||
} else {
|
||||
fmt.Fprintf(&ts.log, "%s and %s differ", name1, name2)
|
||||
}
|
||||
default:
|
||||
ts.fatalf("unsupported: %v cmp", want)
|
||||
}
|
||||
}
|
||||
|
||||
// cp copies files, maybe eventually directories.
|
||||
@ -840,6 +849,16 @@ func (ts *testScript) cmdMkdir(want simpleStatus, args []string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (ts *testScript) cmdMv(want simpleStatus, args []string) {
|
||||
if want != success {
|
||||
ts.fatalf("unsupported: %v mv", want)
|
||||
}
|
||||
if len(args) != 2 {
|
||||
ts.fatalf("usage: mv old new")
|
||||
}
|
||||
ts.check(os.Rename(ts.mkabs(args[0]), ts.mkabs(args[1])))
|
||||
}
|
||||
|
||||
// rm removes files or directories.
|
||||
func (ts *testScript) cmdRm(want simpleStatus, args []string) {
|
||||
if want != success {
|
||||
|
13
src/cmd/go/testdata/script/README
vendored
13
src/cmd/go/testdata/script/README
vendored
@ -110,14 +110,15 @@ The commands are:
|
||||
Change the permissions of the files or directories named by the path arguments
|
||||
to be equal to perm. Only numerical permissions are supported.
|
||||
|
||||
- cmp file1 file2
|
||||
Check that the named files have the same content.
|
||||
- [! | ?] cmp file1 file2
|
||||
Check that the named files have (or do not have) the same content.
|
||||
By convention, file1 is the actual data and file2 the expected data.
|
||||
File1 can be "stdout" or "stderr" to use the standard output or standard error
|
||||
from the most recent exec or go command.
|
||||
(If the files have differing content, the failure prints a diff.)
|
||||
(If the file contents differ and the command is not negated,
|
||||
the failure prints a diff.)
|
||||
|
||||
- cmpenv file1 file2
|
||||
- [! | ?] cmpenv file1 file2
|
||||
Like cmp, but environment variables are substituted in the file contents
|
||||
before the comparison. For example, $GOOS is replaced by the target GOOS.
|
||||
|
||||
@ -163,6 +164,10 @@ The commands are:
|
||||
- mkdir path...
|
||||
Create the listed directories, if they do not already exists.
|
||||
|
||||
- mv path1 path2
|
||||
Rename path1 to path2. OS-specific restrictions may apply when path1 and path2
|
||||
are in different directories.
|
||||
|
||||
- rm file...
|
||||
Remove the listed files or directories.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user