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