diff --git a/tests/packagedcode/data/nuget/ExpressionLicense.nuspec b/tests/packagedcode/data/nuget/ExpressionLicense.nuspec
new file mode 100644
index 00000000000..14c253ebb26
--- /dev/null
+++ b/tests/packagedcode/data/nuget/ExpressionLicense.nuspec
@@ -0,0 +1,9 @@
+
+
+
+ ExpressionLicenseExample
+ 1.0.0
+ false
+ MIT
+
+
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/ExpressionLicense.nuspec.json.expected b/tests/packagedcode/data/nuget/ExpressionLicense.nuspec.json.expected
new file mode 100644
index 00000000000..c63a64d19dc
--- /dev/null
+++ b/tests/packagedcode/data/nuget/ExpressionLicense.nuspec.json.expected
@@ -0,0 +1,69 @@
+[
+ {
+ "type": "nuget",
+ "namespace": null,
+ "name": "ExpressionLicenseExample",
+ "version": "1.0.0",
+ "qualifiers": {},
+ "subpath": null,
+ "primary_language": null,
+ "description": null,
+ "release_date": null,
+ "parties": [],
+ "keywords": [],
+ "homepage_url": null,
+ "download_url": null,
+ "size": null,
+ "sha1": null,
+ "md5": null,
+ "sha256": null,
+ "sha512": null,
+ "bug_tracking_url": null,
+ "code_view_url": null,
+ "vcs_url": null,
+ "copyright": null,
+ "holder": null,
+ "declared_license_expression": "mit",
+ "declared_license_expression_spdx": "MIT",
+ "license_detections": [
+ {
+ "license_expression": "mit",
+ "license_expression_spdx": "MIT",
+ "matches": [
+ {
+ "license_expression": "mit",
+ "license_expression_spdx": "MIT",
+ "from_file": null,
+ "start_line": 1,
+ "end_line": 1,
+ "matcher": "1-spdx-id",
+ "score": 100.0,
+ "matched_length": 1,
+ "match_coverage": 100.0,
+ "rule_relevance": 100,
+ "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06",
+ "rule_url": null,
+ "matched_text": "MIT"
+ }
+ ],
+ "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf"
+ }
+ ],
+ "other_license_expression": null,
+ "other_license_expression_spdx": null,
+ "other_license_detections": [],
+ "extracted_license_statement": "MIT",
+ "notice_text": null,
+ "source_packages": [],
+ "file_references": [],
+ "is_private": false,
+ "is_virtual": false,
+ "extra_data": {},
+ "dependencies": [],
+ "repository_homepage_url": "https://www.nuget.org/packages/ExpressionLicenseExample/1.0.0",
+ "repository_download_url": "https://www.nuget.org/api/v2/package/ExpressionLicenseExample/1.0.0",
+ "api_data_url": "https://api.nuget.org/v3/registration3/expressionlicenseexample/1.0.0.json",
+ "datasource_id": "nuget_nupsec",
+ "purl": "pkg:nuget/ExpressionLicenseExample@1.0.0"
+ }
+]
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/LicenseURLOnly.nuspec b/tests/packagedcode/data/nuget/LicenseURLOnly.nuspec
new file mode 100644
index 00000000000..14cd7e0b4d4
--- /dev/null
+++ b/tests/packagedcode/data/nuget/LicenseURLOnly.nuspec
@@ -0,0 +1,9 @@
+
+
+
+ LicenseUrlOnlyExample
+ 1.0.0
+ false
+ https://opensource.org/licenses/MIT
+
+
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/LicenseURLOnly.nuspec.json.expected b/tests/packagedcode/data/nuget/LicenseURLOnly.nuspec.json.expected
new file mode 100644
index 00000000000..a1804e7c03f
--- /dev/null
+++ b/tests/packagedcode/data/nuget/LicenseURLOnly.nuspec.json.expected
@@ -0,0 +1,69 @@
+[
+ {
+ "type": "nuget",
+ "namespace": null,
+ "name": "LicenseUrlOnlyExample",
+ "version": "1.0.0",
+ "qualifiers": {},
+ "subpath": null,
+ "primary_language": null,
+ "description": null,
+ "release_date": null,
+ "parties": [],
+ "keywords": [],
+ "homepage_url": null,
+ "download_url": null,
+ "size": null,
+ "sha1": null,
+ "md5": null,
+ "sha256": null,
+ "sha512": null,
+ "bug_tracking_url": null,
+ "code_view_url": null,
+ "vcs_url": null,
+ "copyright": null,
+ "holder": null,
+ "declared_license_expression": "mit",
+ "declared_license_expression_spdx": "MIT",
+ "license_detections": [
+ {
+ "license_expression": "mit",
+ "license_expression_spdx": "MIT",
+ "matches": [
+ {
+ "license_expression": "mit",
+ "license_expression_spdx": "MIT",
+ "from_file": null,
+ "start_line": 1,
+ "end_line": 1,
+ "matcher": "1-hash",
+ "score": 100.0,
+ "matched_length": 5,
+ "match_coverage": 100.0,
+ "rule_relevance": 100,
+ "rule_identifier": "mit_65.RULE",
+ "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_65.RULE",
+ "matched_text": "https://opensource.org/licenses/MIT"
+ }
+ ],
+ "identifier": "mit-8c45a313-6646-a283-ebeb-697e96d45185"
+ }
+ ],
+ "other_license_expression": null,
+ "other_license_expression_spdx": null,
+ "other_license_detections": [],
+ "extracted_license_statement": "https://opensource.org/licenses/MIT",
+ "notice_text": null,
+ "source_packages": [],
+ "file_references": [],
+ "is_private": false,
+ "is_virtual": false,
+ "extra_data": {},
+ "dependencies": [],
+ "repository_homepage_url": "https://www.nuget.org/packages/LicenseUrlOnlyExample/1.0.0",
+ "repository_download_url": "https://www.nuget.org/api/v2/package/LicenseUrlOnlyExample/1.0.0",
+ "api_data_url": "https://api.nuget.org/v3/registration3/licenseurlonlyexample/1.0.0.json",
+ "datasource_id": "nuget_nupsec",
+ "purl": "pkg:nuget/LicenseUrlOnlyExample@1.0.0"
+ }
+]
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/NoLicenseInfo.nuspec b/tests/packagedcode/data/nuget/NoLicenseInfo.nuspec
new file mode 100644
index 00000000000..ab5abcca401
--- /dev/null
+++ b/tests/packagedcode/data/nuget/NoLicenseInfo.nuspec
@@ -0,0 +1,8 @@
+
+
+
+ NoLicenseInfoExample
+ 1.0.0
+ false
+
+
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/NoLicenseInfo.nuspec.json.expected b/tests/packagedcode/data/nuget/NoLicenseInfo.nuspec.json.expected
new file mode 100644
index 00000000000..a74a297a063
--- /dev/null
+++ b/tests/packagedcode/data/nuget/NoLicenseInfo.nuspec.json.expected
@@ -0,0 +1,46 @@
+[
+ {
+ "type": "nuget",
+ "namespace": null,
+ "name": "NoLicenseInfoExample",
+ "version": "1.0.0",
+ "qualifiers": {},
+ "subpath": null,
+ "primary_language": null,
+ "description": null,
+ "release_date": null,
+ "parties": [],
+ "keywords": [],
+ "homepage_url": null,
+ "download_url": null,
+ "size": null,
+ "sha1": null,
+ "md5": null,
+ "sha256": null,
+ "sha512": null,
+ "bug_tracking_url": null,
+ "code_view_url": null,
+ "vcs_url": null,
+ "copyright": null,
+ "holder": null,
+ "declared_license_expression": null,
+ "declared_license_expression_spdx": null,
+ "license_detections": [],
+ "other_license_expression": null,
+ "other_license_expression_spdx": null,
+ "other_license_detections": [],
+ "extracted_license_statement": null,
+ "notice_text": null,
+ "source_packages": [],
+ "file_references": [],
+ "is_private": false,
+ "is_virtual": false,
+ "extra_data": {},
+ "dependencies": [],
+ "repository_homepage_url": "https://www.nuget.org/packages/NoLicenseInfoExample/1.0.0",
+ "repository_download_url": "https://www.nuget.org/api/v2/package/NoLicenseInfoExample/1.0.0",
+ "api_data_url": "https://api.nuget.org/v3/registration3/nolicenseinfoexample/1.0.0.json",
+ "datasource_id": "nuget_nupsec",
+ "purl": "pkg:nuget/NoLicenseInfoExample@1.0.0"
+ }
+]
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/PlainLicense.nuspec b/tests/packagedcode/data/nuget/PlainLicense.nuspec
new file mode 100644
index 00000000000..3993bdd7fec
--- /dev/null
+++ b/tests/packagedcode/data/nuget/PlainLicense.nuspec
@@ -0,0 +1,9 @@
+
+
+
+ PlainLicenseExample
+ 1.0.0
+ false
+ MIT
+
+
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/PlainLicense.nuspec.json.expected b/tests/packagedcode/data/nuget/PlainLicense.nuspec.json.expected
new file mode 100644
index 00000000000..05366edcadf
--- /dev/null
+++ b/tests/packagedcode/data/nuget/PlainLicense.nuspec.json.expected
@@ -0,0 +1,69 @@
+[
+ {
+ "type": "nuget",
+ "namespace": null,
+ "name": "PlainLicenseExample",
+ "version": "1.0.0",
+ "qualifiers": {},
+ "subpath": null,
+ "primary_language": null,
+ "description": null,
+ "release_date": null,
+ "parties": [],
+ "keywords": [],
+ "homepage_url": null,
+ "download_url": null,
+ "size": null,
+ "sha1": null,
+ "md5": null,
+ "sha256": null,
+ "sha512": null,
+ "bug_tracking_url": null,
+ "code_view_url": null,
+ "vcs_url": null,
+ "copyright": null,
+ "holder": null,
+ "declared_license_expression": "mit",
+ "declared_license_expression_spdx": "MIT",
+ "license_detections": [
+ {
+ "license_expression": "mit",
+ "license_expression_spdx": "MIT",
+ "matches": [
+ {
+ "license_expression": "mit",
+ "license_expression_spdx": "MIT",
+ "from_file": null,
+ "start_line": 1,
+ "end_line": 1,
+ "matcher": "1-spdx-id",
+ "score": 100.0,
+ "matched_length": 1,
+ "match_coverage": 100.0,
+ "rule_relevance": 100,
+ "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06",
+ "rule_url": null,
+ "matched_text": "MIT"
+ }
+ ],
+ "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf"
+ }
+ ],
+ "other_license_expression": null,
+ "other_license_expression_spdx": null,
+ "other_license_detections": [],
+ "extracted_license_statement": "MIT",
+ "notice_text": null,
+ "source_packages": [],
+ "file_references": [],
+ "is_private": false,
+ "is_virtual": false,
+ "extra_data": {},
+ "dependencies": [],
+ "repository_homepage_url": "https://www.nuget.org/packages/PlainLicenseExample/1.0.0",
+ "repository_download_url": "https://www.nuget.org/api/v2/package/PlainLicenseExample/1.0.0",
+ "api_data_url": "https://api.nuget.org/v3/registration3/plainlicenseexample/1.0.0.json",
+ "datasource_id": "nuget_nupsec",
+ "purl": "pkg:nuget/PlainLicenseExample@1.0.0"
+ }
+]
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/SpecFlow.MsTest.3.1.89.nuspec b/tests/packagedcode/data/nuget/SpecFlow.MsTest.3.1.89.nuspec
new file mode 100644
index 00000000000..347fe43be87
--- /dev/null
+++ b/tests/packagedcode/data/nuget/SpecFlow.MsTest.3.1.89.nuspec
@@ -0,0 +1,10 @@
+
+
+
+ SpecFlow.MsTest
+ 3.1.89
+ false
+ LICENSE.txt
+ https://aka.ms/deprecateLicenseUrl
+
+
\ No newline at end of file
diff --git a/tests/packagedcode/data/nuget/SpecFlow.MsTest.3.1.89.nuspec.json.expected b/tests/packagedcode/data/nuget/SpecFlow.MsTest.3.1.89.nuspec.json.expected
new file mode 100644
index 00000000000..9b465220725
--- /dev/null
+++ b/tests/packagedcode/data/nuget/SpecFlow.MsTest.3.1.89.nuspec.json.expected
@@ -0,0 +1,69 @@
+[
+ {
+ "type": "nuget",
+ "namespace": null,
+ "name": "SpecFlow.MsTest",
+ "version": "3.1.89",
+ "qualifiers": {},
+ "subpath": null,
+ "primary_language": null,
+ "description": null,
+ "release_date": null,
+ "parties": [],
+ "keywords": [],
+ "homepage_url": null,
+ "download_url": null,
+ "size": null,
+ "sha1": null,
+ "md5": null,
+ "sha256": null,
+ "sha512": null,
+ "bug_tracking_url": null,
+ "code_view_url": null,
+ "vcs_url": null,
+ "copyright": null,
+ "holder": null,
+ "declared_license_expression": "unknown-license-reference",
+ "declared_license_expression_spdx": "LicenseRef-scancode-unknown-license-reference",
+ "license_detections": [
+ {
+ "license_expression": "unknown-license-reference",
+ "license_expression_spdx": "LicenseRef-scancode-unknown-license-reference",
+ "matches": [
+ {
+ "license_expression": "unknown-license-reference",
+ "license_expression_spdx": "LicenseRef-scancode-unknown-license-reference",
+ "from_file": null,
+ "start_line": 1,
+ "end_line": 1,
+ "matcher": "1-hash",
+ "score": 90.0,
+ "matched_length": 3,
+ "match_coverage": 100.0,
+ "rule_relevance": 90,
+ "rule_identifier": "unknown-license-reference_339.RULE",
+ "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/unknown-license-reference_339.RULE",
+ "matched_text": "license LICENSE.txt"
+ }
+ ],
+ "identifier": "unknown_license_reference-bf47ad8c-fa3f-0e58-e5e5-d0aef2c37b43"
+ }
+ ],
+ "other_license_expression": null,
+ "other_license_expression_spdx": null,
+ "other_license_detections": [],
+ "extracted_license_statement": "LICENSE.txt",
+ "notice_text": null,
+ "source_packages": [],
+ "file_references": [],
+ "is_private": false,
+ "is_virtual": false,
+ "extra_data": {},
+ "dependencies": [],
+ "repository_homepage_url": "https://www.nuget.org/packages/SpecFlow.MsTest/3.1.89",
+ "repository_download_url": "https://www.nuget.org/api/v2/package/SpecFlow.MsTest/3.1.89",
+ "api_data_url": "https://api.nuget.org/v3/registration3/specflow.mstest/3.1.89.json",
+ "datasource_id": "nuget_nupsec",
+ "purl": "pkg:nuget/SpecFlow.MsTest@3.1.89"
+ }
+]
\ No newline at end of file
diff --git a/tests/packagedcode/test_nuget.py b/tests/packagedcode/test_nuget.py
index d3af13ab51b..372c95df9d2 100644
--- a/tests/packagedcode/test_nuget.py
+++ b/tests/packagedcode/test_nuget.py
@@ -72,3 +72,33 @@ def test_parse_nuget_package_lock_json(self):
def test_package_lock_json_is_package_data_file(self):
test_file = self.get_test_loc('nuget/packages.lock.json')
assert nuget.NugetPackagesLockHandler.is_datafile(test_file)
+
+ def test_parse_creates_package_from_nuspec_specflow_mstest_license_file(self):
+ test_file = self.get_test_loc('nuget/SpecFlow.MsTest.3.1.89.nuspec')
+ package = nuget.NugetNuspecHandler.parse(test_file)
+ expected_loc = self.get_test_loc('nuget/SpecFlow.MsTest.3.1.89.nuspec.json.expected')
+ self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES)
+
+ def test_parse_creates_package_from_nuspec_plain_license(self):
+ test_file = self.get_test_loc('nuget/PlainLicense.nuspec')
+ package = nuget.NugetNuspecHandler.parse(test_file)
+ expected_loc = self.get_test_loc('nuget/PlainLicense.nuspec.json.expected')
+ self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES)
+
+ def test_parse_creates_package_from_nuspec_license_url_only(self):
+ test_file = self.get_test_loc('nuget/LicenseUrlOnly.nuspec')
+ package = nuget.NugetNuspecHandler.parse(test_file)
+ expected_loc = self.get_test_loc('nuget/LicenseUrlOnly.nuspec.json.expected')
+ self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES)
+
+ def test_parse_creates_package_from_nuspec_no_license_info(self):
+ test_file = self.get_test_loc('nuget/NoLicenseInfo.nuspec')
+ package = nuget.NugetNuspecHandler.parse(test_file)
+ expected_loc = self.get_test_loc('nuget/NoLicenseInfo.nuspec.json.expected')
+ self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES)
+
+ def test_parse_creates_package_from_nuspec_expression_license(self):
+ test_file = self.get_test_loc('nuget/ExpressionLicense.nuspec')
+ package = nuget.NugetNuspecHandler.parse(test_file)
+ expected_loc = self.get_test_loc('nuget/ExpressionLicense.nuspec.json.expected')
+ self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES)