code.cestus.io/tools/fabricator@v0.4.3/pkg/ff/ffyaml/ffyaml_test.go (about)

     1  package ffyaml_test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"code.cestus.io/tools/fabricator/pkg/ff"
     8  	"code.cestus.io/tools/fabricator/pkg/ff/fftest"
     9  	"code.cestus.io/tools/fabricator/pkg/ff/ffyaml"
    10  )
    11  
    12  func TestParser(t *testing.T) {
    13  	t.Parallel()
    14  
    15  	for _, testcase := range []struct {
    16  		name string
    17  		file string
    18  		want fftest.Vars
    19  	}{
    20  		{
    21  			name: "empty input",
    22  			file: "testdata/empty_input.yaml",
    23  			want: fftest.Vars{},
    24  		},
    25  		{
    26  			name: "basic KV pairs",
    27  			file: "testdata/basic.yaml",
    28  			want: fftest.Vars{S: "hello", I: 10, B: true, D: 5 * time.Second, F: 3.14},
    29  		},
    30  		{
    31  			name: "invalid prefix",
    32  			file: "testdata/invalid_prefix.yaml",
    33  			want: fftest.Vars{WantParseErrorString: "found character that cannot start any token"},
    34  		},
    35  		{
    36  			name: "no value",
    37  			file: "testdata/no_value.yaml",
    38  			want: fftest.Vars{WantParseErrorIs: ff.StringConversionError{}},
    39  		},
    40  		{
    41  			name: "basic arrays",
    42  			file: "testdata/basic_array.yaml",
    43  			want: fftest.Vars{S: "c", X: []string{"a", "b", "c"}},
    44  		},
    45  		{
    46  			name: "multiline arrays",
    47  			file: "testdata/multi_line_array.yaml",
    48  			want: fftest.Vars{S: "c", X: []string{"d", "e", "f"}},
    49  		},
    50  		{
    51  			name: "line break arrays",
    52  			file: "testdata/line_break_array.yaml",
    53  			want: fftest.Vars{X: []string{"first string", "second string", "third"}},
    54  		},
    55  		{
    56  			name: "unquoted strings in arrays",
    57  			file: "testdata/unquoted_string_array.yaml",
    58  			want: fftest.Vars{X: []string{"one", "two", "three"}},
    59  		},
    60  	} {
    61  		t.Run(testcase.name, func(t *testing.T) {
    62  			fs, vars := fftest.Pair()
    63  			vars.ParseError = ff.Parse(fs, []string{},
    64  				ff.WithConfigFile(testcase.file),
    65  				ff.WithConfigFileParser(ffyaml.Parser),
    66  				ff.WithAllowMissingConfigFile(true),
    67  			)
    68  			if err := fftest.Compare(&testcase.want, vars); err != nil {
    69  				t.Fatal(err)
    70  			}
    71  		})
    72  	}
    73  }