github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/txtar/archive_test.go (about) 1 // Copyright 2018 The Go 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 txtar 6 7 import ( 8 "bytes" 9 "fmt" 10 "reflect" 11 "testing" 12 ) 13 14 func TestParse(t *testing.T) { 15 var tests = []struct { 16 name string 17 text string 18 parsed *Archive 19 }{ 20 { 21 name: "basic", 22 text: `comment1 23 comment2 24 -- file1 -- 25 File 1 text. 26 -- foo --- 27 More file 1 text. 28 -- file 2 -- 29 File 2 text. 30 -- empty -- 31 -- noNL -- 32 hello world 33 -- empty filename line -- 34 some content 35 -- --`, 36 parsed: &Archive{ 37 Comment: []byte("comment1\ncomment2\n"), 38 Files: []File{ 39 {"file1", []byte("File 1 text.\n-- foo ---\nMore file 1 text.\n")}, 40 {"file 2", []byte("File 2 text.\n")}, 41 {"empty", []byte{}}, 42 {"noNL", []byte("hello world\n")}, 43 {"empty filename line", []byte("some content\n-- --\n")}, 44 }, 45 }, 46 }, 47 } 48 for _, tt := range tests { 49 t.Run(tt.name, func(t *testing.T) { 50 a := Parse([]byte(tt.text)) 51 if !reflect.DeepEqual(a, tt.parsed) { 52 t.Fatalf("Parse: wrong output:\nhave:\n%s\nwant:\n%s", shortArchive(a), shortArchive(tt.parsed)) 53 } 54 text := Format(a) 55 a = Parse(text) 56 if !reflect.DeepEqual(a, tt.parsed) { 57 t.Fatalf("Parse after Format: wrong output:\nhave:\n%s\nwant:\n%s", shortArchive(a), shortArchive(tt.parsed)) 58 } 59 }) 60 } 61 } 62 63 func TestFormat(t *testing.T) { 64 var tests = []struct { 65 name string 66 input *Archive 67 wanted string 68 }{ 69 { 70 name: "basic", 71 input: &Archive{ 72 Comment: []byte("comment1\ncomment2\n"), 73 Files: []File{ 74 {"file1", []byte("File 1 text.\n-- foo ---\nMore file 1 text.\n")}, 75 {"file 2", []byte("File 2 text.\n")}, 76 {"empty", []byte{}}, 77 {"noNL", []byte("hello world")}, 78 }, 79 }, 80 wanted: `comment1 81 comment2 82 -- file1 -- 83 File 1 text. 84 -- foo --- 85 More file 1 text. 86 -- file 2 -- 87 File 2 text. 88 -- empty -- 89 -- noNL -- 90 hello world 91 `, 92 }, 93 } 94 for _, tt := range tests { 95 t.Run(tt.name, func(t *testing.T) { 96 result := Format(tt.input) 97 if string(result) != tt.wanted { 98 t.Errorf("Wrong output. \nGot:\n%s\nWant:\n%s\n", string(result), tt.wanted) 99 } 100 }) 101 } 102 } 103 104 func shortArchive(a *Archive) string { 105 var buf bytes.Buffer 106 fmt.Fprintf(&buf, "comment: %q\n", a.Comment) 107 for _, f := range a.Files { 108 fmt.Fprintf(&buf, "file %q: %q\n", f.Name, f.Data) 109 } 110 return buf.String() 111 }