aboutsummaryrefslogtreecommitdiff
path: root/rdfloader/parser2v3/parse_snippet_info_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'rdfloader/parser2v3/parse_snippet_info_test.go')
-rw-r--r--rdfloader/parser2v3/parse_snippet_info_test.go536
1 files changed, 536 insertions, 0 deletions
diff --git a/rdfloader/parser2v3/parse_snippet_info_test.go b/rdfloader/parser2v3/parse_snippet_info_test.go
new file mode 100644
index 0000000..2147586
--- /dev/null
+++ b/rdfloader/parser2v3/parse_snippet_info_test.go
@@ -0,0 +1,536 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+
+package parser2v3
+
+import (
+ "testing"
+
+ gordfParser "github.com/spdx/gordf/rdfloader/parser"
+ "github.com/spdx/tools-golang/spdx/common"
+ "github.com/spdx/tools-golang/spdx/v2_3"
+)
+
+func Test_rdfParser2_3_getSnippetInformationFromTriple2_3(t *testing.T) {
+ var err error
+ var parser *rdfParser2_3
+ var node *gordfParser.Node
+
+ // TestCase 1: invalid snippet id:
+ parser, _ = parserFromBodyContent(`
+ <spdx:Snippet rdf:about="#Snippet">
+ </spdx:Snippet>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, err = parser.getSnippetInformationFromNode2_3(node)
+ if err == nil {
+ t.Errorf("expected an error due to invalid, got %v", err)
+ }
+
+ // TestCase 2: Invalid LicenseInfoInSnippet
+ parser, _ = parserFromBodyContent(`
+ <spdx:Snippet rdf:about="#SPDXRef-Snippet">
+ <spdx:licenseInfoInSnippet rdf:resource="http://spdx.org/licenses/Unknown"/>
+ </spdx:Snippet>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, err = parser.getSnippetInformationFromNode2_3(node)
+ if err == nil {
+ t.Errorf("expected an error due to invalid licenseInfoInSnippet, got %v", err)
+ }
+
+ // TestCase 3: Invalid range.
+ parser, _ = parserFromBodyContent(`
+ <spdx:Snippet rdf:about="#SPDXRef-Snippet">
+ <spdx:range>
+ <spdx:StartEndPointer>
+ <spdx:unknownTag />
+ </spdx:StartEndPointer>
+ </spdx:range>
+ </spdx:Snippet>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, err = parser.getSnippetInformationFromNode2_3(node)
+ if err == nil {
+ t.Errorf("expected an error due to invalid range, got %v", err)
+ }
+
+ // TestCase 3: invalid file in snippetFromFile
+ parser, _ = parserFromBodyContent(`
+ <spdx:Snippet rdf:about="#SPDXRef-Snippet">
+ <spdx:snippetFromFile>
+ <spdx:File rdf:resource="http://anupam-VirtualBox/spdx.rdf#item8" />
+ </spdx:snippetFromFile>
+ </spdx:Snippet>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, err = parser.getSnippetInformationFromNode2_3(node)
+ if err == nil {
+ t.Errorf("expected an error due to invalid snippetFromFile, got %v", err)
+ }
+
+ // TestCase 4: unknown predicate
+ parser, _ = parserFromBodyContent(`
+ <spdx:Snippet rdf:about="#SPDXRef-Snippet">
+ <spdx:unknownPredicate />
+ </spdx:Snippet>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, err = parser.getSnippetInformationFromNode2_3(node)
+ if err == nil {
+ t.Errorf("expected an error due to invalid predicate, got %v", err)
+ }
+
+ // TestCase 5: invalid license concluded:
+ parser, _ = parserFromBodyContent(`
+ <spdx:Snippet rdf:about="#SPDXRef-Snippet">
+ <spdx:licenseConcluded rdf:resource="http://spdx.org/licenses/Unknown"/>
+ </spdx:Snippet>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, err = parser.getSnippetInformationFromNode2_3(node)
+ if err == nil {
+ t.Errorf("expected an error due to invalid licenseConcluded, got %v", err)
+ }
+
+ // TestCase 6: everything valid:
+ parser, _ = parserFromBodyContent(`
+ <spdx:Snippet rdf:about="#SPDXRef-Snippet">
+ <spdx:snippetFromFile>
+ <spdx:File rdf:about="#SPDXRef-File" />
+ </spdx:snippetFromFile>
+ <spdx:range>
+ <j.0:StartEndPointer>
+ <j.0:startPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:lineNumber>420</j.0:lineNumber>
+ </j.0:LineCharPointer>
+ </j.0:startPointer>
+ <j.0:endPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:lineNumber>310</j.0:lineNumber>
+ </j.0:LineCharPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ </spdx:range>
+ <spdx:licenseInfoInSnippet rdf:resource="http://spdx.org/rdf/terms#noassertion"/>
+ <spdx:name>snippet test</spdx:name>
+ <spdx:copyrightText>test</spdx:copyrightText>
+ <spdx:licenseComments>comments</spdx:licenseComments>
+ <rdfs:comment>comments</rdfs:comment>
+ <spdx:licenseConcluded rdf:resource="http://spdx.org/rdf/terms#noassertion"/>
+ </spdx:Snippet>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, err = parser.getSnippetInformationFromNode2_3(node)
+ if err != nil {
+ t.Fatalf("error parsing a valid example: %v", err)
+ }
+}
+
+func Test_setSnippetID(t *testing.T) {
+ // TestCase 1: invalid input (empty)
+ err := setSnippetID("", &v2_3.Snippet{})
+ if err == nil {
+ t.Errorf("should've raised an error for empty input")
+ }
+
+ // TestCase 2: valid input
+ si := &v2_3.Snippet{}
+ err = setSnippetID("http://spdx.org/spdxdocs/spdx-example#SPDXRef-Snippet", si)
+ if err != nil {
+ t.Errorf("unexpected error: %v", err)
+ }
+ if si.SnippetSPDXIdentifier != "Snippet" {
+ t.Errorf("expected: %s, found: %s", "Snippet", si.SnippetSPDXIdentifier)
+ }
+}
+
+func Test_rdfParser2_3_parseRangeReference(t *testing.T) {
+ var err error
+ var node *gordfParser.Node
+ var parser *rdfParser2_3
+ var si *v2_3.Snippet
+
+ // TestCase 1: ResourceLiteral node without a new file shouldn't raise any error.
+ si = &v2_3.Snippet{}
+ parser, _ = parserFromBodyContent(``)
+ node = &gordfParser.Node{
+ NodeType: gordfParser.RESOURCELITERAL,
+ ID: "http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource",
+ }
+ err = parser.parseRangeReference(node, si)
+ if err != nil {
+ t.Errorf("error parsing a valid node: %v", err)
+ }
+
+ // TestCase 2: invalid file in the reference should raise an error
+ si = &v2_3.Snippet{}
+ parser, _ = parserFromBodyContent(`
+ <spdx:File rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#DoapSource">
+ <spdx:fileName> test file </spdx:fileName>
+ </spdx:File>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.parseRangeReference(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to invalid file in the range reference, got %v", err)
+ }
+
+ // TestCase 3: A valid reference must set the file to the files map of the parser.
+ si = &v2_3.Snippet{}
+ parser, _ = parserFromBodyContent(`
+ <spdx:File rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource">
+ <spdx:fileName> test file </spdx:fileName>
+ </spdx:File>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.parseRangeReference(node, si)
+ if err != nil {
+ t.Errorf("error parsing a valid input: %v", err)
+ }
+ if len(parser.files) != 1 {
+ t.Errorf("expected parser.files to have 1 file, found %d", len(parser.files))
+ }
+}
+
+func Test_rdfParser2_3_getPointerFromNode(t *testing.T) {
+ var parser *rdfParser2_3
+ var node *gordfParser.Node
+ var si *v2_3.Snippet
+ var err error
+ var rt RangeType
+ var number int
+
+ // TestCase 1: invalid number in the offset field must raise an error.
+ parser, _ = parserFromBodyContent(`
+ <j.0:startPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="#SPDXRef-DoapSource"/>
+ <j.0:offset>3-10</j.0:offset>
+ </j.0:LineCharPointer>
+ </j.0:startPointer>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, _, err = parser.getPointerFromNode(node, si)
+ if err == nil {
+ t.Errorf("should've raised an error parsing invalid offset, got %v", err)
+ }
+
+ // TestCase 2: invalid number in the lineNumber field must raise an error.
+ parser, _ = parserFromBodyContent(`
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="#SPDXRef-DoapSource"/>
+ <j.0:offset>3-10</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, _, err = parser.getPointerFromNode(node, si)
+ if err == nil {
+ t.Errorf("should've raised an error parsing invalid offset, got %v", err)
+ }
+
+ // TestCase 3: invalid predicate in the pointer field
+ parser, _ = parserFromBodyContent(`
+ <j.0:ByteOffsetPointer>
+ <spdx:invalidTag />
+ <j.0:reference rdf:resource="#SPDXRef-DoapSource"/>
+ <j.0:lineNumber>3-10</j.0:lineNumber>
+ </j.0:ByteOffsetPointer>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, _, err = parser.getPointerFromNode(node, si)
+ if err == nil {
+ t.Errorf("should've raised an error parsing invalid predicate, got %v", err)
+ }
+
+ // TestCase 4: No range type defined must also raise an error
+ parser, _ = parserFromBodyContent(`
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="#SPDXRef-DoapSource"/>
+ </j.0:ByteOffsetPointer>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ _, _, err = parser.getPointerFromNode(node, si)
+ if err == nil {
+ t.Errorf("should've raised an error parsing invalid rangeType, got %v", err)
+ }
+
+ // TestCase 5: valid example
+ parser, _ = parserFromBodyContent(`
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="#SPDXRef-DoapSource"/>
+ <j.0:offset>310</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ `)
+ node = parser.gordfParserObj.Triples[0].Subject
+ rt, number, err = parser.getPointerFromNode(node, si)
+ if err != nil {
+ t.Fatalf("unexpected error parsing a valid node: %v", err)
+ }
+ if rt != BYTE_RANGE {
+ t.Errorf("expected: %s, got: %s", BYTE_RANGE, rt)
+ }
+ if number != 310 {
+ t.Errorf("expected: %d, got: %d", 310, number)
+ }
+}
+
+func Test_rdfParser2_3_setSnippetRangeFromNode(t *testing.T) {
+ var parser *rdfParser2_3
+ var err error
+ var si *v2_3.Snippet
+ var node *gordfParser.Node
+
+ // TestCase 1: range with less one pointer less must raise an error
+ // (end-pointer missing in the range)
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:startPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>310</j.0:offset>
+ </j.0:LineCharPointer>
+ </j.0:startPointer>
+ </j.0:StartEndPointer>
+
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to missing end pointer, got %v", err)
+ }
+
+ // TestCase 2: triples with 0 or more than one type-triple
+ parser, _ = parserFromBodyContent(`
+
+ <j.0:StartEndPointer>
+ <j.0:endPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>420</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:endPointer>
+ <j.0:startPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>310</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:startPointer>
+ </j.0:StartEndPointer>
+
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ dummyTriple := parser.gordfParserObj.Triples[0]
+ // resetting the node to be associated with 3 triples which will have
+ // rdf:type triple either thrice or 0 times.
+ parser.nodeStringToTriples[node.String()] = []*gordfParser.Triple{
+ dummyTriple, dummyTriple, dummyTriple,
+ }
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to invalid rdf:type triples, got %v", err)
+ }
+
+ // TestCase 3: triples with 0 startPointer
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:endPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>420</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:endPointer>
+ <j.0:endPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>310</j.0:offset>
+ </j.0:LineCharPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to missing start pointer, got %v", err)
+ }
+
+ // TestCase 4: triples with 0 endPointer
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:endPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>420</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:endPointer>
+ <j.0:endPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>310</j.0:offset>
+ </j.0:LineCharPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to missing end pointer, got %v", err)
+ }
+
+ // TestCase 5: error parsing start pointer must be propagated to the range
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:startPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>42.0</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:startPointer>
+ <j.0:endPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>310</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to invalid start pointer, got %v", err)
+ }
+
+ // TestCase 6: error parsing end pointer must be propagated to the range
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:startPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>420</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:startPointer>
+ <j.0:endPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>31+0</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to invalid end pointer, got %v", err)
+ }
+
+ // TestCase 7: mismatching start and end pointer must also raise an error.
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:startPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>420</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:startPointer>
+ <j.0:endPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:lineNumber>310</j.0:lineNumber>
+ </j.0:LineCharPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err == nil {
+ t.Errorf("expected an error due to mismatching start and end pointers, got %v", err)
+ }
+
+ // TestCase 8: everything valid(byte_range):
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:startPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>420</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:startPointer>
+ <j.0:endPointer>
+ <j.0:ByteOffsetPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:offset>310</j.0:offset>
+ </j.0:ByteOffsetPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err != nil {
+ t.Errorf("unexpected error: %v", err)
+ }
+
+ // TestCase 9: everything valid(line_range):
+ parser, _ = parserFromBodyContent(`
+ <j.0:StartEndPointer>
+ <j.0:startPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:lineNumber>420</j.0:lineNumber>
+ </j.0:LineCharPointer>
+ </j.0:startPointer>
+ <j.0:endPointer>
+ <j.0:LineCharPointer>
+ <j.0:reference rdf:resource="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DoapSource"/>
+ <j.0:lineNumber>310</j.0:lineNumber>
+ </j.0:LineCharPointer>
+ </j.0:endPointer>
+ </j.0:StartEndPointer>
+ `)
+ si = &v2_3.Snippet{}
+ node = parser.gordfParserObj.Triples[0].Subject
+ err = parser.setSnippetRangeFromNode(node, si)
+ if err != nil {
+ t.Errorf("unexpected error: %v", err)
+ }
+}
+
+func Test_rdfParser2_3_setSnippetToFileWithID(t *testing.T) {
+ var parser *rdfParser2_3
+ var fileId common.ElementID
+ var si *v2_3.Snippet
+ var file *v2_3.File
+ var err error
+
+ // TestCase 1: file id which is not associated with any file must raise an error.
+ parser, _ = parserFromBodyContent("")
+ si = &v2_3.Snippet{}
+ err = parser.setSnippetToFileWithID(si, fileId)
+ if err == nil {
+ t.Errorf("expected an error saying undefined file")
+ }
+
+ // TestCase 2: file exists, but snippet of the file doesn't ( it mustn't raise any error )
+ fileId = common.ElementID("File1")
+ file = &v2_3.File{
+ FileSPDXIdentifier: fileId,
+ }
+ parser.files[fileId] = file
+ file.Snippets = nil // nil snippets
+ err = parser.setSnippetToFileWithID(si, fileId)
+ if err != nil {
+ t.Errorf("unexpected error: %v", err)
+ }
+ if len(file.Snippets) != 1 {
+ t.Errorf("expected file to have 1 snippet, got %d", len(file.Snippets))
+ }
+}