github.com/rck/u-root@v0.0.0-20180106144920-7eb602e381bb/cmds/uniq/uniq_test.go (about) 1 // Copyright 2016 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "bytes" 9 "io/ioutil" 10 "os" 11 "os/exec" 12 "path/filepath" 13 "syscall" 14 "testing" 15 ) 16 17 func TestUniq(t *testing.T) { 18 var ( 19 input1 string = "test\ntest\ngo\ngo\ngo\ncoool\ncoool\ncool\nlegaal\ntest\n" 20 input2 string = "u-root\nuniq\nron\nron\nteam\nbinaries\ntest\n\n\n\n\n\n" 21 tab = []struct { 22 i string 23 o string 24 s int 25 a []string 26 }{ 27 {input1, "test\ngo\ncoool\ncool\nlegaal\ntest\n", 0, nil}, 28 {input1, "2\ttest\n3\tgo\n2\tcoool\n1\tcool\n1\tlegaal\n1\ttest\n", 0, []string{"-c"}}, 29 {input1, "cool\nlegaal\ntest\n", 0, []string{"-u"}}, 30 {input1, "test\ngo\ncoool\n", 0, []string{"-d"}}, 31 {input2, "u-root\nuniq\nron\nteam\nbinaries\ntest\n\n", 0, nil}, 32 {input2, "1\tu-root\n1\tuniq\n2\tron\n1\tteam\n1\tbinaries\n1\ttest\n5\t\n", 0, []string{"-c"}}, 33 {input2, "u-root\nuniq\nteam\nbinaries\ntest\n", 0, []string{"-u"}}, 34 {input2, "ron\n\n", 0, []string{"-d"}}, 35 } 36 ) 37 38 tmpDir, err := ioutil.TempDir("", "UniqTest") 39 if err != nil { 40 t.Fatal("TempDir failed: ", err) 41 } 42 defer os.RemoveAll(tmpDir) 43 44 uniqtestpath := filepath.Join(tmpDir, "uniqtest.exe") 45 out, err := exec.Command("go", "build", "-o", uniqtestpath, ".").CombinedOutput() 46 if err != nil { 47 t.Fatalf("go build -o %v cmds/uniq: %v\n%s", uniqtestpath, err, string(out)) 48 } 49 50 t.Logf("Built %v for test", uniqtestpath) 51 for _, v := range tab { 52 c := exec.Command(uniqtestpath, v.a...) 53 c.Stdin = bytes.NewReader([]byte(v.i)) 54 o, err := c.CombinedOutput() 55 s := c.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() 56 57 if s != v.s { 58 t.Errorf("Uniq %v < %v > %v: want (exit: %v), got (exit %v)", v.a, v.i, v.o, v.s, s) 59 continue 60 } 61 62 if err != nil && s != v.s { 63 t.Errorf("Uniq %v < %v > %v: want nil, got %v", v.a, v.i, v.o, err) 64 continue 65 } 66 if string(o) != v.o { 67 t.Errorf("Uniq %v < %v: want '%v', got '%v'", v.a, v.i, v.o, string(o)) 68 continue 69 } 70 t.Logf("Uniq %v < %v: %v", v.a, v.i, v.o) 71 } 72 }