1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Lipackage parser2v2 3*ba677afaSXin Li 4*ba677afaSXin Liimport ( 5*ba677afaSXin Li "testing" 6*ba677afaSXin Li 7*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 8*ba677afaSXin Li) 9*ba677afaSXin Li 10*ba677afaSXin Li// ===== Helper function tests ===== 11*ba677afaSXin Li 12*ba677afaSXin Lifunc TestCanExtractSubvalues(t *testing.T) { 13*ba677afaSXin Li subkey, subvalue, err := extractSubs("SHA1: abc123") 14*ba677afaSXin Li if err != nil { 15*ba677afaSXin Li t.Errorf("got error when calling extractSubs: %v", err) 16*ba677afaSXin Li } 17*ba677afaSXin Li if subkey != "SHA1" { 18*ba677afaSXin Li t.Errorf("got %v for subkey", subkey) 19*ba677afaSXin Li } 20*ba677afaSXin Li if subvalue != "abc123" { 21*ba677afaSXin Li t.Errorf("got %v for subvalue", subvalue) 22*ba677afaSXin Li } 23*ba677afaSXin Li} 24*ba677afaSXin Li 25*ba677afaSXin Lifunc TestReturnsErrorForInvalidSubvalueFormat(t *testing.T) { 26*ba677afaSXin Li _, _, err := extractSubs("blah") 27*ba677afaSXin Li if err == nil { 28*ba677afaSXin Li t.Errorf("expected error when calling extractSubs for invalid format (0 colons), got nil") 29*ba677afaSXin Li } 30*ba677afaSXin Li} 31*ba677afaSXin Li 32*ba677afaSXin Lifunc TestCanExtractDocumentAndElementRefsFromID(t *testing.T) { 33*ba677afaSXin Li // test with valid ID in this document 34*ba677afaSXin Li helperForExtractDocElementID(t, "SPDXRef-file1", false, "", "file1") 35*ba677afaSXin Li // test with valid ID in another document 36*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-doc2:SPDXRef-file2", false, "doc2", "file2") 37*ba677afaSXin Li // test with invalid ID in this document 38*ba677afaSXin Li helperForExtractDocElementID(t, "a:SPDXRef-file1", true, "", "") 39*ba677afaSXin Li helperForExtractDocElementID(t, "file1", true, "", "") 40*ba677afaSXin Li helperForExtractDocElementID(t, "SPDXRef-", true, "", "") 41*ba677afaSXin Li helperForExtractDocElementID(t, "SPDXRef-file1:", true, "", "") 42*ba677afaSXin Li // test with invalid ID in another document 43*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-doc2", true, "", "") 44*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-doc2:", true, "", "") 45*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-doc2:SPDXRef-", true, "", "") 46*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-doc2:a", true, "", "") 47*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-:", true, "", "") 48*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-:SPDXRef-file1", true, "", "") 49*ba677afaSXin Li // test with invalid formats 50*ba677afaSXin Li helperForExtractDocElementID(t, "DocumentRef-doc2:SPDXRef-file1:file2", true, "", "") 51*ba677afaSXin Li} 52*ba677afaSXin Li 53*ba677afaSXin Lifunc helperForExtractDocElementID(t *testing.T, tst string, wantErr bool, wantDoc string, wantElt string) { 54*ba677afaSXin Li deID, err := extractDocElementID(tst) 55*ba677afaSXin Li if err != nil && wantErr == false { 56*ba677afaSXin Li t.Errorf("testing %v: expected nil error, got %v", tst, err) 57*ba677afaSXin Li } 58*ba677afaSXin Li if err == nil && wantErr == true { 59*ba677afaSXin Li t.Errorf("testing %v: expected non-nil error, got nil", tst) 60*ba677afaSXin Li } 61*ba677afaSXin Li if deID.DocumentRefID != wantDoc { 62*ba677afaSXin Li if wantDoc == "" { 63*ba677afaSXin Li t.Errorf("testing %v: want empty string for DocumentRefID, got %v", tst, deID.DocumentRefID) 64*ba677afaSXin Li } else { 65*ba677afaSXin Li t.Errorf("testing %v: want %v for DocumentRefID, got %v", tst, wantDoc, deID.DocumentRefID) 66*ba677afaSXin Li } 67*ba677afaSXin Li } 68*ba677afaSXin Li if deID.ElementRefID != common.ElementID(wantElt) { 69*ba677afaSXin Li if wantElt == "" { 70*ba677afaSXin Li t.Errorf("testing %v: want empty string for ElementRefID, got %v", tst, deID.ElementRefID) 71*ba677afaSXin Li } else { 72*ba677afaSXin Li t.Errorf("testing %v: want %v for ElementRefID, got %v", tst, wantElt, deID.ElementRefID) 73*ba677afaSXin Li } 74*ba677afaSXin Li } 75*ba677afaSXin Li} 76*ba677afaSXin Li 77*ba677afaSXin Lifunc TestCanExtractSpecialDocumentIDs(t *testing.T) { 78*ba677afaSXin Li permittedSpecial := []string{"NONE", "NOASSERTION"} 79*ba677afaSXin Li // test with valid special values 80*ba677afaSXin Li helperForExtractDocElementSpecial(t, permittedSpecial, "NONE", false, "", "", "NONE") 81*ba677afaSXin Li helperForExtractDocElementSpecial(t, permittedSpecial, "NOASSERTION", false, "", "", "NOASSERTION") 82*ba677afaSXin Li // test with valid regular IDs 83*ba677afaSXin Li helperForExtractDocElementSpecial(t, permittedSpecial, "SPDXRef-file1", false, "", "file1", "") 84*ba677afaSXin Li helperForExtractDocElementSpecial(t, permittedSpecial, "DocumentRef-doc2:SPDXRef-file2", false, "doc2", "file2", "") 85*ba677afaSXin Li helperForExtractDocElementSpecial(t, permittedSpecial, "a:SPDXRef-file1", true, "", "", "") 86*ba677afaSXin Li helperForExtractDocElementSpecial(t, permittedSpecial, "DocumentRef-doc2", true, "", "", "") 87*ba677afaSXin Li // test with invalid other words not on permitted list 88*ba677afaSXin Li helperForExtractDocElementSpecial(t, permittedSpecial, "FOO", true, "", "", "") 89*ba677afaSXin Li} 90*ba677afaSXin Li 91*ba677afaSXin Lifunc helperForExtractDocElementSpecial(t *testing.T, permittedSpecial []string, tst string, wantErr bool, wantDoc string, wantElt string, wantSpecial string) { 92*ba677afaSXin Li deID, err := extractDocElementSpecial(tst, permittedSpecial) 93*ba677afaSXin Li if err != nil && wantErr == false { 94*ba677afaSXin Li t.Errorf("testing %v: expected nil error, got %v", tst, err) 95*ba677afaSXin Li } 96*ba677afaSXin Li if err == nil && wantErr == true { 97*ba677afaSXin Li t.Errorf("testing %v: expected non-nil error, got nil", tst) 98*ba677afaSXin Li } 99*ba677afaSXin Li if deID.DocumentRefID != wantDoc { 100*ba677afaSXin Li if wantDoc == "" { 101*ba677afaSXin Li t.Errorf("testing %v: want empty string for DocumentRefID, got %v", tst, deID.DocumentRefID) 102*ba677afaSXin Li } else { 103*ba677afaSXin Li t.Errorf("testing %v: want %v for DocumentRefID, got %v", tst, wantDoc, deID.DocumentRefID) 104*ba677afaSXin Li } 105*ba677afaSXin Li } 106*ba677afaSXin Li if deID.ElementRefID != common.ElementID(wantElt) { 107*ba677afaSXin Li if wantElt == "" { 108*ba677afaSXin Li t.Errorf("testing %v: want empty string for ElementRefID, got %v", tst, deID.ElementRefID) 109*ba677afaSXin Li } else { 110*ba677afaSXin Li t.Errorf("testing %v: want %v for ElementRefID, got %v", tst, wantElt, deID.ElementRefID) 111*ba677afaSXin Li } 112*ba677afaSXin Li } 113*ba677afaSXin Li if deID.SpecialID != wantSpecial { 114*ba677afaSXin Li if wantSpecial == "" { 115*ba677afaSXin Li t.Errorf("testing %v: want empty string for SpecialID, got %v", tst, deID.SpecialID) 116*ba677afaSXin Li } else { 117*ba677afaSXin Li t.Errorf("testing %v: want %v for SpecialID, got %v", tst, wantSpecial, deID.SpecialID) 118*ba677afaSXin Li } 119*ba677afaSXin Li } 120*ba677afaSXin Li} 121*ba677afaSXin Li 122*ba677afaSXin Lifunc TestCanExtractElementRefsOnlyFromID(t *testing.T) { 123*ba677afaSXin Li // test with valid ID in this document 124*ba677afaSXin Li helperForExtractElementID(t, "SPDXRef-file1", false, "file1") 125*ba677afaSXin Li // test with valid ID in another document 126*ba677afaSXin Li helperForExtractElementID(t, "DocumentRef-doc2:SPDXRef-file2", true, "") 127*ba677afaSXin Li // test with invalid ID in this document 128*ba677afaSXin Li helperForExtractElementID(t, "a:SPDXRef-file1", true, "") 129*ba677afaSXin Li helperForExtractElementID(t, "file1", true, "") 130*ba677afaSXin Li helperForExtractElementID(t, "SPDXRef-", true, "") 131*ba677afaSXin Li helperForExtractElementID(t, "SPDXRef-file1:", true, "") 132*ba677afaSXin Li // test with invalid ID in another document 133*ba677afaSXin Li helperForExtractElementID(t, "DocumentRef-doc2", true, "") 134*ba677afaSXin Li helperForExtractElementID(t, "DocumentRef-doc2:", true, "") 135*ba677afaSXin Li helperForExtractElementID(t, "DocumentRef-doc2:SPDXRef-", true, "") 136*ba677afaSXin Li helperForExtractElementID(t, "DocumentRef-doc2:a", true, "") 137*ba677afaSXin Li helperForExtractElementID(t, "DocumentRef-:", true, "") 138*ba677afaSXin Li helperForExtractElementID(t, "DocumentRef-:SPDXRef-file1", true, "") 139*ba677afaSXin Li} 140*ba677afaSXin Li 141*ba677afaSXin Lifunc helperForExtractElementID(t *testing.T, tst string, wantErr bool, wantElt string) { 142*ba677afaSXin Li eID, err := extractElementID(tst) 143*ba677afaSXin Li if err != nil && wantErr == false { 144*ba677afaSXin Li t.Errorf("testing %v: expected nil error, got %v", tst, err) 145*ba677afaSXin Li } 146*ba677afaSXin Li if err == nil && wantErr == true { 147*ba677afaSXin Li t.Errorf("testing %v: expected non-nil error, got nil", tst) 148*ba677afaSXin Li } 149*ba677afaSXin Li if eID != common.ElementID(wantElt) { 150*ba677afaSXin Li if wantElt == "" { 151*ba677afaSXin Li t.Errorf("testing %v: want emptyString for ElementRefID, got %v", tst, eID) 152*ba677afaSXin Li } else { 153*ba677afaSXin Li t.Errorf("testing %v: want %v for ElementRefID, got %v", tst, wantElt, eID) 154*ba677afaSXin Li } 155*ba677afaSXin Li } 156*ba677afaSXin Li} 157