xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v2/util_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
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