github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/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:    "invalid string content",
    44  			wantErr: require.Error,
    45  			content: `
    46  {"1.2.0
    47  ">>},
    48  ].`,
    49  		},
    50  		{
    51  			name:    "invalid content",
    52  			wantErr: require.Error,
    53  			content: `
    54  {"1.2.0"}.
    55  ].`,
    56  		},
    57  	}
    58  
    59  	for _, test := range tests {
    60  		t.Run(test.name, func(t *testing.T) {
    61  			value, err := parseErlang(bytes.NewReader([]byte(test.content)))
    62  
    63  			if test.wantErr == nil {
    64  				require.NoError(t, err)
    65  			} else {
    66  				test.wantErr(t, err)
    67  			}
    68  
    69  			assert.IsType(t, erlangNode{}, value)
    70  		})
    71  	}
    72  }