github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/pkg/cataloger/erlang/erlang_parser_test.go (about) 1 package erlang 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func Test_parseErlang(t *testing.T) { 12 tests := []struct { 13 name string 14 content string 15 wantErr require.ErrorAssertionFunc 16 }{ 17 { 18 name: "basic valid content", 19 content: ` 20 {"1.2.0", 21 [{<<"bcrypt">>,{pkg,<<"bcrypt">>,<<"1.1.5">>},0}, 22 {<<"bson">>, 23 {git,"https://github.com/comtihon/bson-erlang", 24 {ref,"14308ab927cfa69324742c3de720578094e0bb19"}}, 25 1}, 26 {<<"syslog">>,{pkg,<<"syslog">>,<<"1.1.0">>},0}, 27 {<<"unicode_util_compat">>,{pkg,<<"unicode_util_compat">>,<<"0.7.0">>},1}, 28 {<<"vernemq_dev">>, 29 {git,"https://github.com/vernemq/vernemq_dev.git", 30 {ref,"6d622aa8c901ae7777433aef2bd049e380c474a6"}}, 31 0}] 32 }. 33 [ 34 {pkg_hash,[ 35 {<<"bcrypt">>, <<"A6763BD4E1AF46D34776F85B7995E63A02978DE110C077E9570ED17006E03386">>}, 36 {<<"unicode_util_compat">>, <<"BC84380C9AB48177092F43AC89E4DFA2C6D62B40B8BD132B1059ECC7232F9A78">>}]}, 37 {pkg_hash_ext,[ 38 {<<"bcrypt">>, <<"3418821BC17CE6E96A4A77D1A88D7485BF783E212069FACFC79510AFBFF95352">>}, 39 {<<"unicode_util_compat">>, <<"25EEE6D67DF61960CF6A794239566599B09E17E668D3700247BC498638152521">>}]} 40 ].`, 41 }, 42 { 43 name: "empty list", 44 content: ` 45 {test, [ 46 {with_space, [ ]}, 47 {without_space, []} 48 ]}`, 49 }, 50 { 51 name: "valid strings", 52 content: ` 53 {strings, [ 54 "foo", 'bar' 55 ]}`, 56 }, 57 { 58 name: "invalid string content", 59 wantErr: require.Error, 60 content: ` 61 {"1.2.0 62 ">>}, 63 ].`, 64 }, 65 { 66 name: "string mismach", 67 wantErr: require.Error, 68 content: ` 69 {bad_string, [ 70 'foo" 71 ]}`, 72 }, 73 { 74 name: "invalid content", 75 wantErr: require.Error, 76 content: ` 77 {"1.2.0"}. 78 ].`, 79 }, 80 { 81 name: "valid comments", 82 content: ` 83 { comments, [ 84 { foo, bar }, 85 %% this is a comment 86 % this is also a comment 87 { hello, 'bar' }, %%inline comment 88 { baz } 89 ]}`, 90 }, 91 { 92 name: "starts with a comments", 93 content: ` 94 %% starts with comment 95 { comments, [ 96 { foo, bar } 97 ]}`, 98 }, 99 } 100 101 for _, test := range tests { 102 t.Run(test.name, func(t *testing.T) { 103 value, err := parseErlang(bytes.NewReader([]byte(test.content))) 104 105 if test.wantErr == nil { 106 require.NoError(t, err) 107 } else { 108 test.wantErr(t, err) 109 } 110 111 assert.IsType(t, erlangNode{}, value) 112 }) 113 } 114 }