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  }