xref: /aosp_15_r20/external/spdx-tools/rdfloader/parser2v3/parse_creation_info_test.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2
3package parser2v3
4
5import (
6	"testing"
7
8	"github.com/spdx/tools-golang/spdx/v2_3"
9)
10
11func Test_setCreator(t *testing.T) {
12	// TestCase 1: invalid creator (empty)
13	input := ""
14	err := setCreator(input, &v2_3.CreationInfo{})
15	if err == nil {
16		t.Errorf("shoud've raised an error due to invalid input")
17	}
18
19	// TestCase 2: invalid entity type
20	input = "Company: some company"
21	err = setCreator(input, &v2_3.CreationInfo{})
22	if err == nil {
23		t.Errorf("shoud've raised an error due to unknown entity type")
24	}
25
26	// TestCase 3: valid input
27	input = "Person: Jane Doe"
28	ci := &v2_3.CreationInfo{}
29	err = setCreator(input, ci)
30	if err != nil {
31		t.Errorf("error parsing a valid input: %v", err)
32	}
33	if len(ci.Creators) != 1 {
34		t.Errorf("creationInfo should've had 1 creatorPersons, found %d", len(ci.Creators))
35	}
36	expectedPerson := "Jane Doe"
37	if ci.Creators[0].Creator != expectedPerson {
38		t.Errorf("expected %s, found %s", expectedPerson, ci.Creators[0])
39	}
40}
41
42func Test_rdfParser2_3_parseCreationInfoFromNode(t *testing.T) {
43	// TestCase 1: invalid creator must raise an error
44	parser, _ := parserFromBodyContent(`
45		<spdx:CreationInfo>
46			<spdx:licenseListVersion>2.6</spdx:licenseListVersion>
47			<spdx:creator>Person Unknown</spdx:creator>
48			<spdx:created>2018-08-24T19:55:34Z</spdx:created>
49		</spdx:CreationInfo>
50	`)
51	ciNode := parser.gordfParserObj.Triples[0].Subject
52	err := parser.parseCreationInfoFromNode(&v2_3.CreationInfo{}, ciNode)
53	if err == nil {
54		t.Errorf("invalid creator must raise an error")
55	}
56
57	// TestCase 2: unknown predicate must also raise an error
58	parser, _ = parserFromBodyContent(`
59		<spdx:CreationInfo>
60			<spdx:licenseListVersion>2.6</spdx:licenseListVersion>
61			<spdx:creator>Person: fossy (y)</spdx:creator>
62			<spdx:creator>Organization: </spdx:creator>
63			<spdx:creator>Tool: spdx2</spdx:creator>
64			<spdx:created>2018-08-24T19:55:34Z</spdx:created>
65			<spdx:unknownPredicate />
66		</spdx:CreationInfo>
67	`)
68	ciNode = parser.gordfParserObj.Triples[0].Subject
69	err = parser.parseCreationInfoFromNode(&v2_3.CreationInfo{}, ciNode)
70	if err == nil {
71		t.Errorf("unknown predicate must raise an error")
72	}
73
74	// TestCase 2: unknown predicate must also raise an error
75	parser, _ = parserFromBodyContent(`
76		<spdx:CreationInfo>
77			<spdx:licenseListVersion>2.6</spdx:licenseListVersion>
78			<spdx:creator>Person: fossy</spdx:creator>
79			<spdx:created>2018-08-24T19:55:34Z</spdx:created>
80			<rdfs:comment>comment</rdfs:comment>
81		</spdx:CreationInfo>
82	`)
83	ciNode = parser.gordfParserObj.Triples[0].Subject
84	ci := &v2_3.CreationInfo{}
85	err = parser.parseCreationInfoFromNode(ci, ciNode)
86	if err != nil {
87		t.Errorf("unexpected error: %v", err)
88	}
89	if ci.LicenseListVersion != "2.6" {
90		t.Errorf(`expected %s, found %s`, "2.6", ci.LicenseListVersion)
91	}
92	n := len(ci.Creators)
93	if n != 1 {
94		t.Errorf("expected 1 creatorPersons, found %d", n)
95	}
96	if ci.Creators[0].Creator != "fossy" {
97		t.Errorf("expected %s, found %s", "fossy", ci.Creators[0].Creator)
98	}
99	expectedCreated := "2018-08-24T19:55:34Z"
100	if ci.Created != expectedCreated {
101		t.Errorf("expected %s, found %s", expectedCreated, ci.Created)
102	}
103	expectedComment := "comment"
104	if ci.CreatorComment != expectedComment {
105		t.Errorf("expected %s, found %s", expectedComment, ci.CreatorComment)
106	}
107}
108