github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/cmds/core/cat/cat_test.go (about)

     1  // Copyright 2012 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  // by Rafael Campos Nunes <rafaelnunes@engineer.com>
     6  
     7  package main
     8  
     9  import (
    10  	"bytes"
    11  	"fmt"
    12  	"os"
    13  	"path"
    14  	"path/filepath"
    15  	"testing"
    16  )
    17  
    18  // setup writes a set of files, putting 1 byte in each file.
    19  func setup(t *testing.T, data []byte) (string, error) {
    20  	t.Logf(":: Creating simulation data. ")
    21  	dir := t.TempDir()
    22  
    23  	for i, d := range data {
    24  		n := fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i)
    25  		if err := os.WriteFile(n, []byte{d}, 0o666); err != nil {
    26  			return "", err
    27  		}
    28  	}
    29  
    30  	return dir, nil
    31  }
    32  
    33  // TestCat test cat function against 4 files, in each file it is written a bit of someData
    34  // array and the test expect the cat to return the exact same bit from someData array with
    35  // the corresponding file.
    36  func TestCat(t *testing.T) {
    37  	var files []string
    38  	someData := []byte{'l', 2, 3, 4, 'd'}
    39  
    40  	dir, err := setup(t, someData)
    41  	if err != nil {
    42  		t.Fatalf("setup has failed, %v", err)
    43  	}
    44  
    45  	for i := range someData {
    46  		files = append(files, fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i))
    47  	}
    48  	var out bytes.Buffer
    49  	if err := run(files, nil, &out); err != nil {
    50  		t.Fatal(err)
    51  	}
    52  
    53  	if !bytes.Equal(out.Bytes(), someData) {
    54  		t.Fatalf("Reading files failed: got %v, want %v", out.Bytes(), someData)
    55  	}
    56  }
    57  
    58  func TestCatPipe(t *testing.T) {
    59  	var inputbuf bytes.Buffer
    60  	teststring := "testdata"
    61  	fmt.Fprintf(&inputbuf, "%s", teststring)
    62  
    63  	var out bytes.Buffer
    64  
    65  	if err := cat(&inputbuf, &out); err != nil {
    66  		t.Error(err)
    67  	}
    68  	if out.String() != teststring {
    69  		t.Errorf("CatPipe: Want %q Got: %q", teststring, out.String())
    70  	}
    71  }
    72  
    73  func TestRunFiles(t *testing.T) {
    74  	var files []string
    75  	someData := []byte{'l', 2, 3, 4, 'd'}
    76  
    77  	dir, err := setup(t, someData)
    78  	if err != nil {
    79  		t.Fatalf("setup has failed, %v", err)
    80  	}
    81  
    82  	for i := range someData {
    83  		files = append(files, fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i))
    84  	}
    85  
    86  	var out bytes.Buffer
    87  	if err := run(files, nil, &out); err != nil {
    88  		t.Error(err)
    89  	}
    90  	if !bytes.Equal(out.Bytes(), someData) {
    91  		t.Fatalf("Reading files failed: got %v, want %v", out.Bytes(), someData)
    92  	}
    93  }
    94  
    95  func TestRunFilesError(t *testing.T) {
    96  	var files []string
    97  	someData := []byte{'l', 2, 3, 4, 'd'}
    98  
    99  	dir, err := setup(t, someData)
   100  	if err != nil {
   101  		t.Fatalf("setup has failed, %v", err)
   102  	}
   103  
   104  	for i := range someData {
   105  		files = append(files, fmt.Sprintf("%v%d", filepath.Join(dir, "file"), i))
   106  	}
   107  	filenotexist := "testdata/doesnotexist.txt"
   108  	files = append(files, filenotexist)
   109  	var in, out bytes.Buffer
   110  	if err := run(files, &in, &out); err == nil {
   111  		t.Error("function run succeeded but should have failed")
   112  	}
   113  }
   114  
   115  func TestRunNoArgs(t *testing.T) {
   116  	var in, out bytes.Buffer
   117  	inputdata := "teststring"
   118  	fmt.Fprintf(&in, "%s", inputdata)
   119  	args := make([]string, 0)
   120  	if err := run(args, &in, &out); err != nil {
   121  		t.Error(err)
   122  	}
   123  	if out.String() != inputdata {
   124  		t.Errorf("Want: %q Got: %q", inputdata, out.String())
   125  	}
   126  }
   127  
   128  func TestCatDash(t *testing.T) {
   129  	tempDir := t.TempDir()
   130  
   131  	f1 := path.Join(tempDir, "f1")
   132  	err := os.WriteFile(f1, []byte("line1\nline2\n"), 0o666)
   133  	if err != nil {
   134  		t.Fatal(err)
   135  	}
   136  
   137  	f2 := path.Join(tempDir, "f2")
   138  	err = os.WriteFile(f2, []byte("line4\nline5\n"), 0o666)
   139  	if err != nil {
   140  		t.Fatal(err)
   141  	}
   142  
   143  	var stdin, stdout bytes.Buffer
   144  	stdin.WriteString("line3\n")
   145  
   146  	if err = run([]string{f1, "-", f2}, &stdin, &stdout); err != nil {
   147  		t.Fatal(err)
   148  	}
   149  
   150  	want := "line1\nline2\nline3\nline4\nline5\n"
   151  	got := stdout.String()
   152  
   153  	if got != want {
   154  		t.Errorf("want: %s, got: %s", want, got)
   155  	}
   156  }