xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v1/util_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2package parser2v1
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 emptyString 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 TestCanExtractElementRefsOnlyFromID(t *testing.T) {
78	// test with valid ID in this document
79	helperForExtractElementID(t, "SPDXRef-file1", false, "file1")
80	// test with valid ID in another document
81	helperForExtractElementID(t, "DocumentRef-doc2:SPDXRef-file2", true, "")
82	// test with invalid ID in this document
83	helperForExtractElementID(t, "a:SPDXRef-file1", true, "")
84	helperForExtractElementID(t, "file1", true, "")
85	helperForExtractElementID(t, "SPDXRef-", true, "")
86	helperForExtractElementID(t, "SPDXRef-file1:", true, "")
87	// test with invalid ID in another document
88	helperForExtractElementID(t, "DocumentRef-doc2", true, "")
89	helperForExtractElementID(t, "DocumentRef-doc2:", true, "")
90	helperForExtractElementID(t, "DocumentRef-doc2:SPDXRef-", true, "")
91	helperForExtractElementID(t, "DocumentRef-doc2:a", true, "")
92	helperForExtractElementID(t, "DocumentRef-:", true, "")
93	helperForExtractElementID(t, "DocumentRef-:SPDXRef-file1", true, "")
94}
95
96func helperForExtractElementID(t *testing.T, tst string, wantErr bool, wantElt string) {
97	eID, err := extractElementID(tst)
98	if err != nil && wantErr == false {
99		t.Errorf("testing %v: expected nil error, got %v", tst, err)
100	}
101	if err == nil && wantErr == true {
102		t.Errorf("testing %v: expected non-nil error, got nil", tst)
103	}
104	if eID != common.ElementID(wantElt) {
105		if wantElt == "" {
106			t.Errorf("testing %v: want emptyString for ElementRefID, got %v", tst, eID)
107		} else {
108			t.Errorf("testing %v: want %v for ElementRefID, got %v", tst, wantElt, eID)
109		}
110	}
111}
112