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  }