github.com/mithrandie/csvq@v1.18.1/lib/file/reader_test.go (about) 1 package file 2 3 import ( 4 "bytes" 5 "io" 6 "strings" 7 "testing" 8 ) 9 10 type readerReadResult struct { 11 Result string 12 EOF bool 13 } 14 15 var readerReadTests = []struct { 16 Source string 17 HeaderLen int 18 ReadByteLen int 19 Results []readerReadResult 20 }{ 21 { 22 Source: "abcdefg", 23 HeaderLen: 3, 24 ReadByteLen: 2, 25 Results: []readerReadResult{ 26 { 27 Result: "ab", 28 EOF: false, 29 }, 30 { 31 Result: "cd", 32 EOF: false, 33 }, 34 { 35 Result: "ef", 36 EOF: false, 37 }, 38 { 39 Result: "g", 40 EOF: false, 41 }, 42 { 43 Result: "", 44 EOF: true, 45 }, 46 }, 47 }, 48 { 49 Source: "abcdef", 50 HeaderLen: 3, 51 ReadByteLen: 2, 52 Results: []readerReadResult{ 53 { 54 Result: "ab", 55 EOF: false, 56 }, 57 { 58 Result: "cd", 59 EOF: false, 60 }, 61 { 62 Result: "ef", 63 EOF: false, 64 }, 65 { 66 Result: "", 67 EOF: true, 68 }, 69 }, 70 }, 71 { 72 Source: "abcd", 73 HeaderLen: 2, 74 ReadByteLen: 2, 75 Results: []readerReadResult{ 76 { 77 Result: "ab", 78 EOF: false, 79 }, 80 { 81 Result: "cd", 82 EOF: false, 83 }, 84 { 85 Result: "", 86 EOF: true, 87 }, 88 }, 89 }, 90 { 91 Source: "ab", 92 HeaderLen: 10, 93 ReadByteLen: 2, 94 Results: []readerReadResult{ 95 { 96 Result: "ab", 97 EOF: false, 98 }, 99 { 100 Result: "", 101 EOF: true, 102 }, 103 }, 104 }, 105 { 106 Source: "", 107 HeaderLen: 2, 108 ReadByteLen: 2, 109 Results: []readerReadResult{ 110 { 111 Result: "", 112 EOF: true, 113 }, 114 }, 115 }, 116 } 117 118 func TestReader_Read(t *testing.T) { 119 for _, v := range readerReadTests { 120 p := make([]byte, v.ReadByteLen) 121 reader, _ := NewReader(strings.NewReader(v.Source), v.HeaderLen) 122 123 for i, expect := range v.Results { 124 n, err := reader.Read(p) 125 126 if err != nil && err != io.EOF { 127 t.Errorf("%s - %d: unexpected error %q", v.Source, i, err) 128 continue 129 } 130 131 if err == io.EOF && !expect.EOF { 132 t.Errorf("%s - %d: error is nil, want io.EOF", v.Source, i) 133 } 134 135 result := string(p[:n]) 136 if result != expect.Result { 137 t.Errorf("%s - %d: result = %q, want %q", v.Source, i, result, expect.Result) 138 } 139 } 140 } 141 } 142 143 func TestReader_HeadBytes(t *testing.T) { 144 source := strings.NewReader("abcdefg") 145 reader, _ := NewReader(source, 2) 146 headBytes, _ := reader.HeadBytes() 147 148 expect := "ab" 149 result, _ := io.ReadAll(headBytes) 150 if string(result) != expect { 151 t.Errorf("result = %s, want %s", result, expect) 152 } 153 } 154 155 var readerSizeTests = []struct { 156 Name string 157 Reader io.Reader 158 Result int64 159 }{ 160 { 161 Name: "*strings.Reader", 162 Reader: strings.NewReader("abcdefg"), 163 Result: 7, 164 }, 165 { 166 Name: "*bytes.Reader", 167 Reader: bytes.NewReader([]byte("abcdefg")), 168 Result: 7, 169 }, 170 } 171 172 func TestReader_Size(t *testing.T) { 173 for _, v := range readerSizeTests { 174 reader, _ := NewReader(v.Reader, 2) 175 result := reader.Size() 176 if result != v.Result { 177 t.Errorf("%s: result = %d, want %d", v.Name, result, v.Result) 178 } 179 } 180 }