some fixes
This commit is contained in:
@@ -211,6 +211,100 @@ func TestExpandDirModeWithArgs(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpandDirModeStageAll(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
// Two test directories, each with several input files the program discovers
|
||||
// itself, plus an args file and an expected-stdout file.
|
||||
writeFile(t, dir, "cases/test_1/1.txt", "10\n")
|
||||
writeFile(t, dir, "cases/test_1/2.txt", "20\n")
|
||||
writeFile(t, dir, "cases/test_1/decoy.log", "ignore me\n")
|
||||
writeFile(t, dir, "cases/test_1/args.txt", "$.txt 1 1 2\n")
|
||||
writeFile(t, dir, "cases/test_1/answer.txt", "10\n20\n")
|
||||
writeFile(t, dir, "cases/test_2/a.txt", "x\n")
|
||||
writeFile(t, dir, "cases/test_2/args.txt", "a.txt\n")
|
||||
writeFile(t, dir, "cases/test_2/answer.txt", "x\n")
|
||||
|
||||
cwd, _ := os.Getwd()
|
||||
defer os.Chdir(cwd)
|
||||
os.Chdir(dir)
|
||||
|
||||
tests, err := expandPattern(&dsl.Pattern{
|
||||
DirsGlob: "cases/*",
|
||||
StageAll: true,
|
||||
ArgsFile: "args.txt",
|
||||
OutputFile: "answer.txt",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(tests) != 2 {
|
||||
t.Fatalf("expected 2 tests, got %d", len(tests))
|
||||
}
|
||||
|
||||
var tc1 *dsl.Test
|
||||
for _, tc := range tests {
|
||||
if tc.Name == "pattern:test_1" {
|
||||
tc1 = tc
|
||||
}
|
||||
}
|
||||
if tc1 == nil {
|
||||
t.Fatalf("test_1 not found among %v", tests)
|
||||
}
|
||||
|
||||
// All input files staged, including the decoy; answer/args excluded.
|
||||
for _, name := range []string{"1.txt", "2.txt", "decoy.log"} {
|
||||
if _, ok := tc1.InFiles[name]; !ok {
|
||||
t.Errorf("staged InFiles missing %q (have %v)", name, tc1.InFiles)
|
||||
}
|
||||
}
|
||||
if _, ok := tc1.InFiles["answer.txt"]; ok {
|
||||
t.Error("answer.txt must not be staged")
|
||||
}
|
||||
if _, ok := tc1.InFiles["args.txt"]; ok {
|
||||
t.Error("args.txt must not be staged")
|
||||
}
|
||||
|
||||
// Args read from args.txt, whitespace-split.
|
||||
want := []string{"$.txt", "1", "1", "2"}
|
||||
if strings.Join(tc1.Args, " ") != strings.Join(want, " ") {
|
||||
t.Errorf("args = %v, want %v", tc1.Args, want)
|
||||
}
|
||||
|
||||
// Expected stdout is the answer file content.
|
||||
m, ok := tc1.Stdout.(dsl.ExactMatcher)
|
||||
if !ok {
|
||||
t.Fatalf("stdout should be ExactMatcher, got %T", tc1.Stdout)
|
||||
}
|
||||
if m.Value != "10\n20\n" {
|
||||
t.Errorf("stdout = %q, want %q", m.Value, "10\n20\n")
|
||||
}
|
||||
|
||||
// A successful functional test must exit zero.
|
||||
if tc1.ExitCode == nil || *tc1.ExitCode != 0 {
|
||||
t.Errorf("ExitCode = %v, want 0", tc1.ExitCode)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpandStageAllRejectedInGlobMode(t *testing.T) {
|
||||
_, err := expandPattern(&dsl.Pattern{
|
||||
InputGlob: "tests/*.in",
|
||||
StageAll: true,
|
||||
})
|
||||
if err == nil || !strings.Contains(err.Error(), "stage") {
|
||||
t.Fatalf("expected stage-only-with-dirs error, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpandArgsFileRejectedInGlobMode(t *testing.T) {
|
||||
_, err := expandPattern(&dsl.Pattern{
|
||||
InputGlob: "tests/*.in",
|
||||
ArgsFile: "args.txt",
|
||||
})
|
||||
if err == nil || !strings.Contains(err.Error(), "args_file") {
|
||||
t.Fatalf("expected args_file-only-with-dirs error, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExpandPatternRejectsAllLiterals(t *testing.T) {
|
||||
_, err := expandPattern(&dsl.Pattern{
|
||||
InputGlob: "tests/a.in",
|
||||
|
||||
Reference in New Issue
Block a user