@@ -98,6 +98,264 @@ TEST_CASE ("extract arg from cmake invocation args", "[spdx]")
9898 }
9999}
100100
101+ TEST_CASE (" spdx run resource heuristics" , " [spdx]" )
102+ {
103+ auto portfile_cmake = R"(
104+ vcpkg_download_distfile(ARCHIVE
105+ URLS "https://vcpkg-download-distfile.dev/${VERSION}.tar.gz"
106+ "https://vcpkg-download-distfile.dev/${VERSION}-other.tar.gz"
107+ FILENAME "distfile-${VERSION}.tar.gz"
108+ SHA512 distfile_test_1
109+ )
110+ vcpkg_from_github(
111+ OUT_SOURCE_PATH SOURCE_PATH
112+ REPO from/github
113+ REF v${VERSION}
114+ SHA512 from_github_test_1
115+ HEAD_REF devel
116+ )
117+ vcpkg_from_gitlab(
118+ OUT_SOURCE_PATH SOURCE_PATH
119+ GITLAB_URL https://from.gitlab.org
120+ REPO from/gitlab
121+ REF "${VERSION}"
122+ SHA512 from_gitlab_test_1
123+ )
124+ vcpkg_from_sourceforge(
125+ OUT_SOURCE_PATH SOURCE_PATH
126+ REPO sourceforge
127+ REF sourceforge
128+ FILENAME "sourceforge-${VERSION}.tar.gz"
129+ SHA512 sourceforge_test_1
130+ )
131+ vcpkg_from_bitbucket(
132+ OUT_SOURCE_PATH SOURCE_PATH
133+ REPO from/bitbucket
134+ REF "v${VERSION}"
135+ SHA512 from_bitbucket_test_1
136+ HEAD_REF master
137+ )
138+ vcpkg_download_distfile(ARCHIVE
139+ URLS "https://vcpkg-download-distfile.dev/${VERSION}.tar.gz"
140+ "https://vcpkg-download-distfile.dev/${VERSION}-other.tar.gz"
141+ FILENAME "distfile-${VERSION}.tar.gz"
142+ SHA512 distfile_test_2
143+ )
144+ vcpkg_from_github(
145+ OUT_SOURCE_PATH SOURCE_PATH
146+ REPO from/github
147+ REF v${VERSION}
148+ SHA512 from_github_test_2
149+ HEAD_REF devel
150+ )
151+ vcpkg_from_gitlab(
152+ OUT_SOURCE_PATH SOURCE_PATH
153+ GITLAB_URL https://from.gitlab.org
154+ REPO from/gitlab
155+ REF "${VERSION}"
156+ SHA512 from_gitlab_test_2
157+ )
158+ vcpkg_from_sourceforge(
159+ OUT_SOURCE_PATH SOURCE_PATH
160+ REPO sourceforge
161+ REF sourceforge
162+ FILENAME "sourceforge-${VERSION}.tar.gz"
163+ SHA512 sourceforge_test_2
164+ )
165+ vcpkg_from_bitbucket(
166+ OUT_SOURCE_PATH SOURCE_PATH
167+ REPO from/bitbucket
168+ REF "v${VERSION}"
169+ SHA512 from_bitbucket_test_2
170+ HEAD_REF master
171+ )
172+ vcpkg_from_git(
173+ OUT_SOURCE_PATH SOURCE_PATH
174+ URL https://from-git-1.dev
175+ REF "${VERSION}"
176+ HEAD_REF main
177+ )
178+ vcpkg_from_git(
179+ OUT_SOURCE_PATH SOURCE_PATH
180+ URL https://from-git-2.dev
181+ REF "${VERSION}"
182+ HEAD_REF main
183+ )
184+ )" ;
185+ auto expected = Json::parse (R"json(
186+ {
187+ "packages": [
188+ {
189+ "SPDXID": "SPDXRef-resource-0",
190+ "name": "from/github",
191+ "downloadLocation": "git+https://github.com/from/[email protected] ", 192+ "licenseConcluded": "NOASSERTION",
193+ "licenseDeclared": "NOASSERTION",
194+ "copyrightText": "NOASSERTION",
195+ "checksums": [
196+ {
197+ "algorithm": "SHA512",
198+ "checksumValue": "from_github_test_1"
199+ }
200+ ]
201+ },
202+ {
203+ "SPDXID": "SPDXRef-resource-1",
204+ "name": "from/github",
205+ "downloadLocation": "git+https://github.com/from/[email protected] ", 206+ "licenseConcluded": "NOASSERTION",
207+ "licenseDeclared": "NOASSERTION",
208+ "copyrightText": "NOASSERTION",
209+ "checksums": [
210+ {
211+ "algorithm": "SHA512",
212+ "checksumValue": "from_github_test_2"
213+ }
214+ ]
215+ },
216+ {
217+ "SPDXID": "SPDXRef-resource-2",
218+ "name": "from/gitlab",
219+ "downloadLocation": "git+https://from.gitlab.org/from/[email protected] ", 220+ "licenseConcluded": "NOASSERTION",
221+ "licenseDeclared": "NOASSERTION",
222+ "copyrightText": "NOASSERTION",
223+ "checksums": [
224+ {
225+ "algorithm": "SHA512",
226+ "checksumValue": "from_gitlab_test_1"
227+ }
228+ ]
229+ },
230+ {
231+ "SPDXID": "SPDXRef-resource-3",
232+ "name": "from/gitlab",
233+ "downloadLocation": "git+https://from.gitlab.org/from/[email protected] ", 234+ "licenseConcluded": "NOASSERTION",
235+ "licenseDeclared": "NOASSERTION",
236+ "copyrightText": "NOASSERTION",
237+ "checksums": [
238+ {
239+ "algorithm": "SHA512",
240+ "checksumValue": "from_gitlab_test_2"
241+ }
242+ ]
243+ },
244+ {
245+ "SPDXID": "SPDXRef-resource-4",
246+ "name": "https://from-git-1.dev",
247+ "downloadLocation": "git+https://[email protected] ", 248+ "licenseConcluded": "NOASSERTION",
249+ "licenseDeclared": "NOASSERTION",
250+ "copyrightText": "NOASSERTION"
251+ },
252+ {
253+ "SPDXID": "SPDXRef-resource-5",
254+ "name": "https://from-git-2.dev",
255+ "downloadLocation": "git+https://[email protected] ", 256+ "licenseConcluded": "NOASSERTION",
257+ "licenseDeclared": "NOASSERTION",
258+ "copyrightText": "NOASSERTION"
259+ },
260+ {
261+ "SPDXID": "SPDXRef-resource-6",
262+ "name": "distfile-3.2.1.tar.gz",
263+ "packageFileName": "distfile-3.2.1.tar.gz",
264+ "downloadLocation": "https://vcpkg-download-distfile.dev/3.2.1.tar.gz",
265+ "licenseConcluded": "NOASSERTION",
266+ "licenseDeclared": "NOASSERTION",
267+ "copyrightText": "NOASSERTION",
268+ "checksums": [
269+ {
270+ "algorithm": "SHA512",
271+ "checksumValue": "distfile_test_1"
272+ }
273+ ]
274+ },
275+ {
276+ "SPDXID": "SPDXRef-resource-7",
277+ "name": "distfile-3.2.1.tar.gz",
278+ "packageFileName": "distfile-3.2.1.tar.gz",
279+ "downloadLocation": "https://vcpkg-download-distfile.dev/3.2.1.tar.gz",
280+ "licenseConcluded": "NOASSERTION",
281+ "licenseDeclared": "NOASSERTION",
282+ "copyrightText": "NOASSERTION",
283+ "checksums": [
284+ {
285+ "algorithm": "SHA512",
286+ "checksumValue": "distfile_test_2"
287+ }
288+ ]
289+ },
290+ {
291+ "SPDXID": "SPDXRef-resource-8",
292+ "name": "sourceforge-3.2.1.tar.gz",
293+ "packageFileName": "sourceforge-3.2.1.tar.gz",
294+ "downloadLocation": "https://sourceforge.net/projects/sourceforge/files/sourceforge/sourceforge-3.2.1.tar.gz",
295+ "licenseConcluded": "NOASSERTION",
296+ "licenseDeclared": "NOASSERTION",
297+ "copyrightText": "NOASSERTION",
298+ "checksums": [
299+ {
300+ "algorithm": "SHA512",
301+ "checksumValue": "sourceforge_test_1"
302+ }
303+ ]
304+ },
305+ {
306+ "SPDXID": "SPDXRef-resource-9",
307+ "name": "sourceforge-3.2.1.tar.gz",
308+ "packageFileName": "sourceforge-3.2.1.tar.gz",
309+ "downloadLocation": "https://sourceforge.net/projects/sourceforge/files/sourceforge/sourceforge-3.2.1.tar.gz",
310+ "licenseConcluded": "NOASSERTION",
311+ "licenseDeclared": "NOASSERTION",
312+ "copyrightText": "NOASSERTION",
313+ "checksums": [
314+ {
315+ "algorithm": "SHA512",
316+ "checksumValue": "sourceforge_test_2"
317+ }
318+ ]
319+ },
320+ {
321+ "SPDXID": "SPDXRef-resource-10",
322+ "name": "from/bitbucket",
323+ "downloadLocation": "git+https://bitbucket.com/from/[email protected] ", 324+ "licenseConcluded": "NOASSERTION",
325+ "licenseDeclared": "NOASSERTION",
326+ "copyrightText": "NOASSERTION",
327+ "checksums": [
328+ {
329+ "algorithm": "SHA512",
330+ "checksumValue": "from_bitbucket_test_1"
331+ }
332+ ]
333+ },
334+ {
335+ "SPDXID": "SPDXRef-resource-11",
336+ "name": "from/bitbucket",
337+ "downloadLocation": "git+https://bitbucket.com/from/[email protected] ", 338+ "licenseConcluded": "NOASSERTION",
339+ "licenseDeclared": "NOASSERTION",
340+ "copyrightText": "NOASSERTION",
341+ "checksums": [
342+ {
343+ "algorithm": "SHA512",
344+ "checksumValue": "from_bitbucket_test_2"
345+ }
346+ ]
347+ }
348+ ]
349+ })json" ,
350+ " test" )
351+ .value (VCPKG_LINE_INFO);
352+
353+ auto generated_spdx = run_resource_heuristics (portfile_cmake, " 3.2.1" );
354+ auto spdx_str = Json::stringify (generated_spdx);
355+ auto res = Json::parse (spdx_str, " test" ).value (VCPKG_LINE_INFO);
356+ Test::check_json_eq (expected.value , res.value );
357+ }
358+
101359TEST_CASE (" spdx maximum serialization" , " [spdx]" )
102360{
103361 PackagesDirAssigner packages_dir_assigner{" test_packages_root" };
0 commit comments