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 }