URI-PackageURL-2.26/0000755000175000017500000000000015264504726013035 5ustar peppepeppeURI-PackageURL-2.26/t/0000755000175000017500000000000015264504726013300 5ustar peppepeppeURI-PackageURL-2.26/t/99-purl-type-definition.t0000644000175000017500000000356615264504421020015 0ustar peppepeppe#!perl use File::Spec; use JSON::PP; use Test::More; use File::Find qw(find); require_ok('URI::PackageURL'); require_ok('URI::PackageURL::Type'); require_ok('URI::PackageURL::Util'); my @PURL_TYPES = URI::PackageURL::Util::purl_types(); my @PURL_COMPONENTS = ('name', 'namespace', 'version', 'subpath', 'qualifiers'); foreach my $type (@PURL_TYPES) { if (my $purl_type = $ENV{PURL_TYPE}) { next unless ($purl_type eq $type); diag "Test only $ENV{PURL_TYPE} testcases"; } my $t = URI::PackageURL::Type->new($type); subtest "$type - component requirement" => sub { foreach my $component (@PURL_COMPONENTS) { unless ($t->component_have_definition($component)) { note "(!) No '$component' component in definition"; next; } my $requirement = $t->component_requirement($component); like $requirement, qr/(required|optional|prohibited)/, "'$component' component requirement --> $requirement"; } }; subtest "$type - scheme" => sub { eval { $t->validate(type => $type) }; unlike $@, qr/is not a valid scheme/, 'default "pkg" scheme'; eval { $t->validate(scheme => 'foo', type => $type) }; like $@, qr/'foo' is not a valid scheme/, 'invalid scheme'; }; if ($ENV{PURL_EXAMPLES_TESTING}) { my $examples = $t->examples; subtest "$type - examples" => sub { my $id = 1; foreach my $example (@{$examples}) { my $purl = eval { URI::PackageURL->from_string($example) }; if ($@) { fail("Invalid PURL type: $@"); } else { is $purl->to_string, $example, "Test example #$id"; } $id++; } }; } } done_testing(); URI-PackageURL-2.26/t/90-cpan-distname-info.t0000644000175000017500000000523115264504421017360 0ustar peppepeppe#!perl use v5.10; use Test::More; use CPAN::DistnameInfo; use URI::PackageURL; while (my $distname = ) { chomp $distname; my $d = CPAN::DistnameInfo->new($distname); next unless $d->cpanid; next unless $d->dist; my $qualifiers = {author => $d->cpanid}; # "tar.gz" is the default extension for CPAN distributions if ($d->extension ne 'tar.gz') { $qualifiers->{ext} = $d->extension; } my $purl = eval { URI::PackageURL->new(type => 'cpan', name => $d->dist, version => $d->version, qualifiers => $qualifiers); }; fail(@$) if $@; ok($purl, "Conversion: $distname --> $purl"); is($d->dist, $purl->name, 'dist(dist) == purl(name)'); is($d->version, $purl->version, 'dist(version) == purl(version)'); is($d->cpanid, $purl->qualifiers->{author}, 'dist(cpanid) == purl(qualifiers:author)'); } done_testing(); __DATA__ CPAN/authors/id/J/JA/JAMCC/ngb-101.zip CPAN/authors/id/J/JS/JSHY/DateTime-Fiscal-Year-0.01.tar.gz CPAN/authors/id/G/GA/GARY/Math-BigInteger-1.0.tar.gz CPAN/authors/id/T/TE/TERRY/VoiceXML-Server-1.6.tar.gz CPAN/authors/id/J/JA/JAMCC/ngb-100.tar.gz CPAN/authors/id/J/JS/JSHY/DateTime-Fiscal-Year-0.02.tar.gz CPAN/authors/id/G/GA/GARY/Crypt-DES-1.0.tar.gz CPAN/authors/id/G/GA/GARY/Stream-1.00.tar.gz CPAN/authors/id/T/TM/TMAEK/DBIx-Cursor-0.14.tar.gz CPAN/authors/id/G/GA/GARY/Crypt-IDEA-1.0.tar.gz CPAN/authors/id/G/GA/GARY/Math-TrulyRandom-1.0.tar.gz CPAN/authors/id/T/TE/TERRY/VoiceXML-Server-1.13.tar.gz JWILLIAMS/MasonX-Lexer-MSP-0.02.tar.gz CPAN/authors/id/J/JA/JAMCC/Tie-CacheHash-0.50.tar.gz CPAN/authors/id/T/TM/TMAEK/DBIx-Cursor-0.13.tar.gz CPAN/authors/id/J/JD/JDUTTON/Parse-RandGen-0.100.tar.gz id/N/NI/NI-S/Tk400.202.tar.gz authors/id/G/GB/GBARR/perl5.005_03.tar.gz M/MS/MSCHWERN/Test-Simple-0.48_01.tar.gz id/J/JV/JV/PostScript-Font-1.09.tar.gz id/I/IB/IBMTORDB2/DBD-DB2-0.77.tar.gz id/I/IB/IBMTORDB2/DBD-DB2-0.99.tar.bz2 CPAN/authors/id/L/LD/LDS/CGI.pm-2.34.tar.gz CPAN/authors/id/J/JE/JESSE/perl-5.12.0-RC0.tar.gz CPAN/authors/id/G/GS/GSAR/perl-5.6.1-TRIAL3.tar.gz CPAN/authors/id/R/RJ/RJBS/Dist-Zilla-2.100860-TRIAL.tar.gz CPAN/authors/id/M/MI/MINGYILIU/Bio-ASN1-EntrezGene-1.10-withoutworldwriteables.tar.gz CPAN/authors/id/I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip CPAN/authors/id/S/SA/SANDEEPV/GuiBuilder_v0_3.zip CPAN/authors/id/I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip BDFOY/authors/id/B/BD/BDFOY/Mojolicious-Plugin-DirectoryServer-1.003.tar KMACLEOD/Frontier-RPC-0.07b4.tar.gz RTFIREFLY/Frontier-RPC-0.07b4p1.tar.gz AJPEACOCK/HTML-Table-2.08a.tar.gz DANPEDER/MIME-Base32-1.02a.tar.gz CPAN/authors/id/G/GD/GDT/URI-PackageURL-2.21.tar.gz URI-PackageURL-2.26/t/53-vers-percent-encoding.t0000644000175000017500000000406015264504421020103 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::VersionRange; subtest "VERS: canonical percent-encoding (only reserved characters are encoded)" => sub { #<<< my @tests = ( {version => '1.0.0+build', expected => 'vers:generic/1.0.0+build'}, {version => '1.0:2~3', expected => 'vers:generic/1.0:2~3'}, {version => '1|2', expected => 'vers:generic/1%7C2'}, {version => '1>2<3=4!5', expected => 'vers:generic/1%3E2%3C3%3D4%215'}, {version => '1*2%3', expected => 'vers:generic/1%2A2%253'}, {version => '1 2', expected => 'vers:generic/1%202'}, ); #>>> foreach my $test (@tests) { my $vers = URI::VersionRange->new( scheme => 'generic', constraints => [URI::VersionRange::Constraint->new(version => $test->{version})] ); is("$vers", $test->{expected}, "encode: '$test->{version}'"); is($vers->constraints->[0]->version, $test->{version}, "decode: '$test->{version}'"); my $roundtrip = URI::VersionRange->from_string("$vers"); is("$roundtrip", "$vers", "roundtrip: $vers"); } }; subtest "VERS: percent-decoding (exactly once)" => sub { is(URI::VersionRange->from_string('vers:npm/1.0%252F0')->constraints->[0]->version, '1.0%2F0', 'decode once'); }; subtest "VERS: invalid percent-encoding" => sub { #<<< my @tests = ( {vers => 'vers:npm/1.0%2G0', error => qr/Invalid percent-encoding/}, {vers => 'vers:npm/1.0%7c1', error => qr/Invalid percent-encoding/}, {vers => 'vers:npm/1.0%2B1', error => qr/Non-canonical percent-encoding/}, {vers => 'vers:npm/00%3A00', error => qr/Non-canonical percent-encoding/}, {vers => 'vers:lexicographic/1%092', error => qr/Non-canonical percent-encoding/}, ); #>>> foreach my $test (@tests) { eval { URI::VersionRange->from_string($test->{vers}) }; like($@, $test->{error}, "error: $test->{vers}"); } }; done_testing(); URI-PackageURL-2.26/t/91-cpan-distpath-quailfier.t0000644000175000017500000013526515264504421020436 0ustar peppepeppe#!perl use v5.10; use Test::More; use CPAN::DistnameInfo; use URI::PackageURL; use URI::PackageURL::Util qw(purl_to_urls); while (my $distpath = ) { chomp $distpath; subtest "$distpath" => sub { my $d = CPAN::DistnameInfo->new($distpath); my $purl1 = PURL->new( type => 'cpan', name => $d->dist, version => $d->version, qualifiers => {distpath => $distpath, author => $d->cpanid} ); my $urls1 = purl_to_urls($purl1); my $like1 = quotemeta($distpath); like $urls1->{download}, qr{$like1}, sprintf("PURL(1): %s\n\t - Download URL(1): %s", $purl1, $urls1->{download}); my $purl2 = $purl1->clone; # Alternative distname my $distpath2 = (split '/', $distpath, 3)[2]; $purl2->qualifiers({distpath => $distpath2}); my $urls2 = purl_to_urls($purl2); my $like2 = quotemeta($distpath2); like $urls2->{download}, qr{$like2}, sprintf("PURL(2): %s\n\t - Download URL(2): %s", $purl2, $urls2->{download}); }; } done_testing(); # distribution path in __DATA__ are taken from 02packages.details.txt snapshot ~2025-09-13 00:00:00) # Algorithm/Script # use CPAN::PackageDetails; # use URI::PackageURL; # # my $package_details = CPAN::PackageDetails->read('02packages.details.txt'); # my $records = $package_details->entries->get_hash; # # foreach my $package (keys %{$records}) { # foreach my $version (keys %{$records->{$package}}) { # # my $record = $records->{$package}{$version}; # # my $d = CPAN::DistnameInfo->new($record->path); # # next unless $d->dist; # next unless $d->version; # # my $qualifiers = {}; # # if ($d->extension ne 'tar.gz') { # $qualifiers->{ext} = $d->extension; # } # # my $purl = URI::PackageURL->new( # type => 'cpan', # namespace => $d->cpanid, # name => $d->dist, # version => $d->version, # qualifiers => $qualifiers # ); # # my $download_url = $purl->to_urls->{download}; # $download_url =~ s{https://www.cpan.org/authors/id/}{}; # # if ($download_url ne $d->pathname) { # say $d->pathname; # } # # } # } __DATA__ A/AA/AAMEND/RADIUS/RADIUS-XMLParser-2.30.tar.gz A/AA/AARDEN/Tk-ActivityBar/Tk-ActivityBar-0.01.tar.gz A/AA/AARDO/combine_4.005.tar.gz A/AA/AAU/MRIM/Net-MRIM-1.11.tar.gz A/AB/ABERNDT/Win32-Snarl/win32-snarl-1.01.tar.gz A/AE/AECOOPER/monotone/Monotone-AutomateStdio-1.10.tar.gz A/AF/AFRYER/TUXEDO_1_00.zip A/AH/AHCHORN/Math/ES/Math-ES-0.08.tar.gz A/AK/AKOLB/Solaris/Solaris-Lgrp-0.1.4.tar.gz A/AL/ALEXEVIL/evilboss/EvilBoss-1.01.tar.gz A/AL/ALEXMASS/bioinfo/InSilicoSpectro-0.9.7.tar.gz A/AL/ALEXMASS/bioinfo/InSilicoSpectro-0.9.9.tar.gz A/AM/AMBS/Biblio/Biblio-Thesaurus-0.43.tar.gz A/AM/AMBS/Bundle/Bundle-SDK-SIMON-1.02.tar.gz A/AM/AMBS/Dancer/Dancer2-Plugin-Emailesque-0.03.tar.gz A/AM/AMBS/Finance/Finance-Kitko-Charts-0.01.tar.gz A/AM/AMBS/Lingua/Lingua-Flags-0.07.tar.gz A/AM/AMBS/Lingua/Lingua-FreeLing3-0.09.tar.gz A/AM/AMBS/Lingua/Lingua-FreeLing3-Utils-0.09.tar.gz A/AM/AMBS/Lingua/Lingua-Identify-0.56.tar.gz A/AM/AMBS/Lingua/Lingua-PT-ProperNames-0.10.tar.gz A/AM/AMBS/Lingua/Lingua-PT-Speaker-0.12.tar.gz A/AM/AMBS/Lingua/Task-Lingua-PT-0.02.tar.gz A/AM/AMBS/POSIX/POSIX-Open3-0.01.tar.gz A/AM/AMBS/Search/Search-Glimpse-0.04.tar.gz A/AM/AMBS/String/String-Tokeniser-0.05.tar.gz A/AM/AMBS/Text/Text-Ngram-0.15.tar.gz A/AM/AMBS/Text/Text-RewriteRules-0.25.tar.gz A/AM/AMBS/Text/Text-WordGrams-0.07.tar.gz A/AM/AMBS/Tie/Tie-Ispell-0.08.tar.gz A/AM/AMBS/XML/XML-XCES-0.01.tar.gz A/AM/AMITSIDES/WWW/WWW-BitTorrent-0.01.tar.gz A/AN/ANDREWN/Parse-Plain/Parse-Plain-3.03.tar.gz A/AN/ANK/FSWatcher/Win32-FileSystem-Watcher-0.1.0.tar.gz A/AN/ANK/pngwriter/Image-PNGwriter-0.01.tar.gz A/AN/ANPARKER/mikrotik/MikroTik-Client-v0.530.tar.gz A/AN/ANURADHA/Usergrid/Usergrid-Client-0.11.tar.gz A/AN/ANURADHA/Usergrid/Usergrid-Client-0.22.tar.gz A/AS/ASARIH/HPUX-SDUX/HPUX-SDUX-0.03.tar.gz A/AS/ASARIH/IPC-Door/IPC-Door-0.11.tar.gz A/AS/ASCOPE/Net-ITE.pm-0.05.tar.gz A/AW/AWKAY/Apache/Apache-SiteControl-1.01.tar.gz A/AW/AWKAY/Apache2/Apache2-SiteControl-1.05.tar.gz A/AY/AYATES/data/Data-Predicate-2.1.1.tar.gz A/AZ/AZS/graph/Graph-ModularDecomposition-0.15.tar.gz B/BA/BALDR/BioGraph/BioGraph-1.0.0.tar.gz B/BA/BALDR/BioGraph/BioGraph-1.0.1.tar.gz B/BA/BARRYP/Term-GetKey/LibTerm-GetKey-1.02.tar.gz B/BB/BBENNETT/collate/Unicode-Collate-Standard-V3_1_1-0.1.tar.gz B/BB/BBENNETT/dt-fmt-datemanip/DateTime-Format-DateManip-0.04.tar.gz B/BB/BBENNETT/nameday/DateTime-Event-NameDay-0.02.tar.gz B/BE/BERA/Text/Text-Stripper-1.16.tar.gz B/BH/BHUVAN/bhuvan/Dblink-1.0.tar.gz B/BJ/BJEPS/RDBMS.pm-0.93.tar.gz B/BL/BLADE/Class-CompiledC2.21.tgz B/BL/BLAKEW/Games-Tetris-Complete-0.03-withoutworldwriteables.tar.gz B/BL/BLUECURIO/SeqDiff/SeqDiff-v0.1.tar.gz B/BL/BLX/XSDSQL_20130120.tar.gz B/BL/BLX/XSDSQL_20130411.tar.gz B/BM/BMIDD/perl5.00402-bindist04-msvcAlpha.tar.gz B/BO/BOFTX/Fiscal5253/DateTimeX-Fiscal-Fiscal5253-2.01.tar.gz B/BO/BOFTX/Games-Dukedom/Games-Dukedom-v0.1.3.tar.gz B/BO/BOFTX/MooX/MooX-Role-Reconstruct-v0.1.2.tar.gz B/BO/BOFTX/Retail454/DateTime-Fiscal-Retail454-0.03.tar.gz B/BR/BRACETA/AcmeCPANAuthorsPortuguese/Acme-CPANAuthors-Portuguese-0.04.tar.gz B/BR/BRACETA/XML-Hash/XML-Hash-0.95.tar.gz B/BR/BRIAN/psilambdallc/KappaCUDA-1.5.0.tar.gz B/BU/BULKDD/Win32/Acme-Win32-PEPM-0.02.tar.gz B/BU/BULKDD/Win32/Win32-API-0.84.tar.gz B/BU/BULKDD/Win32/Win32-ExeAsDll-0.01.tar.gz B/BU/BULKDD/benchmark/Acme-Shining-0.01.tar.gz B/BU/BULKDD/benchmark/Benchmark-Perl-CoreHashes-0.02.tar.gz B/BU/BULKDD/examples/Example-XS-FasterHashes-0.01.tar.gz B/BW/BWARFIELD/NRGN/Test-AutoLoader-0.03.tar.gz B/BY/BYRNE/SOAP/SOAP-Lite-0.60a.tar.gz B/BY/BYRNE/SOAP/SOAP-MIME-0.55-7.tar.gz C/CA/CAFFIEND/font_ft2_0.1.0.tgz C/CA/CARLOSFB/RT/RT-Authen-Federation-1.2.2.tar.gz C/CA/CARPENTER/Geo-GNUPlot_0.01.tar.gz C/CA/CARPENTER/Storm-Tracker_0.01.tar.gz C/CA/CARPENTER/Storm-Tracker_0.02.tar.gz C/CC/CCOLBOURN/Data-Sync/Data-Sync-0.08.tar.gz C/CC/CCOLBOURN/Text-StripAccents/Text-StripAccents-0.11.tar.gz C/CC/CCOLBOURN/ai-nnflex/AI-NNFlex-0.24.tar.gz C/CD/CDENT/Kwiki/Kwiki-Backlinks-0.10.tar.gz C/CD/CDENT/Kwiki/Kwiki-Blog-0.10.tar.gz C/CD/CDENT/Kwiki/Kwiki-DatedAnnounce-0.01.tar.gz C/CD/CDENT/Kwiki/Kwiki-FetchRSS-0.08.tar.gz C/CD/CDENT/Kwiki/Kwiki-Keywords-0.14.tar.gz C/CD/CDENT/Kwiki/Kwiki-Orphans-0.11.tar.gz C/CD/CDENT/Kwiki/Kwiki-PPerl-0.01.tar.gz C/CD/CDENT/Kwiki/Kwiki-PageStats-0.06.tar.gz C/CD/CDENT/Kwiki/Kwiki-PageTemperature-0.01.tar.gz C/CD/CDENT/Kwiki/Kwiki-Purple-0.04.tar.gz C/CD/CDENT/Kwiki/Kwiki-Raw-0.02.tar.gz C/CD/CDENT/Kwiki/Kwiki-Soap-0.05.tar.gz C/CD/CDENT/Kwiki/Kwiki-Soap-Google-0.04.tar.gz C/CD/CDENT/Kwiki/Kwiki-Technorati-0.04.tar.gz C/CD/CDENT/Kwiki/Kwiki-Test-0.03.tar.gz C/CD/CDENT/Kwiki/Kwiki-Theme-CPB-0.10.tar.gz C/CD/CDENT/Kwiki/Kwiki-Trackback-0.01.tar.gz C/CD/CDENT/Kwiki/Kwiki-Yahoo-0.04.tar.gz C/CD/CDENT/Purple/Purple-1.4.tar.gz C/CD/CDENT/PurpleWiki/PurpleWiki-0.94.tar.gz C/CD/CDENT/TiddlyWeb/TiddlyWeb-Wikrad-0.9.tar.gz C/CG/CGLASS/webservicejamendo/WebService-Jamendo_2.tar.gz C/CH/CHENGYU/circle-chain/Circle-Block-0.05.tar.gz C/CH/CHENGYU/circle-chain/Circle-Chain-0.07.tar.gz C/CH/CHENGYU/circle-chain/Circle-Miner-0.02.tar.gz C/CH/CHENGYU/circle-chain/Circle-Node-0.05.tar.gz C/CH/CHENGYU/circle-chain/Circle-User-0.08.tar.gz C/CH/CHENGYU/circle-chain/Circle-Wallet-0.05.tar.gz C/CH/CHENRYN/NG/NG-0.001.tar.gz C/CH/CHRWIN/acme-pia-export/Acme-PIA-Export-0.019.tar.gz C/CH/CHRWIN/convert-xtext/Convert-XText-0.01.tar.gz C/CH/CHRWIN/date-spoken-german/Date-Spoken-German-0.05.tar.gz C/CJ/CJCOLLIER/AMPRRip44/AMPR-Rip44-0.03.tar.gz C/CJ/CJCOLLIER/Earth-USA-Washington-Cascadia/Earth-USA-Washington-Cascadia-0.01.tar.gz C/CJ/CJCOLLIER/HPSG/HPSG-Mason-0.04.tar.gz C/CJ/CJCOLLIER/Lingua-HPSG/Lingua-HPSG-0.02.tar.gz C/CJ/CJCOLLIER/Lingua-HPSG/Lingua-HPSG-0.03.tar.gz C/CJ/CJCOLLIER/NIST-NVD/NIST-NVD-1.02.01.tar.gz C/CJ/CJCOLLIER/NIST-NVD/NIST-NVD-Store-SQLite3-1.02.00.tar.gz C/CJ/CJCOLLIER/WordPress-Plugin/WordPress-Plugin-WallFlower-0.0.3.tar.gz C/CL/CLADI/SmarTalk_v10.tar.gz C/CL/CLADI/ios_get_interfaces_1.7.tar.gz C/CM/CML/Sendmail_M4.0.29a.tar.gz C/CO/CORLISS/Class-EHierarchy/Class-EHierarchy-2.01.tar.gz C/CO/CORLISS/Net-ICAP/Net-ICAP-0.04.tar.gz C/CO/CORLISS/Paranoid-BerkeleyDB/Paranoid-BerkeleyDB-2.02.tar.gz C/CO/CORLISS/Paranoid-BerkeleyDB/Paranoid-BerkeleyDB-2.06.tar.gz C/CO/CORLISS/Paranoid-Log-Email/Paranoid-Log-Email-2.00.tar.gz C/CO/CORLISS/Paranoid-Log-Syslog/Paranoid-Log-Syslog-2.00.tar.gz C/CO/CORLISS/Paranoid/Paranoid-0.36.tar.gz C/CO/CORLISS/Paranoid/Paranoid-2.10.tar.gz C/CO/CORLISS/Parse-PlainConfig/Parse-PlainConfig-3.07.tar.gz C/CP/CPANPERL/frames/WWW-Mechanize-Frames-0.03.tar.gz C/CP/CPKOIS/ACH/ACH-0.01.tar.gz C/CP/CPKOIS/ACHGenerator/ACH-Generator-0.01.tar.gz C/CP/CPKOIS/ACHParser/ACH-Parser-0.01.tar.gz C/CP/CPKOIS/BluepayBluepay20DailyReport/Bluepay-Bluepay20DailyReport-0.15.tar.gz C/CP/CPKOIS/BluepayBluepay20Post/Bluepay-Bluepay20Post-0.10.tar.gz C/CW/CWELCH/O/B/ObjectRowMap-0.11.tar.gz C/CW/CWHITE/HPUX-FS_0.05.tar.gz C/CW/CWHITE/HPUX-LVM_0.06.tar.gz D/DA/DAROLD/Apache2/ModProxyPerlHtml/Apache2-ModProxyPerlHtml-4.1.tar.gz D/DA/DAVEOLA/Image/Image-BMP-1.26.tar.gz D/DA/DAVEROTH/Win32_AdminMisc_Source_980511.zip D/DA/DAVEROTH/Win32_Tie_Ini_Source_980311.zip D/DA/DAVIDCYL/Syntax-Highlight-Perl-Improved-101/Syntax-Highlight-Perl-Improved-1.01.tar.gz D/DA/DAVIDNICO/AIS/AIS-client-0.07.tar.gz D/DA/DAVIDNICO/Acme/Acme-SvGROW-0.03.tar.gz D/DA/DAVIDNICO/Acme/Acme-landmine-1.00.tar.gz D/DA/DAVIDNICO/Acme/Acme-please-0.01.tar.gz D/DA/DAVIDNICO/Acme/Array-Frugal-0.01.tar.gz D/DA/DAVIDNICO/DBI/DBIx-bind_param_inline-0.03.tar.gz D/DA/DAVIDNICO/DirDB/DirDB-0.12.tar.gz D/DA/DAVIDNICO/DirDB/DirDB-FTP-0.03.tar.gz D/DA/DAVIDNICO/DirDB/DirDB-Storable-0.07.tar.gz D/DA/DAVIDNICO/ParsingPerl/Macrame-0.13.tar.gz D/DA/DAVIDNICO/SMTP/TipJar-MTA-0.34.tar.gz D/DA/DAVIDNICO/SMTP/dateheader-1.0.tar.gz D/DA/DAVIDNICO/Singlethreaded/HTTP-Server-Singlethreaded-0.12.tar.gz D/DA/DAVIDNICO/StateMachines/Graph-Easy-StateMachine-0.07.tar.gz D/DA/DAVIDNICO/handy_tied_functions/Scope-local_OnExit-0.01.tar.gz D/DA/DAVIDNICO/handy_tied_functions/Tie-Alias-1.01.tar.gz D/DA/DAVIDNICO/handy_tied_functions/Tie-Function-0.02.tar.gz D/DA/DAVIDNICO/handy_tied_functions/Tie-Hash-Cache-MRU-0.02.tar.gz D/DA/DAVIDNICO/handy_tied_functions/Tie-LazyFunction-0.01.tar.gz D/DA/DAVIDNICO/handy_tied_functions/Tie-Quicksort-Lazy-0.04.tar.gz D/DA/DAVIDNICO/handy_tied_functions/Tie-UrlEncoder-0.02.tar.gz D/DA/DAVIDNICO/handy_tied_functions/TipJar-sparse-array-perl-hashbased-0.01.tar.gz D/DA/DAVOR/Statistics-R-IO/Statistics-R-IO-0.101.tar.gz D/DB/DBIALAC/SDP/SDP-0.1.tar.gz D/DB/DBURDICK/BoostGraph/Boost-Graph-1.4.tar.gz D/DB/DBURDICK/ConnectDots/Bio-ConnectDots-1.0.2.tar.gz D/DE/DETI/Net/Net-ENUM-0.3.tar.gz D/DE/DETI/STUN/STUN-RFC_5389-0.1.tar.gz D/DG/DGRAHAM/simpleXMLParse/simplexmlparse_v3.1.tar.gz D/DI/DISSENT/VCSLibCVS/VCS-LibCVS-1.tar.gz D/DM/DMALONE/App-Diskd/App-Diskd-0.01.tar.gz D/DM/DMALONE/Crypt-IDA/Crypt-IDA-0.03.tar.gz D/DM/DMALONE/Math-FastGF2/Math-FastGF2-0.07.tar.gz D/DM/DMALONE/Net-OnlineCode-004/Net-OnlineCode-0.04.tar.gz D/DM/DMITRYSOL/SystemAdministration/Logging/Net-Dev-Tools-SyslogMessage-1.01.tar.gz D/DO/DONANGEL/Chemistry/Chemistry-Harmonia-0.118.tar.gz D/DO/DONANGEL/LaTeX/LaTeX-Replicase-0.031.tar.gz D/DO/DONANGEL/Lingua-RU/Lingua-RU-Numeral-0.071.tar.gz D/DO/DONANGEL/Math/Math-Assistant-0.05.tar.gz D/DO/DOTTK/Domain-Register-TK.2.1.tar.gz D/DR/DRULENSOT/UPS/perl-Hardware-UPS-Perl-0.43.tar.gz D/DU/DUMB/HTML-Form-XSS/HTML-Form-XSS-0.31.tar.gz D/DU/DUMB/HTML-Form-XSS/HTML-Form-XSS-1.tar.gz D/DU/DUMB/Mungo/CGI-Mungo-1.701.tar.gz D/DU/DUMB/Mungo/CGI-Mungo-1.9.tar.gz D/DU/DUMB/Net-GNUDBSearch/Net-GNUDBSearch-1.01.tar.gz D/DU/DUMB/PSGI-Hector/PSGI-Hector-2.0.tar.gz D/DU/DUMB/Plack-App-WebMySQL/Plack-App-WebMySQL-4.01.tar.gz D/DU/DUMB/RT-Extension-MenubarUserTickets/RT-Extension-MenubarUserTickets-1.1.tar.gz D/DV/DVDPOL/Math-Geometry-Planar-1.18-withoutworldwriteables.tar.gz E/EA/EASR/ONTO-PERL/ONTO-PERL-1.35.tar.gz E/EA/EASR/ONTO-PERL/ONTO-PERL-1.45.tar.gz E/ED/EDD/beancounter_0.8.10.tar.gz E/EF/EFORGEOT/HTML-WikiConverter-Txt2tags-004/HTML-WikiConverter-Txt2tags-0.04.tar.gz E/EG/EGERMAN/GPS_Poi_0.01.tar.gz E/EH/EHASTINGS/EBI-FGPT-FuzzyRecogniser_0.09.tar.gz E/EH/EHOOD/perlSGML.1997Sep18.tar.gz E/EI/EIJABB/MARC-Lint_1.53.tar.gz E/EI/EIM/WWW-SMS/WWW-SMS-0.09.tar.gz E/EI/EISELEKD/sparse-decpp/C-sparse-0.05.tar.gz E/EI/EISELEKD/sparse-decpp/C-sparse-0.07.tar.gz E/EM/EMORISSE/Statistics-SPC.v0.1.tar.gz E/EN/ENOOR/TaskForest/TaskForest-1.37.tar.gz E/ET/ETWOECMA/MRS/promessaging-MRS-1.01.tar.gz E/EW/EWILHELM/Drawing/CAD-Drawing-0.10.tar.gz E/EW/EWILHELM/Math/Math-Geometry-Planar-GPC-Polygon-0.05.tar.gz F/FA/FANSIPANS/CouchDB-ExternalProcess/CouchDB-ExternalProcess-0.02.tar.gz F/FA/FANTASMA/PDL-Dims/PDL-Dims-0.019.tar.gz F/FA/FANTASMA/PDL-IO-Dcm/PDL-IO-Dcm-1.011.tar.gz F/FA/FANTASMA/PDL-IO-Nifti/PDL-IO-Nifti-0.73.tar.gz F/FC/FCO/App-Rad-Plugin-TT/App-Rad-Plugin-TT-0.2.tar.gz F/FE/FELIXK/Bio/RNA/BarMap/Bio-RNA-BarMap-0.04.tar.gz F/FE/FELIXK/Bio/RNA/BarMap/Bio-RNA-Treekin-0.05.tar.gz F/FE/FELIXK/Bio/RNA/Barriers/Bio-RNA-Barriers-0.03.tar.gz F/FE/FELIXL/vptk/vptk_w_2_42b.tgz F/FE/FERZ/Commercial_Software_Interfaces/Conductrics-Client-0.003.tar.gz F/FL/FLOWERYSO/SmugMug/WWW-SmugMug-API-1.03.tar.gz F/FO/FOOF/libao-perl_0.03-1.tar.gz G/GA/GAAS/GAAS/Unicode-String-2.10.tar.gz G/GA/GABOR/Text-Format0.52+NWrap0.11.tar.gz G/GA/GABY/EasyDB.0.5b2.tgz G/GA/GARAFOLA/Solr/Solr-0.03.tar.gz G/GB/GBOSS/perl_archie.1.5.tar.gz G/GB/GBOUGARD/FusionInventory-Agent_2.6.tar.gz G/GL/GLENSMALL/Perl56/Win32-PerfMon.0.07-Perl5.6.zip G/GO/GODE/Crypt/Crypt-Present-0.02.tar.gz G/GO/GONZUS/JavaScript-Duktape-XS-0000081targz/JavaScript-Duktape-XS-0.000081.tar.gz G/GO/GOOZBACH/asterisk-store/Asterisk-Store-Queue-0.1.tar.gz G/GO/GOOZBACH/asterisk-store/Asterisk-Store-Queue-Member-0.1.tar.gz G/GO/GOYALI/SMS_API_4.01.1.tar.gz G/GR/GRANDPA/AI-ParticleSwarmOptimization/AI-ParticleSwarmOptimization-1.006.tar.gz G/GR/GRANDPA/HTML-Normalize/HTML-Normalize-1.0004.tar.gz G/GR/GRANDPA/Video-Dumper-QuickTime/Video-Dumper-QuickTime-1.0005.tar.gz G/GR/GRANDPA/Win32-MSI-HighLevel/Win32-MSI-HighLevel-1.0008.tar.gz G/GR/GRANDPA/Win32-PEFile/Win32-PEFile-0.7008.tar.gz G/GR/GRM/CamelPKI/App-CamelPKI-0.07.tar.gz H/HA/HANENKAMP/Class-DBI-DDL/Class-DBI-DDL-1.01.tar.gz H/HA/HANENKAMP/Class-Hash/Class-Hash-1.01.tar.gz H/HA/HANENKAMP/SPOPS/SPOPSx-Tool-DateTime-0.02.tar.gz H/HA/HANENKAMP/SPOPS/SPOPSx-Tool-YAML-0.03.tar.gz H/HA/HANENKAMP/Tie-Filter/Tie-Filter-1.02.tar.gz H/HA/HANENKAMP/Tree-BPTree/Tree-BPTree-1.07.tar.gz H/HA/HARPREET/XMS-MotifSetv1.0.tar.gz H/HC/HCAMP/ESplit1.00.zip H/HE/HESSU/POCSAG/POCSAG-Encode-1.00.tar.gz H/HI/HINNERK/PerlIDS/CGI-IDS-1.0217.tar.gz H/HI/HINNERK/StripTags/HTML-StripTags-1.01.tar.gz H/HO/HOREA/File-RoundRobin/File-RoundRobin-0.07.tar.gz H/HO/HOREA/Log-Log4perl/Log-Log4perl-Appender-File-FixedSize-0.01.tar.gz H/HO/HOREA/Mojolicious/Mojolicious-Plugin-WWWSession-0.06.tar.gz H/HO/HOREA/RPi-PIGPIO/RPi-PIGPIO-0.017.tar.gz H/HO/HOREA/WWW-Session/WWW-Session-0.12.tar.gz I/IK/IKALLEN/WebService-Technorati/WebService-Technorati-0.02.tar.gz I/IK/IKALLEN/WebService-Technorati/WebService-Technorati-0.04.tar.gz I/IK/IKALLEN/XMLXOXO/XML-XOXO-0.03.tar.gz I/IL/ILYAZ/modules/Audio-FindChunks-2.03.zip I/IL/ILYAZ/modules/Bundle-OS2_default-1.07.tar.gz I/IL/ILYAZ/modules/Data-Flow-1.02.tar.gz I/IL/ILYAZ/modules/Devel-RegExp-0.1.tar.gz I/IL/ILYAZ/modules/DoubleBlind-0.01.tar.gz I/IL/ILYAZ/modules/FileSystem-LL-FAT-0.05.tar.gz I/IL/ILYAZ/modules/FreezeThaw-0.5001.tar.gz I/IL/ILYAZ/modules/Image-Bitmap2Paths-0.01.tar.gz I/IL/ILYAZ/modules/MP3-Splitter-0.04.tar.gz I/IL/ILYAZ/modules/MP3-Tag-0.9713.tar.gz I/IL/ILYAZ/modules/MP3-Tag-1.13.tar.gz I/IL/ILYAZ/modules/MP3-Tag-1.16.zip I/IL/ILYAZ/modules/Math-Pari-2.030528.tar.gz I/IL/ILYAZ/modules/Net-ChooseFName-0.01.tar.gz I/IL/ILYAZ/modules/Numeric-LL_Array-0.1504.tar.gz I/IL/ILYAZ/modules/Run-0.03.tar.gz I/IL/ILYAZ/modules/SOM-0.0601.zip I/IL/ILYAZ/modules/SelfUnzip-0.01.zip I/IL/ILYAZ/modules/Softref-0.02.tar.gz I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip I/IL/ILYAZ/modules/Term-ReadLine-Perl-1.0303.tar.gz I/IL/ILYAZ/modules/Text-Trie-0.21.tar.gz I/IL/ILYAZ/modules/UI-KeyboardLayout-0.7901-try1.zip I/IL/ILYAZ/modules/c_plus_plus-0.1.tar.gz I/IL/ILYAZ/modules/etext/etext.1.6.3.zip I/IL/ILYAZ/os2/OS2-FTP-0_10.zip I/IL/ILYAZ/os2/OS2-Proc-0.02.tar.gz I/IL/ILYAZ/os2/OS2-SoftInstaller-0.09.tar.gz I/IL/ILYAZ/os2/OS2-UPM-0_10.zip I/IL/ILYAZ/os2/OS2-WinObject-0.02.tar.gz I/IL/ILYAZ/os2/tk/Bundle-Tk_OS2src-1.00.tar.gz I/IL/ILYAZ/os2/tk/Tk-OS2src-1.04.zip I/IN/INA/App/GhostWork/App-GhostWork-0.06.tar.gz I/IN/INA/App/japerl/App-japerl-0.15.tar.gz I/IN/INA/Arabic/Arabic-1.22.tar.gz I/IN/INA/Big5/Big5-1.22.tar.gz I/IN/INA/Big5HKSCS/Big5HKSCS-1.22.tar.gz I/IN/INA/CP932/R2/CP932-R2-0.07.tar.gz I/IN/INA/CP932IBM/R2/CP932IBM-R2-0.07.tar.gz I/IN/INA/CP932NEC/R2/CP932NEC-R2-0.07.tar.gz I/IN/INA/CP932X/R2/CP932X-R2-0.07.tar.gz I/IN/INA/Char/Arabic/Char-Arabic-1.02.tar.gz I/IN/INA/Char/Arabic/Char-Arabic-1.15.tar.gz I/IN/INA/Char/Big5HKSCS/Char-Big5HKSCS-1.02.tar.gz I/IN/INA/Char/Big5HKSCS/Char-Big5HKSCS-1.15.tar.gz I/IN/INA/Char/Big5Plus/Char-Big5Plus-1.02.tar.gz I/IN/INA/Char/Big5Plus/Char-Big5Plus-1.15.tar.gz I/IN/INA/Char/Cyrillic/Char-Cyrillic-1.02.tar.gz I/IN/INA/Char/Cyrillic/Char-Cyrillic-1.15.tar.gz I/IN/INA/Char/EUCJP/Char-EUCJP-1.02.tar.gz I/IN/INA/Char/EUCJP/Char-EUCJP-1.15.tar.gz I/IN/INA/Char/EUCTW/Char-EUCTW-1.02.tar.gz I/IN/INA/Char/EUCTW/Char-EUCTW-1.15.tar.gz I/IN/INA/Char/GB18030/Char-GB18030-1.02.tar.gz I/IN/INA/Char/GB18030/Char-GB18030-1.15.tar.gz I/IN/INA/Char/GBK/Char-GBK-1.02.tar.gz I/IN/INA/Char/GBK/Char-GBK-1.15.tar.gz I/IN/INA/Char/Greek/Char-Greek-1.02.tar.gz I/IN/INA/Char/Greek/Char-Greek-1.15.tar.gz I/IN/INA/Char/HP15/Char-HP15-1.02.tar.gz I/IN/INA/Char/HP15/Char-HP15-1.15.tar.gz I/IN/INA/Char/Hebrew/Char-Hebrew-1.02.tar.gz I/IN/INA/Char/Hebrew/Char-Hebrew-1.15.tar.gz I/IN/INA/Char/INFORMIXV6ALS/Char-INFORMIXV6ALS-1.02.tar.gz I/IN/INA/Char/INFORMIXV6ALS/Char-INFORMIXV6ALS-1.15.tar.gz I/IN/INA/Char/JIS8/Char-JIS8-1.02.tar.gz I/IN/INA/Char/JIS8/Char-JIS8-1.15.tar.gz I/IN/INA/Char/KOI8R/Char-KOI8R-1.02.tar.gz I/IN/INA/Char/KOI8R/Char-KOI8R-1.15.tar.gz I/IN/INA/Char/KOI8U/Char-KOI8U-1.02.tar.gz I/IN/INA/Char/KOI8U/Char-KOI8U-1.15.tar.gz I/IN/INA/Char/KPS9566/Char-KPS9566-1.02.tar.gz I/IN/INA/Char/KPS9566/Char-KPS9566-1.15.tar.gz I/IN/INA/Char/Latin1/Char-Latin1-1.02.tar.gz I/IN/INA/Char/Latin1/Char-Latin1-1.15.tar.gz I/IN/INA/Char/Latin10/Char-Latin10-1.02.tar.gz I/IN/INA/Char/Latin10/Char-Latin10-1.15.tar.gz I/IN/INA/Char/Latin2/Char-Latin2-1.02.tar.gz I/IN/INA/Char/Latin2/Char-Latin2-1.15.tar.gz I/IN/INA/Char/Latin3/Char-Latin3-1.02.tar.gz I/IN/INA/Char/Latin3/Char-Latin3-1.15.tar.gz I/IN/INA/Char/Latin4/Char-Latin4-1.02.tar.gz I/IN/INA/Char/Latin4/Char-Latin4-1.15.tar.gz I/IN/INA/Char/Latin5/Char-Latin5-1.02.tar.gz I/IN/INA/Char/Latin5/Char-Latin5-1.15.tar.gz I/IN/INA/Char/Latin6/Char-Latin6-1.02.tar.gz I/IN/INA/Char/Latin6/Char-Latin6-1.15.tar.gz I/IN/INA/Char/Latin7/Char-Latin7-1.02.tar.gz I/IN/INA/Char/Latin7/Char-Latin7-1.15.tar.gz I/IN/INA/Char/Latin8/Char-Latin8-1.02.tar.gz I/IN/INA/Char/Latin8/Char-Latin8-1.15.tar.gz I/IN/INA/Char/Latin9/Char-Latin9-1.02.tar.gz I/IN/INA/Char/Latin9/Char-Latin9-1.15.tar.gz I/IN/INA/Char/OldUTF8/Char-OldUTF8-1.02.tar.gz I/IN/INA/Char/OldUTF8/Char-OldUTF8-1.15.tar.gz I/IN/INA/Char/Sjis/Char-Sjis-1.02.tar.gz I/IN/INA/Char/Sjis/Char-Sjis-1.15.tar.gz I/IN/INA/Char/TIS620/Char-TIS620-1.02.tar.gz I/IN/INA/Char/TIS620/Char-TIS620-1.15.tar.gz I/IN/INA/Char/UHC/Char-UHC-1.02.tar.gz I/IN/INA/Char/UHC/Char-UHC-1.15.tar.gz I/IN/INA/Char/USASCII/Char-USASCII-1.02.tar.gz I/IN/INA/Char/USASCII/Char-USASCII-1.15.tar.gz I/IN/INA/Char/UTF2/Char-UTF2-1.02.tar.gz I/IN/INA/Char/UTF2/Char-UTF2-1.15.tar.gz I/IN/INA/Char/Windows1252/Char-Windows1252-1.02.tar.gz I/IN/INA/Char/Windows1252/Char-Windows1252-1.15.tar.gz I/IN/INA/Char/Windows1258/Char-Windows1258-1.02.tar.gz I/IN/INA/Char/Windows1258/Char-Windows1258-1.15.tar.gz I/IN/INA/Cyrillic/Cyrillic-1.22.tar.gz I/IN/INA/DBD/PgPPSjis/DBD-PgPPSjis-0.0801008.tar.gz I/IN/INA/DBD/mysqlPPrawSjis/DBD-mysqlPPrawSjis-0.16.tar.gz I/IN/INA/Fake/Encode/Fake-Encode-0.11.tar.gz I/IN/INA/Fake/Our/Fake-Our-0.12.tar.gz I/IN/INA/Fake/Our/Fake-Our-0.17.tar.gz I/IN/INA/GBK/GBK-1.22.tar.gz I/IN/INA/Greek/Greek-1.22.tar.gz I/IN/INA/IOas/CP932/IOas-CP932-0.10.tar.gz I/IN/INA/IOas/CP932IBM/IOas-CP932IBM-0.10.tar.gz I/IN/INA/IOas/CP932NEC/IOas-CP932NEC-0.10.tar.gz I/IN/INA/IOas/CP932X/IOas-CP932X-0.10.tar.gz I/IN/INA/IOas/SJIS2004/IOas-SJIS2004-0.10.tar.gz I/IN/INA/Jacode/Jacode-2.13.4.31.tar.gz I/IN/INA/Jacode4e/Jacode4e-2.13.6.21.tar.gz I/IN/INA/Jacode4e/RoundTrip/Jacode4e-RoundTrip-2.13.81.14.tar.gz I/IN/INA/KOI8R/KOI8R-1.22.tar.gz I/IN/INA/KOI8U/KOI8U-1.22.tar.gz I/IN/INA/KPS9566/KPS9566-1.22.tar.gz I/IN/INA/KSC5601/KSC5601-1.22.tar.gz I/IN/INA/Latin1/Latin1-1.22.tar.gz I/IN/INA/Latin10/Latin10-1.22.tar.gz I/IN/INA/Latin2/Latin2-1.22.tar.gz I/IN/INA/Latin3/Latin3-1.22.tar.gz I/IN/INA/Latin4/Latin4-1.22.tar.gz I/IN/INA/Latin5/Latin5-1.22.tar.gz I/IN/INA/Latin6/Latin6-1.22.tar.gz I/IN/INA/Latin7/Latin7-1.22.tar.gz I/IN/INA/Latin8/Latin8-1.22.tar.gz I/IN/INA/Latin9/Latin9-1.22.tar.gz I/IN/INA/Modern/Open/Modern-Open-0.14.tar.gz I/IN/INA/Perl/Exactly/Perl-Exactly-0.07.tar.gz I/IN/INA/Perl7/Handy/Perl7-Handy-0.11.tar.gz I/IN/INA/SJIS2004/R2/SJIS2004-R2-0.07.tar.gz I/IN/INA/See/See-0.01.tar.gz I/IN/INA/Sjis/Sjis-1.22.tar.gz I/IN/INA/Stable/Module/Stable-Module-0.11.tar.gz I/IN/INA/Strict/Perl/Strict-Perl-2023.03.tar.gz I/IN/INA/UTF2/UTF2-1.22.tar.gz I/IN/INA/UTF8/R2/UTF8-R2-0.28.tar.gz I/IN/INA/Windows1250/Windows1250-1.23.tar.gz I/IN/INA/Windows1252/Windows1252-1.22.tar.gz I/IN/INA/Windows1254/Windows1254-1.23.tar.gz I/IN/INA/Windows1257/Windows1257-1.23.tar.gz I/IN/INA/Windows1258/Windows1258-1.22.tar.gz I/IN/INA/mb/Encode/mb-Encode-0.04.tar.gz I/IN/INA/mb/JSON/mb-JSON-0.03.tar.gz I/IN/INA/mb/mb-0.58.tar.gz I/IN/INFOFLEX/DBD_SQLFLEX_8.2.tar.gz I/IS/ISJOUNG/Proc-Branch-001/Proc-Branch-0.01.tar.gz I/IT/ITDEV/Tk-PlotDataset/Tk-PlotDataset-2.05.tar.gz I/IV/IVORRACH/Chorus/Chorus-Expert-1.03.tar.gz J/JA/JAE/perlipse/Perlipse-0.02.zip J/JA/JAMES/Class-DBI-Plugin-Calendar-0.18-withoutworldwriteables.tar.gz J/JA/JAMESP/payroll/business-payroll-1.3.tar.gz J/JA/JANESKIL/Tools/Daje-0.05.tar.gz J/JA/JANESKIL/Tools/Daje-Config-0.06.tar.gz J/JA/JANESKIL/Tools/Daje-Database-Migrator-0.01.tar.gz J/JA/JANESKIL/Tools/Daje-Database-Model-0.03.tar.gz J/JA/JANESKIL/Tools/Daje-Generate-Templates-1.04.tar.gz J/JA/JANESKIL/Tools/Daje-Plugin-Apploader-0.02.tar.gz J/JA/JANESKIL/Tools/Daje-Plugin-Login-0.02.tar.gz J/JA/JANESKIL/Tools/Daje-Plugin-Signup-0.02.tar.gz J/JA/JANESKIL/Tools/Daje-Plugin-Tools-0.03.tar.gz J/JA/JANESKIL/Tools/Daje-Plugin-workflow-0.04.tar.gz J/JA/JANESKIL/Tools/Daje-Tools-Datasections-0.11.tar.gz J/JA/JANESKIL/Tools/Daje-Tools-Filechanged-0.02.tar.gz J/JA/JANESKIL/Tools/Daje-Tools-JWT-0.01.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-0.02.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-0.10.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Client-Activity-0.03.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Common-Base-0.03.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Config-0.02.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Database-0.04.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Database-0.19.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Database-Model-0.16.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-FileChanged-Activity-0.03.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-GeneratePerl-Activity-0.12.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-GenerateSQL-Activity-0.03.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-GenerateSQL-Activity-1.07.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-GenerateSchema-Activity-0.16.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Loader-0.04.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Loader-0.13.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Savefile-Activity-1.10.tar.gz J/JA/JANESKIL/Tools/Daje-Workflow-Templates-0.02.tar.gz J/JA/JASKA/IRC/Crypt/IRC-Crypt-0.01.tar.gz J/JC/JCB/WARC/WARC-v0.0.1.tar.gz J/JC/JCLINE/Robotics-023/Robotics-0.23.tar.bz2 J/JC/JCNORTON/LanguageLogo/Language-Logo-1.000.tar.gz J/JE/JEFFMOCK/GPIB_0_30.tgz J/JH/JHALLOCK/Gapp-0.26-withoutworldwriteables.tar.gz J/JH/JHALLOCK/Gtk2-Ex-FormFactory-TimeEntry-0.02-withoutworldwriteables.tar.gz J/JH/JHALLOCK/Storm-0.03-withoutworldwriteables.tar.gz J/JH/JHELBERG/lanman.1.0.10.0.zip J/JH/JHIVER/Unicode-Transliterate.0.3.tgz J/JK/JKING/thrift/Thrift-0.22.0.tar.gz J/JK/JKING/thrift/Thrift-0.9.3.tar.gz J/JM/JMAHAN/iodbc_ext_0_1.tar.gz J/JM/JMCADA/dbix_mypassword/DBIx-MyPassword-1.02.tar.gz J/JM/JMCADA/net_bittorrent/Net-BitTorrent-PeerPacket-1.2.tar.gz J/JM/JMCADA/weather/Weather-NWS-0.02.tar.gz J/JM/JMCADA/xml_rai_enclosure/XML-RAI-Enclosure-1.02.tar.gz J/JM/JMEHNLE/apache-auth-userdb/Apache-Auth-UserDB-v0.120.tar.gz J/JM/JMEHNLE/clamav-client/ClamAV-Client-0.11.tar.gz J/JM/JMEHNLE/courier-filter/Courier-Filter-v0.200.tar.gz J/JM/JMEHNLE/mail-spf-query/Mail-SPF-Query-1.999.1.tar.gz J/JM/JMEHNLE/mail-spf-test/Mail-SPF-Test-v1.001.tar.gz J/JM/JMEHNLE/net-address-ip-local/Net-Address-IP-Local-0.1.2.tar.gz J/JM/JMEHNLE/net-address-ipv4-local/Net-Address-IPv4-Local-0.12.tar.gz J/JM/JMEHNLE/www-restaurant-menu/WWW-Restaurant-Menu-0.11.tar.gz J/JM/JMS/EdgeExpressDB_0.953h.tar.gz J/JM/JMS/MQdb_0.954.tar.gz J/JO/JOEYATES/Database/Wrapper/Database-Wrapper-1.04.tar.gz J/JO/JONG/Bioinf_V2.0.tar.gz J/JO/JONIONS/PANT/PANT-0.17.tar.gz J/JO/JORDAN/Doxygen-Filter-Perl/doxygen-filter-perl-1.73-2.tar.gz J/JO/JORDAN/Term-RouterCLI/Term-RouterCLI-1.00.tar.gz J/JO/JORVIS/Log-Cabin/Log-Cabin-0.06.tar.gz J/JO/JORVIS/TIGR/TIGR-0.03.tar.gz J/JU/JULVR/Parse/Preprocessor/App-UnifdefPlus-0.005.005.tar.gz J/JW/JWHITE/SlideMap/SlideMap-1.4.tar.gz J/JW/JWU/File-Mirror/File-Mirror-0.01.tar.gz J/JW/JWU/File-Mirror/File-Mirror-0.10.tar.gz J/JW/JWU/RPC-Object/RPC-Object-0.04.tar.gz J/JW/JWU/RPC-Object/RPC-Object-0.23.tar.gz J/JW/JWU/RPC-Object/RPC-Object-0.31.tar.gz J/JW/JWU/Thread-Pool-Simple/Thread-Pool-Simple-0.25.tar.gz K/KA/KARB/dataware/Tie-PagedArray-0.0.3.tar.gz K/KA/KARJALA/Pavatar/Net-Pavatar-1.01.tar.gz K/KA/KARTHIKU/Number-Convert.1.0.2.tar.gz K/KE/KEVIN/AuthenRadius/Apache2-AuthenRadius-0.9.tar.gz K/KE/KEVIN/Net-Autoconfig/Net-Autoconfig-v1.13.2.tar.gz K/KI/KIAVASH/kateb/kateb-1.1.0.tar.gz K/KI/KIAVASH/mira/Mira-00.07.56.tar.gz K/KI/KIAVASH/text/Text-Markmoredown-0.000036.tar.gz K/KI/KIWIROY/tmp/Alien-KentSrc-0.4.tar.gz K/KI/KIWIROY/tmp/Alien-MUSCLE-0.01.tar.gz K/KI/KIWIROY/tmp/Devel-IPerl-Plugin-EnvironmentModules-0.03.tar.gz K/KI/KIWIROY/tmp/Devel-IPerl-Plugin-Perlbrew-0.03.tar.gz K/KI/KIWIROY/tmp/Mojo-File-Role-Extension-0.02.tar.gz K/KI/KIWIROY/tmp/Mojo-Path-Role-Relative-0.01.tar.gz K/KI/KIWIROY/tmp/Mojo-Transaction-HTTP-Role-Mechanize-0.06.tar.gz K/KI/KIWIROY/tmp/Test-Applify-0.02.tar.gz K/KI/KIWIROY/tmp/Test-Applify-0.06.tar.gz K/KM/KMCGRAIL/SpamAssassin/Mail-SpamAssassin-3.4.1.tar.gz K/KO/KOBOLDWIZ/Perl5/Bio-Epithelium-0.1.4.tar.gz K/KO/KOBOLDWIZ/Perl5/Cobol-Compiler-0.1.19.tar.gz K/KO/KOBOLDWIZ/Perl5/DuckCurses-0.1.3.tar.gz K/KO/KOBOLDWIZ/Perl5/DuckCurses-0.1.4.tar.gz K/KO/KOBOLDWIZ/Perl5/Evo-EA-0.1.5.tar.gz K/KO/KOBOLDWIZ/Perl5/Evo-GA-0.1.13.tar.gz K/KO/KOBOLDWIZ/Perl5/Evo-Immune-0.1.11.tar.gz K/KO/KOBOLDWIZ/Perl5/Evo-Inference-0.1.12.tar.gz K/KO/KOBOLDWIZ/Perl5/Evo-Maple-0.1.1.tar.gz K/KO/KOBOLDWIZ/Perl5/Evo-Parser-0.1.24.tar.gz K/KO/KOBOLDWIZ/Perl5/Evo-QUIP-0.1.1.tar.gz K/KO/KOBOLDWIZ/Perl5/GFX-Enhancer-0.1.22.tar.gz K/KO/KOBOLDWIZ/Perl5/Game-NURBS-0.1.13.tar.gz K/KO/KOBOLDWIZ/Perl5/Game-Ninja-0.1.6.tar.gz K/KO/KOBOLDWIZ/Perl5/Game-SDL-0.1.1.tar.gz K/KO/KOBOLDWIZ/Perl5/Lagrange-0.1.6.tar.gz K/KO/KOBOLDWIZ/Perl5/Lagrange-0.1.9.tar.gz K/KO/KOBOLDWIZ/Perl5/Perl-Oberon-0.1.3.tar.gz K/KO/KOBOLDWIZ/Perl5/RogueCurses-0.0.6.tar.gz K/KO/KOBOLDWIZ/Perl5/RogueQuest-0.1.5.tar.gz K/KO/KOBOLDWIZ/Perl5/Stats-Fermi-0.1.2.tar.gz K/KO/KOBOLDWIZ/Perl5/Stats-Fermi-0.1.7.tar.gz K/KO/KOBOLDWIZ/Perl5/Stats-Hawking-0.1.3.tar.gz K/KT/KTORP/Interval.0.01.tar.gz K/KT/KTORP/KTORP/Interval.0.03.tar.gz K/KU/KUNGFUFTR/Match-Any_0.03.tar.gz K/KW/KWMAK/Chart/Gnuplot/Chart-Gnuplot-0.23.tar.gz K/KW/KWMAK/Chart/Gnuplot/Pie/Chart-Gnuplot-Pie-0.04.tar.gz K/KW/KWMAK/PBS/Client/PBS-Client-0.11.tar.gz K/KY/KYLED/ObjectivePerl/ObjectivePerl-0.04.tar.gz L/LA/LABZERONE/tmojo/HTML-Tmojo-0.300.tar.gz L/LE/LEGART/Apache-Gallery-1.0.2-withoutworldwriteables.tar.gz L/LE/LESPAUL/ClearCase/Region/ClearCase-Region-1.01.tar.gz L/LG/LGODDARD/List-Member-0.044-withoutworldwriteables.tar.gz L/LI/LINC/Tie/Tie-ScalarFile-1.12.tar.gz L/LI/LINKDD/Lemonldap/NG/Lemonldap-NG-Cli-0.2.tgz L/LI/LINSALROB/SGE/ScheduleSGE-0.02.tgz L/LS/LSFISV/LSF_PERL_API/LSF_Batch_0.06.tar.gz L/LT/LTBOOTS/test/genomics.01.tar.gz M/MA/MALETIN/Teamspeak/Teamspeak-0.6.tar.gz M/MA/MALUKU/dotiac/Bundle-Dotiac-0.1.tar.gz M/MA/MALUKU/dotiac/Dotiac-0.8.tar.gz M/MA/MALUKU/dotiac/Dotiac-addon-case-insensitive-0.4.tar.gz M/MA/MALUKU/dotiac/Dotiac-addon-html_template-0.4.tar.gz M/MA/MALUKU/dotiac/Dotiac-addon-importloop-0.2.tar.gz M/MA/MALUKU/dotiac/Dotiac-addon-json-0.1.1.tar.gz M/MA/MALUKU/dotiac/Dotiac-addon-jsonify-0.1.tar.gz M/MA/MALUKU/dotiac/Dotiac-addon-markup-0.2.tar.gz M/MA/MALUKU/dotiac/Dotiac-addon-unparsed-0.2.tar.gz M/MA/MALUKU/games-freelancer-utf/FLUTF-1.001.tar.gz M/MA/MALUKU/sofu-config/sofu-config-0.5.tar.gz M/MA/MALUKU/sofu/Sofu-0.3.tar.gz M/MA/MALUKU/sofu/sofu-0.2.9.tar.gz M/MA/MALUKU/tie-multikeyinsertorderhash/tie-multikeyinsertorderhash-0.1.tar.gz M/MA/MALUKU/tie-proxy-changes/Tie-Proxy-Changes-0.2.tar.gz M/MA/MARCB/Net-SMTP-Pipelining/Net-SMTP-Pipelining-0.0.4.tar.gz M/MA/MARCB/POSIX-SchedYield/POSIX-SchedYield-0.0.2.tar.gz M/MA/MARCB/Unix-Lsof/Unix-Lsof-0.1.0.tar.gz M/MA/MARIAB/WWW-TMDB-API0.03.tar.gz M/MA/MARIAB/WWW-TMDB-API0.04.tar.gz M/MA/MARKLE/A2C/Apache2-Controller-v1.1.1.tar.gz M/MA/MARKPF/cisco/Cisco-ShowIPRoute-Parser-1.02.tar.gz M/MA/MARROTTE/LWP-UserAgent-ExponentialBackoff-004/LWP-UserAgent-ExponentialBackoff-0.04.tar.gz M/MA/MATHIAS/App-ArduinoBuilder/App-ArduinoBuilder-0.04.tar.gz M/MA/MATHIAS/App-Pfind/App-Pfind-1.05.tar.gz M/MA/MATHIAS/DataStructure/DataStructure-0.02.tar.gz M/MA/MATHIAS/Dist-Setup/App-ArduinoBuilder-0.08.tar.gz M/MA/MATHIAS/Dist-Setup/App-MediaPi-0.01.tar.gz M/MA/MATHIAS/Dist-Setup/App-PTP-1.13.tar.gz M/MA/MATHIAS/Dist-Setup/App-PTP-1.16.tar.gz M/MA/MATHIAS/Dist-Setup/Dist-Setup-0.16.tar.gz M/MA/MATHIAS/Dist-Setup/Future-IO-Impl-AnyEvent-0.02.tar.gz M/MA/MATHIAS/Dist-Setup/Google-Protobuf-Loader-0.01.tar.gz M/MA/MATHIAS/Dist-Setup/Log-Any-Simple-0.06.tar.gz M/MA/MATHIAS/Dist-Setup/Markdown-Perl-1.10.tar.gz M/MA/MATHIAS/Dist-Setup/Markdown-Perl-1.11.tar.gz M/MA/MATHIAS/Dist-Setup/Music-Harmonica-TabsCreator-1.05.tar.gz M/MA/MATHIAS/Dist-Setup/Parallel-TaskExecutor-0.05.tar.gz M/MA/MATHIAS/Dist-Setup/UserAgent-Any-0.05.tar.gz M/MA/MATHIAS/Dist-Setup/UserAgent-Any-JSON-0.05.tar.gz M/MA/MATHIAS/Eval-Safe/Eval-Safe-0.02.tar.gz M/MA/MATHIAS/Math-Numerical/Math-Numerical-0.05.tar.gz M/MA/MATHIAS/OAuth-Consumer/OAuth-Consumer-0.03.tar.gz M/MA/MATHIAS/SQL-Exec/SQL-Exec-0.09.tar.gz M/MA/MATHIAS/SQL-Exec/SQL-Exec-0.10.tar.gz M/MA/MATHIAS/String-Replace/String-Replace-0.02.tar.gz M/MA/MATHIAS/Test-Subs/Test-Subs-0.08.tar.gz M/MB/MBSTE/MultiCat_0.04.tar.gz M/MB/MBV/mailboxvalidator/MailboxValidator-SingleValidation-2.00.tar.gz M/ME/MELONMAN/PDF-EasyPDF_0_04.tgz M/ME/MEWSOFT/mewsoft/Config-IniMan-1.20.tar.gz M/ME/MEWSOFT/mewsoft/Date-HijriDate-1.01.tar.gz M/ME/MEWSOFT/mewsoft/File-BufferedInput-1.03.tar.gz M/ME/MEWSOFT/mewsoft/MP3-Merge-1.01.tar.gz M/ME/MEWSOFT/mewsoft/Religion-Islam-PrayTime-1.06.tar.gz M/ME/MEWSOFT/mewsoft/Religion-Islam-Quran-2.01.tar.gz M/MF/MFENTON/TimeConvert0.5.zip M/MI/MIKEM/Authen/Authen-ACE4-1.4.tar.gz M/MI/MIKEM/DigestMD4/Digest-MD4-1.9.tar.gz M/MI/MIKI/Apache2/Apache2-BalanceLogic-0.0.1.tar.gz M/MJ/MJEWELL/citeparser/Biblio-Citation-Parser-1.10.tar.gz M/MJ/MJEWELL/docparser/Biblio-Document-Parser-1.10.tar.gz M/MJ/MJFS/CGI/Base64-Serializer_0.1.tar.gz M/MM/MML/Test-HTTP/Test-HTTP-0.22.tar.gz M/MN/MNOONING/PlRPC/PlRPC-0.2020.tar.gz M/MO/MODULO/AppConfig-Exporter/AppConfig-Exporter-1.5.tar.gz M/MO/MODULO/Polyglot/MasonX-Resolver-Polyglot-0.95.tgz M/MO/MODULO/Regexp-Log-Helix/Regexp-Log-Helix-1.04.tar.gz M/MP/MPREWITT/listgroup/Net-NIS-Listgroup-1.0.0.tar.gz M/MP/MPREWITT/net-smtp-retryable/Net-SMTP-Retryable-0.0.2.tar.gz M/MT/MTADEL/Getopt-FileConfig/Getopt-FileConfig-1.0001.tar.gz M/MU/MUIR/modules/BSD-Ipfwgen-1.5.tar.gz M/MU/MUIR/modules/CGI-Out-2006.0215.tar.gz M/MU/MUIR/modules/Callback-1.07.tar.gz M/MU/MUIR/modules/Cisco-Reconfig-0.912.tar.gz M/MU/MUIR/modules/Config-Checker-0.42.tar.gz M/MU/MUIR/modules/Daemon-Generic-0.85.tar.gz M/MU/MUIR/modules/Devel-FileProfile-0.22.tar.gz M/MU/MUIR/modules/File-BasicFlock-98.1202.tar.gz M/MU/MUIR/modules/File-Flock-2014.01.tar.gz M/MU/MUIR/modules/File-OldSlurp-2004.0430.tar.gz M/MU/MUIR/modules/File-RdistByRsync-0.3.tar.gz M/MU/MUIR/modules/File-Slurp-Remote-0.44.tar.gz M/MU/MUIR/modules/Getopt-Tiny-1.02.tar.gz M/MU/MUIR/modules/HTML-Transmorgify-0.12.tar.gz M/MU/MUIR/modules/IO-Event-0.704.tar.gz M/MU/MUIR/modules/IO-Event-0.813.tar.gz M/MU/MUIR/modules/List-EvenMore-0.11.tar.gz M/MU/MUIR/modules/Log-Parallel-0.303.tar.gz M/MU/MUIR/modules/Mail-SendVarious-0.4.tar.gz M/MU/MUIR/modules/Net-SMTP-Receive-0.301.tar.gz M/MU/MUIR/modules/OOPS-0.1008.tar.gz M/MU/MUIR/modules/OOPS-0.2005.tar.gz M/MU/MUIR/modules/Object-Dependency-0.41.tar.gz M/MU/MUIR/modules/Object-Transaction-1.01.tar.gz M/MU/MUIR/modules/Plugins-0.41.tar.gz M/MU/MUIR/modules/Proc-Forkfunc-96.042201.tar.gz M/MU/MUIR/modules/Proc-JobQueue-0.903.tar.gz M/MU/MUIR/modules/Proc-Parallel-0.601.tar.gz M/MU/MUIR/modules/Qpsmtpd-Plugin-Quarantine-1.02.tar.gz M/MU/MUIR/modules/Sort-MergeSort-0.31.tar.gz M/MU/MUIR/modules/Stream-Aggregate-0.406.tar.gz M/MU/MUIR/modules/String-CRC-1.0.tar.gz M/MU/MUIR/modules/SyslgScnDamn-Blacklist-0.44.tar.gz M/MU/MUIR/modules/SyslogScan-Daemon-0.41.tar.gz M/MU/MUIR/modules/SyslogScan-Daemon-SpamDetector-0.56.tar.gz M/MU/MUIR/modules/Test-MultiFork-0.6.tar.gz M/MU/MUIR/modules/Time-ParseDate-2015.103.tar.gz M/MU/MUIR/modules/Twiki-Upload-0.3.tar.gz M/MU/MUNROER/kif/kif-1.02.tar.gz M/MU/MUNROER/kif/kif-2.01.tar.gz M/MU/MUNROER/stanzafile/StanzaFile-1.05.tar.gz M/MV/MVOELKER/FTDI/FTDI-D2XX-0.06.tar.gz N/NA/NANARDON/VFSsimple/VFSsimple-0.03.tar.gz N/NA/NANARDON/VFSsimple/VFSsimple-Drv-File-0.03.tar.gz N/NA/NANARDON/VFSsimple/VFSsimple-Drv-Ftp-0.03.tar.gz N/NA/NANARDON/VFSsimple/VFSsimple-Drv-Http-0.03.tar.gz N/NA/NANARDON/VFSsimple/VFSsimple-Drv-Iso-0.03.tar.gz N/NA/NANARDON/VFSsimple/VFSsimple-Drv-Rsync-0.03.tar.gz N/NA/NARAZAKA/Config-Column/Config-Column-1.00.tar.gz N/NA/NARAZAKA/SQL-Object-Interp/SQL-Object-Interp-0.04.tar.gz N/NC/NCICB/CaCORE/CaCORE-3.2.1_r1.tar.gz N/NE/NEVES/text-histogram/Text-Histogram-0.01.tar.gz N/NH/NHARALE/File-ReadSimple.1.1.tar.gz O/OL/OLEGS/Perl-Data-Enumerable-Lazy/Data-Enumerable-Lazy-0.032.tar.gz O/OL/OLIVIERT/LogValidator/W3C-LogValidator-0.1.tar.gz O/OL/OLIVIERT/LogValidator/W3C-LogValidator-1.5.tar.gz O/OL/OLIVIERT/WebService/WebService-Validator-Feed-W3C-0.8.tar.gz O/OL/OLIVIERT/XHTML/W3C-XHTML-HTMLCompatChecker-0.10.tar.gz P/PA/PARDUS/Term-ReadLine-Zoid/Term-ReadLine-Zoid-0.07.tar.gz P/PA/PAULDOOM/Apache-AppSamurai/Apache-AppSamurai-1.01.tar.gz P/PE/PEASWORTH/CayleyDickson/CayleyDickson-0.01.tgz P/PE/PEASWORTH/FinanceBitStampAPI/Finance-BitStamp-API-0.01.tar.gz P/PE/PEASWORTH/FinanceBitStampAPI/Finance-BitStamp-API-0.02.tar.gz P/PE/PEASWORTH/FinanceBitStampSocket/Finance-BitStamp-Socket-0.02.tar.gz P/PE/PEASWORTH/FinanceCaVirtexAPI/Finance-CaVirtex-API-0.03.tar.gz P/PE/PEASWORTH/FinanceLocalBitcoinsAPI/Finance-LocalBitcoins-API-0.02.tar.gz P/PE/PEASWORTH/Tangle/Tangle-0.03.tar.gz P/PE/PETERGAL/PGForth1.0.tar.gz P/PE/PETERGAL/PGForth1.3.tar.gz P/PE/PETERHI/AI-ExpertSystem-Simple.1.2.tgz P/PE/PETERSHAW/Told-Client/Told-Client-0.001.tar.gz P/PH/PHILOU/NCAR/NCAR-0.01.tar.gz P/PH/PHOENIXL/expr_eval_1_0.zip P/PH/PHOENIXL/extensible_report_generator_1.13.zip P/PJ/PJFL/class-usul/Class-Usul-0.84.1.tar.gz P/PJ/PJFL/data-cloudweights/Data-CloudWeights-0.15.1.tar.gz P/PJ/PJFL/data-validation/Data-Validation-0.28.1.tar.gz P/PJ/PJFL/devel-cover-report-ownserver/Devel-Cover-Report-OwnServer-0.4.1.tar.gz P/PJ/PJFL/dist-zilla-plugin-abstractfrompod/Dist-Zilla-Plugin-AbstractFromPOD-0.3.1.tar.gz P/PJ/PJFL/dist-zilla-plugin-manifestinroot/Dist-Zilla-Plugin-ManifestInRoot-0.16.1.tar.gz P/PJ/PJFL/dist-zilla-plugin-test-reportmetadata/Dist-Zilla-Plugin-Test-ReportMetadata-0.5.1.tar.gz P/PJ/PJFL/file-dataclass/File-DataClass-0.73.1.tar.gz P/PJ/PJFL/file-gettext/File-Gettext-0.33.1.tar.gz P/PJ/PJFL/ipc-srlock/IPC-SRLock-0.31.1.tar.gz P/PJ/PJFL/module-provision/Module-Provision-0.42.1.tar.gz P/PJ/PJFL/unexpected/Unexpected-1.0.1.tar.gz P/PJ/PJFL/web-components-role-email/Web-Components-Role-Email-0.3.1.tar.gz P/PJ/PJFL/web-components-role-tt/Web-Components-Role-TT-0.8.1.tar.gz P/PJ/PJFL/web-components/Web-Components-0.13.1.tar.gz P/PJ/PJFL/web-composablerequest/Web-ComposableRequest-0.22.1.tar.gz P/PJ/PJFL/yakuake-sessions/Yakuake-Sessions-0.15.1.tar.gz P/PK/PKALUSKI/LRpt_0.16.tar.gz P/PM/PMAREK/DigestManberHash/Digest-ManberHash-0.7.tar.gz P/PM/PMAREK/Games/Hack/Patch/Games-Hack-Patch-i686-0.52.tar.gz P/PM/PMAREK/Games/Hack/Patch/Games-Hack-Patch-x86_64-0.13.tar.gz P/PM/PMAREK/Win32/MSI/Win32-MSI-DB-1.06.tar.gz P/PO/PORTON/DBI/DBI-Transaction-0.101.tar.gz P/PT/PTANDLER/PBib/Bundle-PBib-2.08.01.tar.gz P/PT/PTANDLER/PBib/Bundle-PBib-2.08.tar.gz P/PT/PTHOMSEN/BoxBackup/BBConfig-0.03.tar.gz R/RA/RAYNERLUC/Finance-Bank-Halifax-Sharedealing/Finance-Bank-Halifax-Sharedealing-0.03.tar.gz R/RC/RCALEY/speech_pm_1.0.tgz R/RC/RCHIBOIS/Pots/Pots-0.01.tar.gz R/RE/REENDERSF/App-NetdiscoX-Web-Plugin-GraphLinkSwitch_0.1.tar.gz R/RE/RETOH/CMS/CMS-MediaWiki-0.8014.tar.gz R/RE/RETOH/Geo/Geo-Query-0.04.tar.gz R/RE/RETOH/Geo/Geo-Query-LatLong-0.8011.tar.gz R/RE/RETOH/Template/Website-1.14.01.tar.gz R/RH/RHASE/Tivoli_0.01.tar.gz R/RI/RINGERC/RT/Extension/PushoverNotify/RT-Extension-PushoverNotify-0.01.tar.gz R/RI/RINGERC/RT/Extension/SMSNotify/RT-Extension-SMSNotify-1.04.tar.gz R/RI/RINGERC/RT/Extension/ShiftPlanning/RT-Extension-ShiftPlanning-0.01.tar.gz R/RI/RINGERC/SMS/Send/RedOxygen/SMS-Send-RedOxygen-1.06.tar.gz R/RI/RINGERC/WebService/ShiftPlanning/WebService-ShiftPlanning-0.01.tar.gz R/RJ/RJB/SMcli/SANtricity-SMcli-0.02.tar.gz R/RK/RKACKLEY/Tk-Pgplot/Tk-Pgplot-0.40.tar.gz R/RM/RMCFARLA/AI-LibNeural/AI-LibNeural-0.02.tar.gz R/RM/RMCFARLA/Gtk2-Perl-Ex/Gtk2-Ex-Simple-List-0.50.tar.gz R/RM/RMCFARLA/Gtk2-Perl-Ex/Gtk2-Ex-Simple-Menu-0.7.tar.gz R/RM/RMCFARLA/Gtk2-Perl-Ex/Gtk2-Ex-Simple-Tree-0.50.tar.gz R/RM/RMCFARLA/Gtk2-Perl/Gnome2-Print-0.94.tar.gz R/RM/RMCFARLA/Gtk2-Perl/Gtk2-1.023.tar.gz R/RO/ROBERTMAY/Win32-GUI-HyperLink/Win32-GUI-HyperLink-0.14.tar.gz R/RO/ROBERTMAY/Win32-GUI-OPenGLFrame/Win32-GUI-OpenGLFrame-0.02.tar.gz R/RO/ROBERTMAY/Win32-GUI-SplashScreen/Win32-GUI-SplashScreen-0.04.tar.gz R/RO/ROBERTMAY/Win32-GUI/Win32-GUI-1.06.tar.gz R/RO/ROBERTMAY/Win32-VisualStyles/Win32-VisualStyles-0.02.tar.gz R/RO/ROHITBASU/OTRS/OTRS-Kernel-Module-TicketAutoAssignment-1.0.1.zip R/RO/ROHITBASU/OTRS/OTRS-Kernel-System-MultilevelEscalation-1.0.1.zip R/RO/ROOT/Biblio/Biblio-Thesaurus-SQLite-0.10.tar.gz R/RS/RSMITH/vuser/VUser-Email-0.3.2.tar.gz R/RS/RSMITH/vuser/VUser-Email-Postfix-SQL-0.1.1.tar.gz R/RS/RSMITH/vuser/VUser-ExtLib-SQL-0.1.1.tar.gz R/RS/RSMITH/vuser/VUser-Firewall-0.1.0.tar.gz R/RS/RSMITH/vuser/VUser-Google-Api-1.0.1.tar.gz R/RS/RSMITH/vuser/VUser-Google-Apps-0.2.0.tar.gz R/RS/RSMITH/vuser/VUser-Install-0.1.0.tar.gz R/RS/RSMITH/vuser/VUser-Radius-0.1.1.tar.gz R/RS/RSMITH/vuser/VUser-Radius-Acct-0.1.0.tar.gz R/RS/RSMITH/vuser/VUser-Radius-Acct-SQL-0.1.0.tar.gz R/RS/RSMITH/vuser/VUser-Radius-SQL-0.1.1.tar.gz R/RS/RSMITH/vuser/VUser-SpamAssassin-0.3.0.tar.gz R/RS/RSMITH/vuser/VUser-SpamAssassin-SQL-0.1.0.tar.gz R/RS/RSMITH/vuser/VUser-SquirrelMail-0.1.1.tar.gz R/RS/RSMITH/vuser/vsoapd-0.4.1.tar.gz R/RS/RSMITH/vuser/vuser-0.5.0.tar.gz R/RS/RST/FrameMaker-MifTree/FrameMaker-MifTree-0.075.tar.gz R/RW/RWP/oo_sub/oo_sub-v1.1.0.tar.gz R/RY/RYOCHIN/Acme-Void/Acme-Void-0.02.tar.gz R/RY/RYOCHIN/Log-Dispatch-MacGrowl/Log-Dispatch-MacGrowl-0.04.tar.gz S/SA/SANDEEPV/GuiBuilder_v0_3.zip S/SA/SAXJAZMAN/RT/RT-CIFMinimal-0.01.tar.gz S/SA/SAXJAZMAN/RT/RT-IODEF-0.08.tar.gz S/SA/SAXJAZMAN/Snort/Snort-Rule-1.07.tar.gz S/SA/SAXJAZMAN/cif/RINO-Client-0.03.tar.gz S/SA/SAXJAZMAN/database/Database-Schema-Config-.02.tar.gz S/SA/SAXJAZMAN/iodef/Iodef-Pb-Simple-0.01.tar.gz S/SA/SAXJAZMAN/iodef/Iodef-Pb-Simple-0.21.tar.gz S/SA/SAXJAZMAN/iodef/XML-IODEF-0.11.tar.gz S/SA/SAXJAZMAN/iodef/XML-IODEF-PhraudReport-0.01.tar.gz S/SA/SAXJAZMAN/iodef/XML-IODEF-Simple-0.02.tar.gz S/SA/SAXJAZMAN/lwp/LWPx-ParanoidAgent-1.12.tar.gz S/SA/SAXJAZMAN/malware/Malware-1.02.tar.gz S/SA/SAXJAZMAN/malware/XML-Malware-0.01.tar.gz S/SA/SAXJAZMAN/net/Net-Abuse-Utils-Spamhaus-0.09.tar.gz S/SA/SAXJAZMAN/net/Net-Connection-Simple-1.02.tar.gz S/SA/SAXJAZMAN/net/Net-DNS-Match-0.05.tar.gz S/SA/SAXJAZMAN/protobuf/Google-ProtocolBuffers-0.12.tar.gz S/SC/SCHROEER/ChainMake/ChainMake-0.9.0.tar.gz S/SC/SCHWIGON/clarity/Clarity-XOG-Merge-1.001.tar.gz S/SC/SCHWIGON/class-methodmaker/Class-MethodMaker-2.25.tar.gz S/SC/SCHWIGON/idempotent/App-Prove-Plugin-Idempotent-0.01.tar.gz S/SC/SCHWIGON/linux-personality/Linux-Personality-0.01.tar.gz S/SC/SCHWIGON/lockfile-simple/LockFile-Simple-0.208.tar.gz S/SC/SCHWIGON/object-tiny-rw/Object-Tiny-RW-1.07.tar.gz S/SC/SCHWIGON/pdf-fdf-simple/PDF-FDF-Simple-0.21.tar.gz S/SC/SCHWIGON/perl-formance/Benchmark-Perl-Formance-0.53.tar.gz S/SC/SCHWIGON/perl-formance/Benchmark-Perl-Formance-0.55.tar.gz S/SC/SCHWIGON/perl-formance/Benchmark-Perl-Formance-Cargo-0.07.tar.gz S/SC/SCHWIGON/test/Test-Mock-Test-0.01.tar.gz S/SC/SCHWIGON/twikiclient/WWW-TWikiClient-0.11.tar.gz S/SC/SCILLEY/POE/Component/IRC/Plugin/IRCDHelp-0.02.tar.gz S/SE/SENGER/NET-IPFilterSimple_V1.1.tar.gz S/SE/SENGER/NET-IPFilter_V1.1.2.tar.gz S/SF/SFLEX/SF_form_secure/SF_form_secure_v4.0.tar.gz S/SH/SHIMI/Win32-Watir-0.06-withoutworldwriteables.tar.gz S/SH/SHIRIRU/Data/Data-NestedSet-1.03.tar.gz S/SH/SHOGE/video-info/Video-Info-Quicktime_PL-0.07.tar.gz S/SH/SHY/Wifi/Wifi-0.01a.tar.gz S/SH/SHY/acpi/Acpi-0.1.tar.gz S/SI/SIMATIKA/subclustv1_0.tar.gz S/SK/SKATTOOR/Device-Modem-GSM/Device-Modem-GSM-0.3.tar.gz S/SK/SKNPP/basis/basis-0.05003.tar.gz S/SK/SKUPSY/OpenSSL/Crypt-OpenSSL-PBKDF2-0.04.tar.gz S/SK/SKUPSY/VisionDB/VisionDB-Read-0.04.tar.gz S/SL/SLENK/MCPrimers/Bio-MCPrimers-2.5.tar.gz S/SM/SMANROSS/Win32-Exchange_v0.046a.tar.gz S/SM/SMCNABB/Drupal-Module-Starter/Drupal-Module-Starter-0.06.tar.gz S/SM/SMCNABB/POE-Framework-MIDI/POE-Framework-MIDI-0.09.tar.gz S/SM/SMCNABB/POE-Framework-MIDI/POE-Framework-MIDI-0.1.tar.gz S/SN/SNEVINE/WWW-Bleep-092/WWW-Bleep-0.92.tgz S/SO/SOMIAN/experimental/unregistered/Filesys-CygwinPaths-0.04.tar.gz S/SO/SOMMAR/Win32-SqlServer-2.015-withoutworldwriteables.tar.gz S/SO/SORBS/C/C-Mlock-1.12.tar.gz S/SO/SORBS/Mail/Pegasus/Mail-Pegasus-1.06.tgz S/SO/SORBS/WebService/WebService-VirusTotal-1.0.3165.tar.gz S/SP/SPARSONS/tools/Net-Dev-MIBLoadOrder-1.1.0.tar.gz S/SP/SPARSONS/tools/Net-Dev-Tools-Syslog-1.0.0.tar.gz S/SU/SUMUS/DWH_File.0.03.tar.gz S/SU/SUNILS/PDF/Xtract/008/PDF-Xtract-0.08.tar.gz S/SW/SWORDSMAN/TSM_0.60.tar.gz T/TB/TBONECA/BSD/Jail/BSD-Jail-0.01.tar.gz T/TD/TDWINTER/Hash/KeyMorpher/Hash-KeyMorpher-0.09.tar.gz T/TD/TDWINTER/Net/Das/Net-DAS-0.19.tar.gz T/TE/TEDK/Win32/SimpleProcess/SimpleProcess_1.0.zip T/TE/TEEJAY/Data/Iterator/Data-Iterator-EasyObj-0.01.tar.gz T/TE/TEEJAY/GraphViz/GraphViz-DBI-0.02.tar.gz T/TE/TEEJAY/Imager/Chart/Imager-Chart-Radial-0.1.tar.gz T/TE/TELS/audio/Audio-Audiere-0.05.tar.gz T/TE/TELS/convert/Convert-Morse-0.06.tar.gz T/TE/TELS/convert/Convert-Wiki-0.05.tar.gz T/TE/TELS/devel/Devel-Graph-0.12.tar.gz T/TE/TELS/devel/Devel-Size-Report-0.13.tar.gz T/TE/TELS/games/Games-3D-0.10.tar.gz T/TE/TELS/games/Games-Console-0.04.tar.gz T/TE/TELS/games/Games-Irrlicht-0.04.tar.gz T/TE/TELS/games/Games-OpenGL-Font-2D-0.07.tar.gz T/TE/TELS/graph/Graph-Convert-0.09.tar.gz T/TE/TELS/graph/Graph-Dependency-0.02.tar.gz T/TE/TELS/graph/Graph-Easy-Manual-0.41.tar.gz T/TE/TELS/graph/Graph-Flowchart-0.11.tar.gz T/TE/TELS/graph/Graph-Regexp-0.05.tar.gz T/TE/TELS/graph/Graph-Usage-0.12.tar.gz T/TE/TELS/math/Math-Fractal-Mandelbrot-0.04.tar.gz T/TE/TELS/sdl/SDL-App-FPS-0.21.tar.gz T/TE/TELS/wiki/Mediawiki-POD-0.06.tar.gz T/TH/THALJEF/criticism/criticism-1.02.tar.gz T/TI/TIMB/perl5.004_04.tar.gz T/TO/TOMO/src/Net-IP-Match-Bin-0.14.tar.gz T/TO/TOMO/src/Net-POP3S-0.12.tar.gz T/TO/TOMO/src/Net-SMTPS-0.10.tar.gz T/TP/TPABA/Config-ReadAndCheck/Config-ReadAndCheck-0.04.tar.gz T/TP/TPABA/File-DirList/File-DirList-0.05.tar.gz T/TP/TPABA/Getopt-Std-WithCheck/Getopt-Std-WithCheck-0.04.tar.gz T/TP/TPABA/Net-Socket-NonBlock/Net-Socket-NonBlock-0.15.tar.gz T/TP/TPABA/Nginx/Nginx-ReadBody-0.07.tar.gz T/TP/TPABA/Term-Screen/Term-Screen-Uni-0.04.tar.gz T/TP/TPABA/Term-Screen/Term-Screen-Win32-0.03.tar.gz T/TP/TPABA/UniLog/UniLog-0.14.tar.gz T/TR/TRIZOR/dists/Test-AskAnExpert-0.03.tar.gz T/TR/TRIZOR/dists/Test-Smart-0.02.tar.gz T/TS/TSCHULZ/TSCHULZ/Lingua-DE-Tagger-0.16.tar.gz T/TT/TTG/Google-GeoCoder-Smart/Google-GeoCoder-Smart-1.18.tar.gz T/TU/TURNERMM/HTML-WikiConverter-DokuWikiFCK-0.32_Feb-27-2013.tgz T/TU/TUSHAR/Log-SelfHistory_0.1.tar.gz T/TU/TUSHAR/Text-CSV-UniqueColumns_0.4.tar.gz T/TW/TWITTEK/konstrukt/Konstrukt-0.5-beta13.tar.gz T/TW/TWITTEK/konstrukt/Konstrukt-0.5-beta6.tar.gz T/TW/TWYLIE/modules/BLASTaid-v0.0.3.tar.gz T/TW/TWYLIE/modules/DateStamp-v1.0.4.tar.gz T/TW/TWYLIE/modules/EOL-v0.0.2.tar.gz T/TW/TWYLIE/modules/FASTAParse-0.0.3.tar.gz U/UH/UHANDA/contribs/CMD-Colors-0.1.tar.gz U/UN/UNICOLET/Win32-TaskScheduler2.0.3.zip V/VA/VAYDE/Lazy/CGI-Lazy-1.10.tar.gz V/VA/VAYDE/Lazy/CGI-Lazy-ModPerl-0.04.tar.gz V/VG/VGIRISH/Net/Net-Ifstat-0.01.tar.gz V/VG/VGIRISH/Net/Net-Netcat-0.05.tar.gz V/VG/VGIRISH/Progress/Progress-PV-0.02.tar.gz V/VR/VRAG/Log-Any-Adapter-Multiplexor-003/Log-Any-Adapter-Multiplexor-0.03.tar.gz V/VT/VTFRVL/Plack-Middleware-DNSBL/Plack-Middleware-DNSBL-0.0304.tar.gz W/WA/WAYNEDAV/DBZ_File_1.1.tar.gz W/WD/WDS/Dreamer/VM-Dreamer-0.851.tar.gz W/WI/WIHAA/Graphics/Graphics-EPS-3.00.tar.gz W/WI/WITHERING/HOI-Comprehensions-0045/HOI-Comprehensions-0.045.tar.gz W/WI/WITHERING/HOIMatch-0072/HOI-Match-0.072.tar.gz W/WI/WITHERING/Wraith-012/Wraith-0.12.tar.gz W/WI/WITTEN/Net_TCLink.pm-3.4.tar.gz W/WN/WNEESSEN/OpenVAS-OMP_0.04.tar.gz W/WO/WOLFTOWER/Algorithm/TrunkClassifier_v101/Algorithm-TrunkClassifier-v1.0.1.tar.gz W/WO/WORR/Formspring/WWW-Formspring-0.03.tar.gz W/WY/WYCHUNG/wychung/pamlyn-0.01.tar.gz X/XI/XIONG/developer-tools/Acme-Teddy-1.002003.tar.gz X/XI/XIONG/developer-tools/Cheat-Meta-v0.0.5.tar.gz X/XI/XIONG/developer-tools/Class-Lite-v0.1.0.tar.gz X/XI/XIONG/developer-tools/Devel-Comments-v1.1.4.tar.gz X/XI/XIONG/developer-tools/Error-Base-v1.0.2.tar.gz X/XI/XIONG/developer-tools/Test-Ranger-v0.0.4.tar.gz X/XX/XXGHOSTXX/Facebook/FB-Statify-1.04.zip X/XX/XXGHOSTXX/Tinder/Tinder-API-0.03.zip Y/YU/YUMPY/Namegame/Lingua-EN-Namegame-0.05.tar.gz Z/ZA/ZACS/Mail/Mail-Queue-DB-0.03.tar.gz Z/ZA/ZAPAD/Log-Sentry/Log-Sentry-0.01.tar.gz Z/ZE/ZEUS/App-Regather/App-Regather-0.85.00.tar.gz Z/ZE/ZEUS/App-gqmt/App-gqmt-1.02.tar.gz Z/ZM/ZMIJ/Array/Array-Utils-0.5.tar.gz Z/ZM/ZMIJ/Cache/Memcached/Cache-Memcached-Semaphore-0.3.tar.gz URI-PackageURL-2.26/t/sync-purl-legacy-test-suite-data.sh0000644000175000017500000000065515135504042022037 0ustar peppepeppe#!/bin/sh # sync-purl-test-suite-data - Sync the PackageURL "legacy" test suite data # # (C) 2024-2025, Giuseppe Di Terlizzi cd $(dirname $0) ; CWD=$(pwd) echo "Remove old PURL test suite file" rm test-suite-data.json echo "Download legacy PURL test suite file" wget https://raw.githubusercontent.com/package-url/purl-spec/e56202efb16b943add2ae27b81a00efd25add47a/test-suite-data.json exit 0 URI-PackageURL-2.26/t/52-vers-scheme-comparator.t0000644000175000017500000000605615264504421020276 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::VersionRange; use URI::VersionRange::Util qw(version_compare generic_version_compare); package # hide from pause URI::VersionRange::Scheme::reverse { use parent -norequire, 'URI::VersionRange::Version'; use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return $right->[0] <=> $left->[0]; } sub from_native { my ($class, $range, $scheme) = @_; return join '/', "vers:$scheme", join('|', reverse split /,/, $range); } } subtest "VERS: constraints sorted using the scheme comparator" => sub { #<<< my @tests = ( {scheme => 'cpan', constraints => ['<1.9', '>1.10'], expected => 'vers:cpan/>1.10|<1.9'}, {scheme => 'semver', constraints => ['<1.0.0', '>=1.0.0-rc.1'], expected => 'vers:semver/>=1.0.0-rc.1|<1.0.0'}, {scheme => 'npm', constraints => ['<1.0.0', '>=1.0.0-beta'], expected => 'vers:npm/>=1.0.0-beta|<1.0.0'}, {scheme => 'reverse', constraints => ['<1', '>2'], expected => 'vers:reverse/>2|<1'}, ); #>>> foreach my $test (@tests) { my $vers = URI::VersionRange->new(scheme => $test->{scheme}, constraints => $test->{constraints}); is("$vers", $test->{expected}, "to_string: $test->{expected}"); } }; subtest "VERS: bundled SemVer comparator" => sub { #<<< my @tests = ( {vers => 'vers:npm/<1.0.0', version => '1.0.0-beta', expected => 1}, {vers => 'vers:semver/<1.0.0', version => '1.0.0-rc.1', expected => 1}, {vers => 'vers:semver/<1.0.0', version => '1.0.0', expected => 0}, ); #>>> foreach my $test (@tests) { my $vers = URI::VersionRange->from_string($test->{vers}); is(!!$vers->contains($test->{version}), !!$test->{expected}, "contains: $test->{version} in $test->{vers}"); } }; subtest "VERS: version_compare utility" => sub { is(version_compare('cpan', '1.10', '1.9'), -1, 'version_compare: cpan'); is(version_compare('npm', '1.0.0-beta', '1.0.0'), -1, 'version_compare: npm'); is(version_compare('reverse', '1', '2'), 1, 'version_compare: user-supplied comparator'); is( version_compare('pypi', '1.10', '1.9'), generic_version_compare('1.10', '1.9'), 'version_compare: generic fallback' ); }; subtest "VERS: from_native using the scheme class" => sub { #<<< my @tests = ( {scheme => 'reverse', range => '<1,>2', expected => 'vers:reverse/>2|<1'}, # Scheme class "from_native" {scheme => 'pypi', range => '>=1.0, <2.0', expected => 'vers:pypi/>=1.0|<2.0'}, # Fallback ("native_range_to_vers") ); #>>> foreach my $test (@tests) { my $vers = URI::VersionRange->from_native(scheme => $test->{scheme}, range => $test->{range}); isa_ok($vers, 'URI::VersionRange'); is("$vers", $test->{expected}, "from_native: $test->{range} --> $test->{expected}"); } }; done_testing(); URI-PackageURL-2.26/t/40-cli.t0000644000175000017500000000527615135504042014453 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use JSON::PP qw(decode_json); use URI::PackageURL::App; use URI::VersionRange::App; sub cmd { my ($class, @arguments) = @_; my $output; open(my $output_handle, '>', \$output) or die "Can't open handle file: $!"; my $original_handle = select $output_handle; $class->run(@arguments); chomp $output; select $original_handle; return $output; } my $t1 = 'pkg:cpan/GDT/URI-PackageURL@2.23'; my $t2 = 'vers:cpan/1.00|>=2.00|<5.00'; subtest "URI::PackageURL::App - '$t1' (JSON output)" => sub { my $test_1 = cmd('URI::PackageURL::App', $t1, '--json'); ok($test_1, 'Parse PURL string to JSON'); my $test_2 = eval { decode_json($test_1) }; ok($test_2, 'Valid JSON output'); is($test_2->{type}, 'cpan', 'JSON output: Type'); is($test_2->{namespace}, 'GDT', 'JSON output: Namespace'); is($test_2->{name}, 'URI-PackageURL', 'JSON output: Name'); is($test_2->{version}, '2.23', 'JSON output: Version'); }; subtest "URI::VersionRange::App - '$t2' (JSON output)" => sub { my $test_1 = cmd('URI::VersionRange::App', $t2, '--json'); ok($test_1, 'Parse Version Range string to JSON'); my $test_2 = eval { decode_json($test_1) }; ok($test_2, 'Valid JSON output'); is($test_2->{scheme}, 'cpan', 'JSON output: Scheme'); }; #<<< my @valid = ( 'pkg:cpan/GDT/URI-PackageURL@2.23', 'pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie', 'pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations', 'pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io', 'pkg:generic/ns/n@m#?@version?qualifier=#v@lue#subp@th?', 'pkg:/generic/test?checksum=sha1:ad9503c3e994a4f,sha256:41bf9088b3a1e6c1ef1d', 'pkg:pypi/django?vers=vers:pypi%2F%3E%3D1.11.0%7C%21%3D1.11.1%7C%3C2.0.0', ); my @invalid = ( 'EnterpriseLibrary.Common@6.0.1304', 'pkg:EnterpriseLibrary.Common@6.0.1304', 'pkg:n&g?inx/nginx@0.8.9', 'pkg:maven/@1.3.4', 'pkg:npm/myartifact@1.0.0?in%20production=true', 'pkg:hackage', 'pkg%3Amaven/org.apache.commons/io', ); #>>> foreach (@valid) { my $res = URI::PackageURL::App->run($_, '--validate', '--quiet'); ok(!$res, "Valid PURL: purl-tool --validate -q $_"); } foreach (@invalid) { my $res = URI::PackageURL::App->run($_, '--validate', '--quiet'); ok($res, "Invalid PURL: purl-tool --validate -q $_"); } { my @args = ('--type', 'cpan', '--namespace', 'GDT', '--name', 'URI-PackageURL', '--version', '2.23'); my $res = cmd('URI::PackageURL::App', @args); is $res, $t1, 'Build PURL string: purl-tool ' . join(' ', @args); } done_testing(); URI-PackageURL-2.26/t/10-encode.t0000644000175000017500000000432115135504042015124 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::PackageURL qw(encode_purl); #<<< my @TESTS = ( { purl => 'pkg:cpan/DROLSKY/DateTime@1.55', type => 'cpan', namespace => 'DROLSKY', name => 'DateTime', version => '1.55' }, { purl => 'pkg:cpan/GDT/URI-PackageURL', type => 'cpan', namespace => 'GDT', name => 'URI-PackageURL' }, { purl => 'pkg:cpan/OALDERS/libwww-perl@6.76', type => 'cpan', namespace => 'OALDERS', name => 'libwww-perl', version => '6.76' }, { purl => 'pkg:generic/100%25/100%25@100%25?repository_url=https:%2F%2Fexample.com%2F100%2525%2F#100%25', type => 'generic', namespace => '100%', name => '100%', version => '100%', qualifiers => {'repository_url' => 'https://example.com/100%25/'}, subpath => '100%', }, { purl => 'pkg:brew/openssl%401.1@1.1.1w', type => 'brew', name => 'openssl@1.1', version => '1.1.1w' }, ); #>>> foreach my $test (@TESTS) { my $expected_purl = $test->{purl}; subtest "$expected_purl" => sub { my $got_purl_1 = encode_purl( type => $test->{type}, namespace => $test->{namespace}, name => $test->{name}, version => $test->{version}, qualifiers => $test->{qualifiers}, subpath => $test->{subpath}, ); my $got_purl_2 = URI::PackageURL->new( type => $test->{type}, namespace => $test->{namespace}, name => $test->{name}, version => $test->{version}, qualifiers => $test->{qualifiers}, subpath => $test->{subpath}, ); my $got_purl_3 = URI::PackageURL->from_string($expected_purl)->to_string; is($got_purl_1, $expected_purl, "encode_purl --> $got_purl_1"); is($got_purl_2, $expected_purl, "URI::PackageURL --> $got_purl_2"); is($got_purl_3, $expected_purl, "decode+encode --> $got_purl_3"); }; } done_testing(); URI-PackageURL-2.26/t/purl/0000755000175000017500000000000015264504726014262 5ustar peppepeppeURI-PackageURL-2.26/t/purl/types/0000755000175000017500000000000015264504726015426 5ustar peppepeppeURI-PackageURL-2.26/t/purl/types/hex-test.json0000644000175000017500000001175515264504421020063 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: hex", "test_group": "required", "test_type": "parse", "input": "pkg:hex/jason@1.1.2", "expected_output": { "type": "hex", "namespace": null, "name": "jason", "version": "1.1.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: hex", "test_group": "required", "test_type": "validate", "input": "pkg:hex/jason@1.1.2", "expected_output": "pkg:hex/jason@1.1.2", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: hex", "test_group": "required", "test_type": "build", "input": { "type": "hex", "namespace": null, "name": "jason", "version": "1.1.2", "qualifiers": null, "subpath": null }, "expected_output": "pkg:hex/jason@1.1.2", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: hex", "test_group": "required", "test_type": "parse", "input": "pkg:hex/acme/foo@2.3.", "expected_output": { "type": "hex", "namespace": "acme", "name": "foo", "version": "2.3.", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: hex", "test_group": "required", "test_type": "validate", "input": "pkg:hex/acme/foo@2.3.", "expected_output": "pkg:hex/acme/foo@2.3.", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: hex", "test_group": "required", "test_type": "build", "input": { "type": "hex", "namespace": "acme", "name": "foo", "version": "2.3.", "qualifiers": null, "subpath": null }, "expected_output": "pkg:hex/acme/foo@2.3.", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: hex", "test_group": "required", "test_type": "parse", "input": "pkg:hex/phoenix_html@2.13.3#priv/static/phoenix_html.js", "expected_output": { "type": "hex", "namespace": null, "name": "phoenix_html", "version": "2.13.3", "qualifiers": null, "subpath": "priv/static/phoenix_html.js" }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: hex", "test_group": "required", "test_type": "validate", "input": "pkg:hex/phoenix_html@2.13.3#priv/static/phoenix_html.js", "expected_output": "pkg:hex/phoenix_html@2.13.3#priv/static/phoenix_html.js", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: hex", "test_group": "required", "test_type": "build", "input": { "type": "hex", "namespace": null, "name": "phoenix_html", "version": "2.13.3", "qualifiers": null, "subpath": "priv/static/phoenix_html.js" }, "expected_output": "pkg:hex/phoenix_html@2.13.3#priv/static/phoenix_html.js", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: hex", "test_group": "required", "test_type": "parse", "input": "pkg:hex/bar@1.2.3?repository_url=https://myrepo.example.com", "expected_output": { "type": "hex", "namespace": null, "name": "bar", "version": "1.2.3", "qualifiers": { "repository_url": "https://myrepo.example.com" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: hex", "test_group": "required", "test_type": "validate", "input": "pkg:hex/bar@1.2.3?repository_url=https://myrepo.example.com", "expected_output": "pkg:hex/bar@1.2.3?repository_url=https:%2F%2Fmyrepo.example.com", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: hex", "test_group": "required", "test_type": "build", "input": { "type": "hex", "namespace": null, "name": "bar", "version": "1.2.3", "qualifiers": { "repository_url": "https://myrepo.example.com" }, "subpath": null }, "expected_output": "pkg:hex/bar@1.2.3?repository_url=https:%2F%2Fmyrepo.example.com", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/alpm-test.json0000644000175000017500000000772515264504421020232 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: alpm", "test_group": "required", "test_type": "parse", "input": "pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64", "expected_output": { "type": "alpm", "namespace": "arch", "name": "pacman", "version": "6.0.1-1", "qualifiers": { "arch": "x86_64" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: alpm", "test_group": "required", "test_type": "validate", "input": "pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64", "expected_output": "pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: alpm", "test_group": "required", "test_type": "build", "input": { "type": "alpm", "namespace": "arch", "name": "pacman", "version": "6.0.1-1", "qualifiers": { "arch": "x86_64" }, "subpath": null }, "expected_output": "pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: alpm", "test_group": "required", "test_type": "parse", "input": "pkg:alpm/arch/python-pip@21.0-1?arch=any", "expected_output": { "type": "alpm", "namespace": "arch", "name": "python-pip", "version": "21.0-1", "qualifiers": { "arch": "any" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: alpm", "test_group": "required", "test_type": "validate", "input": "pkg:alpm/arch/python-pip@21.0-1?arch=any", "expected_output": "pkg:alpm/arch/python-pip@21.0-1?arch=any", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: alpm", "test_group": "required", "test_type": "build", "input": { "type": "alpm", "namespace": "arch", "name": "python-pip", "version": "21.0-1", "qualifiers": { "arch": "any" }, "subpath": null }, "expected_output": "pkg:alpm/arch/python-pip@21.0-1?arch=any", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: alpm", "test_group": "required", "test_type": "parse", "input": "pkg:alpm/arch/containers-common@1:0.47.4-4?arch=x86_64", "expected_output": { "type": "alpm", "namespace": "arch", "name": "containers-common", "version": "1:0.47.4-4", "qualifiers": { "arch": "x86_64" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: alpm", "test_group": "required", "test_type": "validate", "input": "pkg:alpm/arch/containers-common@1:0.47.4-4?arch=x86_64", "expected_output": "pkg:alpm/arch/containers-common@1:0.47.4-4?arch=x86_64", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: alpm", "test_group": "required", "test_type": "build", "input": { "type": "alpm", "namespace": "arch", "name": "containers-common", "version": "1:0.47.4-4", "qualifiers": { "arch": "x86_64" }, "subpath": null }, "expected_output": "pkg:alpm/arch/containers-common@1:0.47.4-4?arch=x86_64", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/vcpkg-test.json0000644000175000017500000002452515264504421020410 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "simple vcpkg purl", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/bzip2@1.0.8", "expected_output": { "type": "vcpkg", "namespace": null, "name": "bzip2", "version": "1.0.8", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg with port_version", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/bzip2@1.0.8?port_version=6", "expected_output": { "type": "vcpkg", "namespace": null, "name": "bzip2", "version": "1.0.8", "qualifiers": { "port_version": "6" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg non-default git registry", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/ffmpeg@5.1.2?repository_url=https:%2F%2Fgithub.com%2Fazure-sdk%2Fvcpkg&port_version=3", "expected_output": { "type": "vcpkg", "namespace": null, "name": "ffmpeg", "version": "5.1.2", "qualifiers": { "repository_url": "https://github.com/azure-sdk/vcpkg", "port_version": "3" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg filesystem registry or overlay port", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/llvm@15.0.7?repository_url=file:%2F%2F%2FC:%2Flocal-registry%2Fvcpkg&port_version=3", "expected_output": { "type": "vcpkg", "namespace": null, "name": "llvm", "version": "15.0.7", "qualifiers": { "repository_url": "file:///C:/local-registry/vcpkg", "port_version": "3" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg with additional qualifiers", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/bzip2@1.0.8?port_version=6&repository_revision=84a143e4caf6b70db57f28d04c41df4a85c480fa&triplet=x64-linux", "expected_output": { "type": "vcpkg", "namespace": null, "name": "bzip2", "version": "1.0.8", "qualifiers": { "port_version": "6", "repository_revision": "84a143e4caf6b70db57f28d04c41df4a85c480fa", "triplet": "x64-linux" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg with a vcs_url pinning the port git-tree in the default registry", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/zlib@1.3.1?triplet=x64-linux&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fmicrosoft%2Fvcpkg%40b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "expected_output": { "type": "vcpkg", "namespace": null, "name": "zlib", "version": "1.3.1", "qualifiers": { "triplet": "x64-linux", "vcs_url": "git+https://github.com/microsoft/vcpkg@b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg from a non-default git registry with repository_url and a vcs_url git-tree", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/zlib@1.3.1?repository_url=https:%2F%2Fgithub.com%2Fazure-sdk%2Fvcpkg&triplet=x64-linux&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fazure-sdk%2Fvcpkg%40b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "expected_output": { "type": "vcpkg", "namespace": null, "name": "zlib", "version": "1.3.1", "qualifiers": { "repository_url": "https://github.com/azure-sdk/vcpkg", "triplet": "x64-linux", "vcs_url": "git+https://github.com/azure-sdk/vcpkg@b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "roundtrip a canonical vcpkg purl with triplet and vcs_url", "test_group": "required", "test_type": "validate", "input": "pkg:vcpkg/zlib@1.3.1?triplet=x64-linux&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fmicrosoft%2Fvcpkg%40b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "expected_output": "pkg:vcpkg/zlib@1.3.1?triplet=x64-linux&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fmicrosoft%2Fvcpkg%40b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "expected_failure": false, "expected_message": null }, { "description": "build a vcpkg purl with triplet and vcs_url sorts qualifiers and encodes the vcs_url", "test_group": "required", "test_type": "build", "input": { "type": "vcpkg", "namespace": null, "name": "zlib", "version": "1.3.1", "qualifiers": { "vcs_url": "git+https://github.com/microsoft/vcpkg@b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "triplet": "x64-linux" }, "subpath": null }, "expected_output": "pkg:vcpkg/zlib@1.3.1?triplet=x64-linux&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fmicrosoft%2Fvcpkg%40b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "expected_failure": false, "expected_message": null }, { "description": "vcpkg namespace is prohibited; boost-asio is a single port name, not a namespace and name", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/boost/asio@1.84.0", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a vcpkg purl with a namespace because vcpkg namespaces are prohibited" }, { "description": "vcpkg purl without a name", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/@1.0.8", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a vcpkg purl without a name because the name is required" }, { "description": "vcpkg purl with only the type and no name", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a vcpkg purl without a name because the name is required" }, { "description": "vcpkg build with a prohibited namespace", "test_group": "required", "test_type": "build", "input": { "type": "vcpkg", "namespace": "boost", "name": "asio", "version": "1.84.0", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a vcpkg purl with a namespace because vcpkg namespaces are prohibited" }, { "description": "vcpkg build without a name", "test_group": "required", "test_type": "build", "input": { "type": "vcpkg", "namespace": null, "name": null, "version": "1.0.8", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a vcpkg purl without a name because the name is required" }, { "description": "a trailing #6 is parsed as a subpath, not a port-version, which is why port_version is a qualifier", "test_group": "recommended", "test_type": "parse", "input": "pkg:vcpkg/zlib@1.3.1#6", "expected_output": { "type": "vcpkg", "namespace": null, "name": "zlib", "version": "1.3.1", "qualifiers": null, "subpath": "6" }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg purl with a features qualifier listing enabled features", "test_group": "recommended", "test_type": "parse", "input": "pkg:vcpkg/curl@8.6.0?features=ssl%2Chttp2", "expected_output": { "type": "vcpkg", "namespace": null, "name": "curl", "version": "8.6.0", "qualifiers": { "features": "ssl,http2" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "vcpkg purl with a static-linkage triplet", "test_group": "required", "test_type": "parse", "input": "pkg:vcpkg/zlib@1.3.1?triplet=x64-windows-static", "expected_output": { "type": "vcpkg", "namespace": null, "name": "zlib", "version": "1.3.1", "qualifiers": { "triplet": "x64-windows-static" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "roundtrip a canonical vcpkg purl with a port_version", "test_group": "required", "test_type": "validate", "input": "pkg:vcpkg/bzip2@1.0.8?port_version=6", "expected_output": "pkg:vcpkg/bzip2@1.0.8?port_version=6", "expected_failure": false, "expected_message": null }, { "description": "build a vcpkg purl with a port_version", "test_group": "required", "test_type": "build", "input": { "type": "vcpkg", "namespace": null, "name": "bzip2", "version": "1.0.8", "qualifiers": { "port_version": "6" }, "subpath": null }, "expected_output": "pkg:vcpkg/bzip2@1.0.8?port_version=6", "expected_failure": false, "expected_message": null }, { "description": "build a vcpkg purl without a port_version omits the qualifier", "test_group": "required", "test_type": "build", "input": { "type": "vcpkg", "namespace": null, "name": "bzip2", "version": "1.0.8", "qualifiers": null, "subpath": null }, "expected_output": "pkg:vcpkg/bzip2@1.0.8", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/huggingface-test.json0000644000175000017500000002344115264504421021541 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "minimal Hugging Face model. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_output": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_failure": false, "expected_message": null }, { "description": "minimal Hugging Face model", "test_group": "required", "test_type": "parse", "input": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_output": { "type": "huggingface", "namespace": "distilbert", "name": "distilbert-base-uncased", "version": "043235d6088ecd3dd5fb5ca3592b6913fd516027", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "minimal Hugging Face model. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_output": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_failure": false, "expected_message": null }, { "description": "minimal Hugging Face model", "test_group": "required", "test_type": "build", "input": { "type": "huggingface", "namespace": "distilbert", "name": "distilbert-base-uncased", "version": "043235d6088ecd3dd5fb5ca3592b6913fd516027", "qualifiers": null, "subpath": null }, "expected_output": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with staging endpoint. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co", "expected_output": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https:%2F%2Fhub-ci.huggingface.co", "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with staging endpoint", "test_group": "required", "test_type": "parse", "input": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co", "expected_output": { "type": "huggingface", "namespace": "microsoft", "name": "deberta-v3-base", "version": "559062ad13d311b87b2c455e67dcd5f1c8f65111", "qualifiers": { "repository_url": "https://hub-ci.huggingface.co" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with staging endpoint. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co", "expected_output": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https:%2F%2Fhub-ci.huggingface.co", "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with staging endpoint", "test_group": "required", "test_type": "build", "input": { "type": "huggingface", "namespace": "microsoft", "name": "deberta-v3-base", "version": "559062ad13d311b87b2c455e67dcd5f1c8f65111", "qualifiers": { "repository_url": "https://hub-ci.huggingface.co" }, "subpath": null }, "expected_output": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https:%2F%2Fhub-ci.huggingface.co", "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with various cases. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552AE47F449AB70B684CABCB6603E5E85E", "expected_output": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552ae47f449ab70b684cabcb6603e5e85e", "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with various cases", "test_group": "required", "test_type": "parse", "input": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552AE47F449AB70B684CABCB6603E5E85E", "expected_output": { "type": "huggingface", "namespace": "EleutherAI", "name": "gpt-neo-1.3B", "version": "797174552ae47f449ab70b684cabcb6603e5e85e", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with various cases. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552ae47f449ab70b684cabcb6603e5e85e", "expected_output": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552ae47f449ab70b684cabcb6603e5e85e", "expected_failure": false, "expected_message": null }, { "description": "Hugging Face model with various cases", "test_group": "required", "test_type": "build", "input": { "type": "huggingface", "namespace": "EleutherAI", "name": "gpt-neo-1.3B", "version": "797174552ae47f449ab70b684cabcb6603e5e85e", "qualifiers": null, "subpath": null }, "expected_output": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552ae47f449ab70b684cabcb6603e5e85e", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: huggingface", "test_group": "required", "test_type": "parse", "input": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_output": { "type": "huggingface", "namespace": "distilbert", "name": "distilbert-base-uncased", "version": "043235d6088ecd3dd5fb5ca3592b6913fd516027", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: huggingface", "test_group": "required", "test_type": "validate", "input": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_output": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: huggingface", "test_group": "required", "test_type": "build", "input": { "type": "huggingface", "namespace": "distilbert", "name": "distilbert-base-uncased", "version": "043235d6088ecd3dd5fb5ca3592b6913fd516027", "qualifiers": null, "subpath": null }, "expected_output": "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: huggingface", "test_group": "required", "test_type": "parse", "input": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co", "expected_output": { "type": "huggingface", "namespace": "microsoft", "name": "deberta-v3-base", "version": "559062ad13d311b87b2c455e67dcd5f1c8f65111", "qualifiers": { "repository_url": "https://hub-ci.huggingface.co" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: huggingface", "test_group": "required", "test_type": "validate", "input": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co", "expected_output": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https:%2F%2Fhub-ci.huggingface.co", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: huggingface", "test_group": "required", "test_type": "build", "input": { "type": "huggingface", "namespace": "microsoft", "name": "deberta-v3-base", "version": "559062ad13d311b87b2c455e67dcd5f1c8f65111", "qualifiers": { "repository_url": "https://hub-ci.huggingface.co" }, "subpath": null }, "expected_output": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https:%2F%2Fhub-ci.huggingface.co", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/cocoapods-test.json0000644000175000017500000001172215264504421021243 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: cocoapods", "test_group": "required", "test_type": "parse", "input": "pkg:cocoapods/AFNetworking@4.0.1", "expected_output": { "type": "cocoapods", "namespace": null, "name": "AFNetworking", "version": "4.0.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cocoapods", "test_group": "required", "test_type": "validate", "input": "pkg:cocoapods/AFNetworking@4.0.1", "expected_output": "pkg:cocoapods/AFNetworking@4.0.1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cocoapods", "test_group": "required", "test_type": "build", "input": { "type": "cocoapods", "namespace": null, "name": "AFNetworking", "version": "4.0.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cocoapods/AFNetworking@4.0.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cocoapods", "test_group": "required", "test_type": "parse", "input": "pkg:cocoapods/MapsIndoors@3.24.0", "expected_output": { "type": "cocoapods", "namespace": null, "name": "MapsIndoors", "version": "3.24.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cocoapods", "test_group": "required", "test_type": "validate", "input": "pkg:cocoapods/MapsIndoors@3.24.0", "expected_output": "pkg:cocoapods/MapsIndoors@3.24.0", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cocoapods", "test_group": "required", "test_type": "build", "input": { "type": "cocoapods", "namespace": null, "name": "MapsIndoors", "version": "3.24.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cocoapods/MapsIndoors@3.24.0", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cocoapods", "test_group": "required", "test_type": "parse", "input": "pkg:cocoapods/ShareKit@2.0#Twitter", "expected_output": { "type": "cocoapods", "namespace": null, "name": "ShareKit", "version": "2.0", "qualifiers": null, "subpath": "Twitter" }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cocoapods", "test_group": "required", "test_type": "validate", "input": "pkg:cocoapods/ShareKit@2.0#Twitter", "expected_output": "pkg:cocoapods/ShareKit@2.0#Twitter", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cocoapods", "test_group": "required", "test_type": "build", "input": { "type": "cocoapods", "namespace": null, "name": "ShareKit", "version": "2.0", "qualifiers": null, "subpath": "Twitter" }, "expected_output": "pkg:cocoapods/ShareKit@2.0#Twitter", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cocoapods", "test_group": "required", "test_type": "parse", "input": "pkg:cocoapods/GoogleUtilities@7.5.2#NSData+zlib", "expected_output": { "type": "cocoapods", "namespace": null, "name": "GoogleUtilities", "version": "7.5.2", "qualifiers": null, "subpath": "NSData+zlib" }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cocoapods", "test_group": "recommended", "test_type": "validate", "input": "pkg:cocoapods/GoogleUtilities@7.5.2#NSData+zlib", "expected_output": "pkg:cocoapods/GoogleUtilities@7.5.2#NSData%2Bzlib", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cocoapods", "test_group": "required", "test_type": "build", "input": { "type": "cocoapods", "namespace": null, "name": "GoogleUtilities", "version": "7.5.2", "qualifiers": null, "subpath": "NSData+zlib" }, "expected_output": "pkg:cocoapods/GoogleUtilities@7.5.2#NSData%2Bzlib", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/swid-test.json0000644000175000017500000001113315264504421020233 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: swid", "test_group": "recommended", "test_type": "parse", "input": "pkg:swid/Acme/example.com/Enterprise+Server@1.0.0?tag_id=75b8c285-fa7b-485b-b199-4745e3004d0d", "expected_output": { "type": "swid", "namespace": "Acme/example.com", "name": "Enterprise+Server", "version": "1.0.0", "qualifiers": { "tag_id": "75b8c285-fa7b-485b-b199-4745e3004d0d" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: swid", "test_group": "recommended", "test_type": "validate", "input": "pkg:swid/Acme/example.com/Enterprise+Server@1.0.0?tag_id=75b8c285-fa7b-485b-b199-4745e3004d0d", "expected_output": "pkg:swid/Acme/example.com/Enterprise%2BServer@1.0.0?tag_id=75b8c285-fa7b-485b-b199-4745e3004d0d", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: swid", "test_group": "recommended", "test_type": "build", "input": { "type": "swid", "namespace": "Acme/example.com", "name": "Enterprise+Server", "version": "1.0.0", "qualifiers": { "tag_id": "75b8c285-fa7b-485b-b199-4745e3004d0d" }, "subpath": null }, "expected_output": "pkg:swid/Acme/example.com/Enterprise%2BServer@1.0.0?tag_id=75b8c285-fa7b-485b-b199-4745e3004d0d", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: swid", "test_group": "required", "test_type": "parse", "input": "pkg:swid/Fedora@29?tag_id=org.fedoraproject.Fedora-29", "expected_output": { "type": "swid", "namespace": null, "name": "Fedora", "version": "29", "qualifiers": { "tag_id": "org.fedoraproject.Fedora-29" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: swid", "test_group": "required", "test_type": "validate", "input": "pkg:swid/Fedora@29?tag_id=org.fedoraproject.Fedora-29", "expected_output": "pkg:swid/Fedora@29?tag_id=org.fedoraproject.Fedora-29", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: swid", "test_group": "required", "test_type": "build", "input": { "type": "swid", "namespace": null, "name": "Fedora", "version": "29", "qualifiers": { "tag_id": "org.fedoraproject.Fedora-29" }, "subpath": null }, "expected_output": "pkg:swid/Fedora@29?tag_id=org.fedoraproject.Fedora-29", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: swid", "test_group": "recommended", "test_type": "parse", "input": "pkg:swid/Adobe+Systems+Incorporated/Adobe+InDesign@CC?tag_id=CreativeCloud-CS6-Win-GM-MUL", "expected_output": { "type": "swid", "namespace": "Adobe+Systems+Incorporated", "name": "Adobe+InDesign", "version": "CC", "qualifiers": { "tag_id": "CreativeCloud-CS6-Win-GM-MUL" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: swid", "test_group": "recommended", "test_type": "validate", "input": "pkg:swid/Adobe+Systems+Incorporated/Adobe+InDesign@CC?tag_id=CreativeCloud-CS6-Win-GM-MUL", "expected_output": "pkg:swid/Adobe%2BSystems%2BIncorporated/Adobe%2BInDesign@CC?tag_id=CreativeCloud-CS6-Win-GM-MUL", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: swid", "test_group": "recommended", "test_type": "build", "input": { "type": "swid", "namespace": "Adobe+Systems+Incorporated", "name": "Adobe+InDesign", "version": "CC", "qualifiers": { "tag_id": "CreativeCloud-CS6-Win-GM-MUL" }, "subpath": null }, "expected_output": "pkg:swid/Adobe%2BSystems%2BIncorporated/Adobe%2BInDesign@CC?tag_id=CreativeCloud-CS6-Win-GM-MUL", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/rpm-test.json0000644000175000017500000001117115264504421020065 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "rpm often use qualifiers. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:Rpm/fedora/curl@7.50.3-1.fc25?Arch=i386&Distro=fedora-25", "expected_output": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_failure": false, "expected_message": null }, { "description": "rpm often use qualifiers", "test_group": "required", "test_type": "parse", "input": "pkg:Rpm/fedora/curl@7.50.3-1.fc25?Arch=i386&Distro=fedora-25", "expected_failure": true, "expected_message": "Should fail as qualifier keys are not in lowercase" }, { "description": "rpm often use qualifiers. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_output": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_failure": false, "expected_message": null }, { "description": "rpm often use qualifiers", "test_group": "required", "test_type": "build", "input": { "type": "rpm", "namespace": "fedora", "name": "curl", "version": "7.50.3-1.fc25", "qualifiers": { "arch": "i386", "distro": "fedora-25" }, "subpath": null }, "expected_output": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: rpm", "test_group": "required", "test_type": "parse", "input": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_output": { "type": "rpm", "namespace": "fedora", "name": "curl", "version": "7.50.3-1.fc25", "qualifiers": { "arch": "i386", "distro": "fedora-25" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: rpm", "test_group": "required", "test_type": "validate", "input": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_output": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: rpm", "test_group": "required", "test_type": "build", "input": { "type": "rpm", "namespace": "fedora", "name": "curl", "version": "7.50.3-1.fc25", "qualifiers": { "arch": "i386", "distro": "fedora-25" }, "subpath": null }, "expected_output": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: rpm", "test_group": "required", "test_type": "parse", "input": "pkg:rpm/fedora/centerim@4.22.10-1.el6?arch=i686&epoch=1&distro=fedora-25", "expected_output": { "type": "rpm", "namespace": "fedora", "name": "centerim", "version": "4.22.10-1.el6", "qualifiers": { "arch": "i686", "distro": "fedora-25", "epoch": "1" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: rpm", "test_group": "required", "test_type": "validate", "input": "pkg:rpm/fedora/centerim@4.22.10-1.el6?arch=i686&epoch=1&distro=fedora-25", "expected_output": "pkg:rpm/fedora/centerim@4.22.10-1.el6?arch=i686&distro=fedora-25&epoch=1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: rpm", "test_group": "required", "test_type": "build", "input": { "type": "rpm", "namespace": "fedora", "name": "centerim", "version": "4.22.10-1.el6", "qualifiers": { "arch": "i686", "distro": "fedora-25", "epoch": "1" }, "subpath": null }, "expected_output": "pkg:rpm/fedora/centerim@4.22.10-1.el6?arch=i686&distro=fedora-25&epoch=1", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/bitbucket-test.json0000644000175000017500000000647015264504421021251 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "bitbucket namespace and name should be lowercased. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:bitbucket/birKenfeld/pyGments-main@244fd47e07d1014f0aed9c", "expected_output": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "bitbucket namespace and name should be lowercased", "test_group": "required", "test_type": "parse", "input": "pkg:bitbucket/birKenfeld/pyGments-main@244fd47e07d1014f0aed9c", "expected_output": { "type": "bitbucket", "namespace": "birkenfeld", "name": "pygments-main", "version": "244fd47e07d1014f0aed9c", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "bitbucket namespace and name should be lowercased. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_output": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "bitbucket namespace and name should be lowercased", "test_group": "required", "test_type": "build", "input": { "type": "bitbucket", "namespace": "birkenfeld", "name": "pygments-main", "version": "244fd47e07d1014f0aed9c", "qualifiers": null, "subpath": null }, "expected_output": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: bitbucket", "test_group": "required", "test_type": "parse", "input": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_output": { "type": "bitbucket", "namespace": "birkenfeld", "name": "pygments-main", "version": "244fd47e07d1014f0aed9c", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: bitbucket", "test_group": "required", "test_type": "validate", "input": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_output": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: bitbucket", "test_group": "required", "test_type": "build", "input": { "type": "bitbucket", "namespace": "birkenfeld", "name": "pygments-main", "version": "244fd47e07d1014f0aed9c", "qualifiers": null, "subpath": null }, "expected_output": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/golang-test.json0000644000175000017500000001766715264504421020556 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid go purl without version and with subpath. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:GOLANG/google.golang.org/genproto#/googleapis/api/annotations/", "expected_output": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "valid go purl without version and with subpath", "test_group": "required", "test_type": "parse", "input": "pkg:GOLANG/google.golang.org/genproto#/googleapis/api/annotations/", "expected_output": { "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_failure": false, "expected_message": null }, { "description": "valid go purl without version and with subpath. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_output": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "valid go purl without version and with subpath", "test_group": "required", "test_type": "build", "input": { "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_output": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "valid go purl with version and subpath. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:GOLANG/google.golang.org/genproto@abcdedf#/googleapis/api/annotations/", "expected_output": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "valid go purl with version and subpath", "test_group": "required", "test_type": "parse", "input": "pkg:GOLANG/google.golang.org/genproto@abcdedf#/googleapis/api/annotations/", "expected_output": { "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": "abcdedf", "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_failure": false, "expected_message": null }, { "description": "valid go purl with version and subpath. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "expected_output": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "valid go purl with version and subpath", "test_group": "required", "test_type": "build", "input": { "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": "abcdedf", "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_output": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: golang", "test_group": "required", "test_type": "parse", "input": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c", "expected_output": { "type": "golang", "namespace": "github.com/gorilla", "name": "context", "version": "234fd47e07d1004f0aed9c", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: golang", "test_group": "required", "test_type": "validate", "input": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c", "expected_output": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: golang", "test_group": "required", "test_type": "build", "input": { "type": "golang", "namespace": "github.com/gorilla", "name": "context", "version": "234fd47e07d1004f0aed9c", "qualifiers": null, "subpath": null }, "expected_output": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: golang", "test_group": "required", "test_type": "parse", "input": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_output": { "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: golang", "test_group": "required", "test_type": "validate", "input": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_output": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: golang", "test_group": "required", "test_type": "build", "input": { "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_output": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: golang", "test_group": "required", "test_type": "parse", "input": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c#api", "expected_output": { "type": "golang", "namespace": "github.com/gorilla", "name": "context", "version": "234fd47e07d1004f0aed9c", "qualifiers": null, "subpath": "api" }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: golang", "test_group": "required", "test_type": "validate", "input": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c#api", "expected_output": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c#api", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: golang", "test_group": "required", "test_type": "build", "input": { "type": "golang", "namespace": "github.com/gorilla", "name": "context", "version": "234fd47e07d1004f0aed9c", "qualifiers": null, "subpath": "api" }, "expected_output": "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c#api", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/bitnami-test.json0000644000175000017500000001271115264504421020713 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: bitnami", "test_group": "required", "test_type": "parse", "input": "pkg:bitnami/wordpress?distro=debian-12", "expected_output": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": null, "qualifiers": { "distro": "debian-12" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: bitnami", "test_group": "required", "test_type": "validate", "input": "pkg:bitnami/wordpress?distro=debian-12", "expected_output": "pkg:bitnami/wordpress?distro=debian-12", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: bitnami", "test_group": "required", "test_type": "build", "input": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": null, "qualifiers": { "distro": "debian-12" }, "subpath": null }, "expected_output": "pkg:bitnami/wordpress?distro=debian-12", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: bitnami", "test_group": "required", "test_type": "parse", "input": "pkg:bitnami/wordpress@6.2.0?distro=debian-12", "expected_output": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": "6.2.0", "qualifiers": { "distro": "debian-12" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: bitnami", "test_group": "required", "test_type": "validate", "input": "pkg:bitnami/wordpress@6.2.0?distro=debian-12", "expected_output": "pkg:bitnami/wordpress@6.2.0?distro=debian-12", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: bitnami", "test_group": "required", "test_type": "build", "input": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": "6.2.0", "qualifiers": { "distro": "debian-12" }, "subpath": null }, "expected_output": "pkg:bitnami/wordpress@6.2.0?distro=debian-12", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: bitnami", "test_group": "required", "test_type": "parse", "input": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=debian-12", "expected_output": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": "6.2.0", "qualifiers": { "arch": "arm64", "distro": "debian-12" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: bitnami", "test_group": "required", "test_type": "validate", "input": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=debian-12", "expected_output": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=debian-12", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: bitnami", "test_group": "required", "test_type": "build", "input": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": "6.2.0", "qualifiers": { "arch": "arm64", "distro": "debian-12" }, "subpath": null }, "expected_output": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=debian-12", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: bitnami", "test_group": "required", "test_type": "parse", "input": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=photon-4", "expected_output": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": "6.2.0", "qualifiers": { "arch": "arm64", "distro": "photon-4" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: bitnami", "test_group": "required", "test_type": "validate", "input": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=photon-4", "expected_output": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=photon-4", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: bitnami", "test_group": "required", "test_type": "build", "input": { "type": "bitnami", "namespace": null, "name": "wordpress", "version": "6.2.0", "qualifiers": { "arch": "arm64", "distro": "photon-4" }, "subpath": null }, "expected_output": "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=photon-4", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/git-test.json0000644000175000017500000000676315264504421020065 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "git namespace and name should be lowercased. Validate an input purl.", "test_group": "recommended", "test_type": "validate", "input": "pkg:git/github/Package-url/purl-Spec@244fd47e07d1004f0aed9c", "expected_output": "pkg:git/github/package-url/purl-spec@244fd47e07d1004f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: git", "test_group": "required", "test_type": "parse", "input": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0", "expected_output": { "type": "git", "namespace": "codeberg.org", "name": "forgejo/forgejo", "version": "a72d2c07cfca03b55371089de6aa230d8c951fa0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Validate test for PURL type: git", "test_group": "required", "test_type": "validate", "input": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0", "expected_output": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: git", "test_group": "required", "test_type": "build", "input": { "type": "git", "namespace": "codeberg.org", "name": "forgejo/forgejo", "version": "a72d2c07cfca03b55371089de6aa230d8c951fa0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: git", "test_group": "required", "test_type": "parse", "input": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0#options/locale_readme.md", "expected_output": { "type": "git", "namespace": "codeberg.org", "name": "forgejo/forgejo", "version": "a72d2c07cfca03b55371089de6aa230d8c951fa0", "qualifiers": null, "subpath": "options/locale_readme.md" }, "expected_failure": false, "expected_message": null }, { "description": "Validate test for PURL type: git", "test_group": "required", "test_type": "validate", "input": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0#options/locale_readme.md", "expected_output": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0#options/locale_readme.md", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: git", "test_group": "required", "test_type": "build", "input": { "type": "git", "namespace": "codeberg.org", "name": "forgejo/forgejo", "version": "a72d2c07cfca03b55371089de6aa230d8c951fa0", "qualifiers": null, "subpath": "options/locale_readme.md" }, "expected_output": "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0#options/locale_readme.md", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/hackage-test.json0000644000175000017500000001431215264504421020652 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid hackage purl. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_output": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_failure": false, "expected_message": null }, { "description": "valid hackage purl", "test_group": "required", "test_type": "parse", "input": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_output": { "type": "hackage", "namespace": null, "name": "AC-HalfInteger", "version": "1.2.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid hackage purl. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_output": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_failure": false, "expected_message": null }, { "description": "valid hackage purl", "test_group": "required", "test_type": "build", "input": { "type": "hackage", "namespace": null, "name": "AC-HalfInteger", "version": "1.2.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_failure": false, "expected_message": null }, { "description": "name and version are always required", "test_group": "required", "test_type": "parse", "input": "pkg:hackage", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "name and version are always required", "test_group": "required", "test_type": "parse", "input": "pkg:hackage", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "name and version are always required", "test_group": "required", "test_type": "build", "input": { "type": "hackage", "namespace": null, "name": null, "version": null, "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "Parse test for PURL type: hackage", "test_group": "required", "test_type": "parse", "input": "pkg:hackage/a50@0.5", "expected_output": { "type": "hackage", "namespace": null, "name": "a50", "version": "0.5", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: hackage", "test_group": "required", "test_type": "validate", "input": "pkg:hackage/a50@0.5", "expected_output": "pkg:hackage/a50@0.5", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: hackage", "test_group": "required", "test_type": "build", "input": { "type": "hackage", "namespace": null, "name": "a50", "version": "0.5", "qualifiers": null, "subpath": null }, "expected_output": "pkg:hackage/a50@0.5", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: hackage", "test_group": "required", "test_type": "parse", "input": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_output": { "type": "hackage", "namespace": null, "name": "AC-HalfInteger", "version": "1.2.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: hackage", "test_group": "required", "test_type": "validate", "input": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_output": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: hackage", "test_group": "required", "test_type": "build", "input": { "type": "hackage", "namespace": null, "name": "AC-HalfInteger", "version": "1.2.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:hackage/AC-HalfInteger@1.2.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: hackage", "test_group": "required", "test_type": "parse", "input": "pkg:hackage/3d-graphics-examples@0.0.0.2", "expected_output": { "type": "hackage", "namespace": null, "name": "3d-graphics-examples", "version": "0.0.0.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: hackage", "test_group": "required", "test_type": "validate", "input": "pkg:hackage/3d-graphics-examples@0.0.0.2", "expected_output": "pkg:hackage/3d-graphics-examples@0.0.0.2", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: hackage", "test_group": "required", "test_type": "build", "input": { "type": "hackage", "namespace": null, "name": "3d-graphics-examples", "version": "0.0.0.2", "qualifiers": null, "subpath": null }, "expected_output": "pkg:hackage/3d-graphics-examples@0.0.0.2", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/oci-test.json0000644000175000017500000001431015264504421020037 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: oci", "test_group": "recommended", "test_type": "parse", "input": "pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=docker.io/library/debian&arch=amd64&tag=latest", "expected_output": { "type": "oci", "namespace": null, "name": "debian", "version": "sha256:244fd47e07d10", "qualifiers": { "arch": "amd64", "repository_url": "docker.io/library/debian", "tag": "latest" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: oci", "test_group": "recommended", "test_type": "validate", "input": "pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=docker.io/library/debian&arch=amd64&tag=latest", "expected_output": "pkg:oci/debian@sha256:244fd47e07d10?arch=amd64&repository_url=docker.io%2Flibrary%2Fdebian&tag=latest", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: oci", "test_group": "required", "test_type": "build", "input": { "type": "oci", "namespace": null, "name": "debian", "version": "sha256:244fd47e07d10", "qualifiers": { "arch": "amd64", "repository_url": "docker.io/library/debian", "tag": "latest" }, "subpath": null }, "expected_output": "pkg:oci/debian@sha256:244fd47e07d10?arch=amd64&repository_url=docker.io%2Flibrary%2Fdebian&tag=latest", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: oci", "test_group": "recommended", "test_type": "parse", "input": "pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=ghcr.io/debian&tag=bullseye", "expected_output": { "type": "oci", "namespace": null, "name": "debian", "version": "sha256:244fd47e07d10", "qualifiers": { "repository_url": "ghcr.io/debian", "tag": "bullseye" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: oci", "test_group": "recommended", "test_type": "validate", "input": "pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=ghcr.io/debian&tag=bullseye", "expected_output": "pkg:oci/debian@sha256:244fd47e07d10?repository_url=ghcr.io%2Fdebian&tag=bullseye", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: oci", "test_group": "recommended", "test_type": "build", "input": { "type": "oci", "namespace": null, "name": "debian", "version": "sha256:244fd47e07d10", "qualifiers": { "repository_url": "ghcr.io/debian", "tag": "bullseye" }, "subpath": null }, "expected_output": "pkg:oci/debian@sha256:244fd47e07d10?repository_url=ghcr.io%2Fdebian&tag=bullseye", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: oci", "test_group": "recommended", "test_type": "parse", "input": "pkg:oci/static@sha256%3A244fd47e07d10?repository_url=gcr.io/distroless/static&tag=latest", "expected_output": { "type": "oci", "namespace": null, "name": "static", "version": "sha256:244fd47e07d10", "qualifiers": { "repository_url": "gcr.io/distroless/static", "tag": "latest" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: oci", "test_group": "recommended", "test_type": "validate", "input": "pkg:oci/static@sha256%3A244fd47e07d10?repository_url=gcr.io/distroless/static&tag=latest", "expected_output": "pkg:oci/static@sha256:244fd47e07d10?repository_url=gcr.io%2Fdistroless%2Fstatic&tag=latest", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: oci", "test_group": "required", "test_type": "build", "input": { "type": "oci", "namespace": null, "name": "static", "version": "sha256:244fd47e07d10", "qualifiers": { "repository_url": "gcr.io/distroless/static", "tag": "latest" }, "subpath": null }, "expected_output": "pkg:oci/static@sha256:244fd47e07d10?repository_url=gcr.io%2Fdistroless%2Fstatic&tag=latest", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: oci", "test_group": "recommended", "test_type": "parse", "input": "pkg:oci/hello-wasm@sha256%3A244fd47e07d10?tag=v1", "expected_output": { "type": "oci", "namespace": null, "name": "hello-wasm", "version": "sha256:244fd47e07d10", "qualifiers": { "tag": "v1" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: oci", "test_group": "recommended", "test_type": "validate", "input": "pkg:oci/hello-wasm@sha256%3A244fd47e07d10?tag=v1", "expected_output": "pkg:oci/hello-wasm@sha256:244fd47e07d10?tag=v1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: oci", "test_group": "required", "test_type": "build", "input": { "type": "oci", "namespace": null, "name": "hello-wasm", "version": "sha256:244fd47e07d10", "qualifiers": { "tag": "v1" }, "subpath": null }, "expected_output": "pkg:oci/hello-wasm@sha256:244fd47e07d10?tag=v1", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/swift-test.json0000644000175000017500000001472315264504421020431 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid swift purl. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_output": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_failure": false, "expected_message": null }, { "description": "valid swift purl", "test_group": "required", "test_type": "parse", "input": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_output": { "type": "swift", "namespace": "github.com/Alamofire", "name": "Alamofire", "version": "5.4.3", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid swift purl. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_output": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_failure": false, "expected_message": null }, { "description": "valid swift purl", "test_group": "required", "test_type": "build", "input": { "type": "swift", "namespace": "github.com/Alamofire", "name": "Alamofire", "version": "5.4.3", "qualifiers": null, "subpath": null }, "expected_output": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_failure": false, "expected_message": null }, { "description": "invalid swift purl without namespace", "test_group": "required", "test_type": "parse", "input": "pkg:swift/Alamofire@5.4.3", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "invalid swift purl without namespace", "test_group": "required", "test_type": "parse", "input": "pkg:swift/Alamofire@5.4.3", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "invalid swift purl without namespace", "test_group": "required", "test_type": "build", "input": { "type": "swift", "namespace": null, "name": "Alamofire", "version": "5.4.3", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "invalid swift purl without name", "test_group": "required", "test_type": "parse", "input": "pkg:swift/github.com/Alamofire/@5.4.3", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "invalid swift purl without name", "test_group": "required", "test_type": "parse", "input": "pkg:swift/github.com/Alamofire/@5.4.3", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "invalid swift purl without name", "test_group": "required", "test_type": "build", "input": { "type": "swift", "namespace": "github.com/Alamofire", "name": null, "version": "5.4.3", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "Parse test for PURL type: swift", "test_group": "required", "test_type": "parse", "input": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_output": { "type": "swift", "namespace": "github.com/Alamofire", "name": "Alamofire", "version": "5.4.3", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: swift", "test_group": "required", "test_type": "validate", "input": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_output": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: swift", "test_group": "required", "test_type": "build", "input": { "type": "swift", "namespace": "github.com/Alamofire", "name": "Alamofire", "version": "5.4.3", "qualifiers": null, "subpath": null }, "expected_output": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: swift", "test_group": "required", "test_type": "parse", "input": "pkg:swift/github.com/RxSwiftCommunity/RxFlow@2.12.4", "expected_output": { "type": "swift", "namespace": "github.com/RxSwiftCommunity", "name": "RxFlow", "version": "2.12.4", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: swift", "test_group": "required", "test_type": "validate", "input": "pkg:swift/github.com/RxSwiftCommunity/RxFlow@2.12.4", "expected_output": "pkg:swift/github.com/RxSwiftCommunity/RxFlow@2.12.4", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: swift", "test_group": "required", "test_type": "build", "input": { "type": "swift", "namespace": "github.com/RxSwiftCommunity", "name": "RxFlow", "version": "2.12.4", "qualifiers": null, "subpath": null }, "expected_output": "pkg:swift/github.com/RxSwiftCommunity/RxFlow@2.12.4", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/luarocks-test.json0000644000175000017500000001021115264504421021104 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: luarocks", "test_group": "required", "test_type": "parse", "input": "pkg:luarocks/luasocket@3.1.0-1", "expected_output": { "type": "luarocks", "namespace": null, "name": "luasocket", "version": "3.1.0-1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: luarocks", "test_group": "required", "test_type": "validate", "input": "pkg:luarocks/luasocket@3.1.0-1", "expected_output": "pkg:luarocks/luasocket@3.1.0-1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: luarocks", "test_group": "required", "test_type": "build", "input": { "type": "luarocks", "namespace": null, "name": "luasocket", "version": "3.1.0-1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:luarocks/luasocket@3.1.0-1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: luarocks", "test_group": "required", "test_type": "parse", "input": "pkg:luarocks/hisham/luafilesystem@1.8.0-1", "expected_output": { "type": "luarocks", "namespace": "hisham", "name": "luafilesystem", "version": "1.8.0-1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: luarocks", "test_group": "required", "test_type": "validate", "input": "pkg:luarocks/hisham/luafilesystem@1.8.0-1", "expected_output": "pkg:luarocks/hisham/luafilesystem@1.8.0-1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: luarocks", "test_group": "required", "test_type": "build", "input": { "type": "luarocks", "namespace": "hisham", "name": "luafilesystem", "version": "1.8.0-1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:luarocks/hisham/luafilesystem@1.8.0-1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: luarocks", "test_group": "required", "test_type": "parse", "input": "pkg:luarocks/username/packagename@0.1.0-1?repository_url=https://example.com/private_rocks_server/", "expected_output": { "type": "luarocks", "namespace": "username", "name": "packagename", "version": "0.1.0-1", "qualifiers": { "repository_url": "https://example.com/private_rocks_server/" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: luarocks", "test_group": "required", "test_type": "validate", "input": "pkg:luarocks/username/packagename@0.1.0-1?repository_url=https://example.com/private_rocks_server/", "expected_output": "pkg:luarocks/username/packagename@0.1.0-1?repository_url=https:%2F%2Fexample.com%2Fprivate_rocks_server%2F", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: luarocks", "test_group": "required", "test_type": "build", "input": { "type": "luarocks", "namespace": "username", "name": "packagename", "version": "0.1.0-1", "qualifiers": { "repository_url": "https://example.com/private_rocks_server/" }, "subpath": null }, "expected_output": "pkg:luarocks/username/packagename@0.1.0-1?repository_url=https:%2F%2Fexample.com%2Fprivate_rocks_server%2F", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/docker-test.json0000644000175000017500000001406515264504421020543 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "docker uses qualifiers and hash image id as versions. Roundtrip an input purl wrongly percent encoded to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:docker/customer/dockerimage@sha256%3A244fd47e07d1004f0aed9c?repository_url=gcr.io", "expected_output": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "expected_failure": false, "expected_message": null }, { "description": "docker uses qualifiers and hash image id as versions", "test_group": "required", "test_type": "parse", "input": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "expected_output": { "type": "docker", "namespace": "customer", "name": "dockerimage", "version": "sha256:244fd47e07d1004f0aed9c", "qualifiers": { "repository_url": "gcr.io" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "docker uses qualifiers and hash image id as versions. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "expected_output": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "expected_failure": false, "expected_message": null }, { "description": "docker uses qualifiers and hash image id as versions", "test_group": "required", "test_type": "build", "input": { "type": "docker", "namespace": "customer", "name": "dockerimage", "version": "sha256:244fd47e07d1004f0aed9c", "qualifiers": { "repository_url": "gcr.io" }, "subpath": null }, "expected_output": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: docker", "test_group": "required", "test_type": "parse", "input": "pkg:docker/cassandra@latest", "expected_output": { "type": "docker", "namespace": null, "name": "cassandra", "version": "latest", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: docker", "test_group": "required", "test_type": "validate", "input": "pkg:docker/cassandra@latest", "expected_output": "pkg:docker/cassandra@latest", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: docker", "test_group": "required", "test_type": "build", "input": { "type": "docker", "namespace": null, "name": "cassandra", "version": "latest", "qualifiers": null, "subpath": null }, "expected_output": "pkg:docker/cassandra@latest", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: docker", "test_group": "required", "test_type": "parse", "input": "pkg:docker/smartentry/debian@dc437cc87d10", "expected_output": { "type": "docker", "namespace": "smartentry", "name": "debian", "version": "dc437cc87d10", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: docker", "test_group": "required", "test_type": "validate", "input": "pkg:docker/smartentry/debian@dc437cc87d10", "expected_output": "pkg:docker/smartentry/debian@dc437cc87d10", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: docker", "test_group": "required", "test_type": "build", "input": { "type": "docker", "namespace": "smartentry", "name": "debian", "version": "dc437cc87d10", "qualifiers": null, "subpath": null }, "expected_output": "pkg:docker/smartentry/debian@dc437cc87d10", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: docker", "test_group": "required", "test_type": "parse", "input": "pkg:docker/customer/dockerimage@sha256:244fd47e07d10?repository_url=gcr.io", "expected_output": { "type": "docker", "namespace": "customer", "name": "dockerimage", "version": "sha256:244fd47e07d10", "qualifiers": { "repository_url": "gcr.io" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: docker", "test_group": "required", "test_type": "validate", "input": "pkg:docker/customer/dockerimage@sha256:244fd47e07d10?repository_url=gcr.io", "expected_output": "pkg:docker/customer/dockerimage@sha256:244fd47e07d10?repository_url=gcr.io", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: docker", "test_group": "required", "test_type": "build", "input": { "type": "docker", "namespace": "customer", "name": "dockerimage", "version": "sha256:244fd47e07d10", "qualifiers": { "repository_url": "gcr.io" }, "subpath": null }, "expected_output": "pkg:docker/customer/dockerimage@sha256:244fd47e07d10?repository_url=gcr.io", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/mlflow-test.json0000644000175000017500000003273415264504421020577 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "MLflow model tracked in Azure Databricks (case insensitive). Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:mlflow/CreditFraud@3?repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "expected_output": "pkg:mlflow/creditfraud@3?repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow", "expected_failure": false, "expected_message": null }, { "description": "MLflow model tracked in Azure Databricks (case insensitive)", "test_group": "required", "test_type": "parse", "input": "pkg:mlflow/CreditFraud@3?repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "expected_output": { "type": "mlflow", "namespace": null, "name": "creditfraud", "version": "3", "qualifiers": { "repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "MLflow model tracked in Azure Databricks (case insensitive). Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:mlflow/creditfraud@3?repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "expected_output": "pkg:mlflow/creditfraud@3?repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow", "expected_failure": false, "expected_message": null }, { "description": "MLflow model tracked in Azure Databricks (case insensitive)", "test_group": "required", "test_type": "build", "input": { "type": "mlflow", "namespace": null, "name": "creditfraud", "version": "3", "qualifiers": { "repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow" }, "subpath": null }, "expected_output": "pkg:mlflow/creditfraud@3?repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow", "expected_failure": false, "expected_message": null }, { "description": "MLflow model tracked in Azure ML (case sensitive). Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:mlflow/CreditFraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace", "expected_output": "pkg:mlflow/CreditFraud@3?repository_url=https:%2F%2Fwestus2.api.azureml.ms%2Fmlflow%2Fv1.0%2Fsubscriptions%2Fa50f2011-fab8-4164-af23-c62881ef8c95%2FresourceGroups%2FTestResourceGroup%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2FTestWorkspace", "expected_failure": false, "expected_message": null }, { "description": "MLflow model tracked in Azure ML (case sensitive)", "test_group": "required", "test_type": "parse", "input": "pkg:mlflow/CreditFraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace", "expected_output": { "type": "mlflow", "namespace": null, "name": "CreditFraud", "version": "3", "qualifiers": { "repository_url": "https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "MLflow model tracked in Azure ML (case sensitive). Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:mlflow/CreditFraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace", "expected_output": "pkg:mlflow/CreditFraud@3?repository_url=https:%2F%2Fwestus2.api.azureml.ms%2Fmlflow%2Fv1.0%2Fsubscriptions%2Fa50f2011-fab8-4164-af23-c62881ef8c95%2FresourceGroups%2FTestResourceGroup%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2FTestWorkspace", "expected_failure": false, "expected_message": null }, { "description": "MLflow model tracked in Azure ML (case sensitive)", "test_group": "required", "test_type": "build", "input": { "type": "mlflow", "namespace": null, "name": "CreditFraud", "version": "3", "qualifiers": { "repository_url": "https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace" }, "subpath": null }, "expected_output": "pkg:mlflow/CreditFraud@3?repository_url=https:%2F%2Fwestus2.api.azureml.ms%2Fmlflow%2Fv1.0%2Fsubscriptions%2Fa50f2011-fab8-4164-af23-c62881ef8c95%2FresourceGroups%2FTestResourceGroup%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2FTestWorkspace", "expected_failure": false, "expected_message": null }, { "description": "MLflow model with unique identifiers. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "expected_output": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a", "expected_failure": false, "expected_message": null }, { "description": "MLflow model with unique identifiers", "test_group": "required", "test_type": "parse", "input": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "expected_output": { "type": "mlflow", "namespace": null, "name": "trafficsigns", "version": "10", "qualifiers": { "model_uuid": "36233173b22f4c89b451f1228d700d49", "run_id": "410a3121-2709-4f88-98dd-dba0ef056b0a", "repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "MLflow model with unique identifiers. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a", "expected_output": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a", "expected_failure": false, "expected_message": null }, { "description": "MLflow model with unique identifiers", "test_group": "required", "test_type": "build", "input": { "type": "mlflow", "namespace": null, "name": "trafficsigns", "version": "10", "qualifiers": { "model_uuid": "36233173b22f4c89b451f1228d700d49", "run_id": "410a3121-2709-4f88-98dd-dba0ef056b0a", "repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow" }, "subpath": null }, "expected_output": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: mlflow", "test_group": "required", "test_type": "parse", "input": "pkg:mlflow/creditfraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace", "expected_output": { "type": "mlflow", "namespace": null, "name": "creditfraud", "version": "3", "qualifiers": { "repository_url": "https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: mlflow", "test_group": "required", "test_type": "validate", "input": "pkg:mlflow/creditfraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace", "expected_output": "pkg:mlflow/creditfraud@3?repository_url=https:%2F%2Fwestus2.api.azureml.ms%2Fmlflow%2Fv1.0%2Fsubscriptions%2Fa50f2011-fab8-4164-af23-c62881ef8c95%2FresourceGroups%2FTestResourceGroup%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2FTestWorkspace", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: mlflow", "test_group": "required", "test_type": "build", "input": { "type": "mlflow", "namespace": null, "name": "creditfraud", "version": "3", "qualifiers": { "repository_url": "https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace" }, "subpath": null }, "expected_output": "pkg:mlflow/creditfraud@3?repository_url=https:%2F%2Fwestus2.api.azureml.ms%2Fmlflow%2Fv1.0%2Fsubscriptions%2Fa50f2011-fab8-4164-af23-c62881ef8c95%2FresourceGroups%2FTestResourceGroup%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2FTestWorkspace", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: mlflow", "test_group": "required", "test_type": "parse", "input": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "expected_output": { "type": "mlflow", "namespace": null, "name": "trafficsigns", "version": "10", "qualifiers": { "model_uuid": "36233173b22f4c89b451f1228d700d49", "repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "run_id": "410a3121-2709-4f88-98dd-dba0ef056b0a" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: mlflow", "test_group": "required", "test_type": "validate", "input": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "expected_output": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: mlflow", "test_group": "required", "test_type": "build", "input": { "type": "mlflow", "namespace": null, "name": "trafficsigns", "version": "10", "qualifiers": { "model_uuid": "36233173b22f4c89b451f1228d700d49", "repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "run_id": "410a3121-2709-4f88-98dd-dba0ef056b0a" }, "subpath": null }, "expected_output": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/github-test.json0000644000175000017500000001106315264504421020551 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "github namespace and name should be lowercased. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:github/Package-url/purl-Spec@244fd47e07d1004f0aed9c", "expected_output": "pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "github namespace and name should be lowercased", "test_group": "required", "test_type": "parse", "input": "pkg:github/Package-url/purl-Spec@244fd47e07d1004f0aed9c", "expected_output": { "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004f0aed9c", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "github namespace and name should be lowercased. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c", "expected_output": "pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "github namespace and name should be lowercased", "test_group": "required", "test_type": "build", "input": { "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004f0aed9c", "qualifiers": null, "subpath": null }, "expected_output": "pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: github", "test_group": "required", "test_type": "parse", "input": "pkg:github/package-url/purl-spec@244fd47e07d1004", "expected_output": { "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: github", "test_group": "required", "test_type": "validate", "input": "pkg:github/package-url/purl-spec@244fd47e07d1004", "expected_output": "pkg:github/package-url/purl-spec@244fd47e07d1004", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: github", "test_group": "required", "test_type": "build", "input": { "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004", "qualifiers": null, "subpath": null }, "expected_output": "pkg:github/package-url/purl-spec@244fd47e07d1004", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: github", "test_group": "required", "test_type": "parse", "input": "pkg:github/package-url/purl-spec@244fd47e07d1004#everybody/loves/dogs", "expected_output": { "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004", "qualifiers": null, "subpath": "everybody/loves/dogs" }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: github", "test_group": "required", "test_type": "validate", "input": "pkg:github/package-url/purl-spec@244fd47e07d1004#everybody/loves/dogs", "expected_output": "pkg:github/package-url/purl-spec@244fd47e07d1004#everybody/loves/dogs", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: github", "test_group": "required", "test_type": "build", "input": { "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004", "qualifiers": null, "subpath": "everybody/loves/dogs" }, "expected_output": "pkg:github/package-url/purl-spec@244fd47e07d1004#everybody/loves/dogs", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/conan-test.json0000644000175000017500000002111415264504421020363 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid conan purl. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:conan/cctz@2.3", "expected_output": "pkg:conan/cctz@2.3", "expected_failure": false, "expected_message": null }, { "description": "valid conan purl", "test_group": "required", "test_type": "parse", "input": "pkg:conan/cctz@2.3", "expected_output": { "type": "conan", "namespace": null, "name": "cctz", "version": "2.3", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid conan purl. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:conan/cctz@2.3", "expected_output": "pkg:conan/cctz@2.3", "expected_failure": false, "expected_message": null }, { "description": "valid conan purl", "test_group": "required", "test_type": "build", "input": { "type": "conan", "namespace": null, "name": "cctz", "version": "2.3", "qualifiers": null, "subpath": null }, "expected_output": "pkg:conan/cctz@2.3", "expected_failure": false, "expected_message": null }, { "description": "valid conan purl with namespace and qualifier channel. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "expected_output": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "expected_failure": false, "expected_message": null }, { "description": "valid conan purl with namespace and qualifier channel", "test_group": "required", "test_type": "parse", "input": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "expected_output": { "type": "conan", "namespace": "bincrafters", "name": "cctz", "version": "2.3", "qualifiers": { "channel": "stable" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid conan purl with namespace and qualifier channel. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "expected_output": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "expected_failure": false, "expected_message": null }, { "description": "valid conan purl with namespace and qualifier channel", "test_group": "required", "test_type": "build", "input": { "type": "conan", "namespace": "bincrafters", "name": "cctz", "version": "2.3", "qualifiers": { "channel": "stable" }, "subpath": null }, "expected_output": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: conan", "test_group": "required", "test_type": "parse", "input": "pkg:conan/openssl@3.0.3", "expected_output": { "type": "conan", "namespace": null, "name": "openssl", "version": "3.0.3", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: conan", "test_group": "required", "test_type": "validate", "input": "pkg:conan/openssl@3.0.3", "expected_output": "pkg:conan/openssl@3.0.3", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: conan", "test_group": "required", "test_type": "build", "input": { "type": "conan", "namespace": null, "name": "openssl", "version": "3.0.3", "qualifiers": null, "subpath": null }, "expected_output": "pkg:conan/openssl@3.0.3", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: conan", "test_group": "required", "test_type": "parse", "input": "pkg:conan/openssl.org/openssl@3.0.3?user=bincrafters&channel=stable", "expected_output": { "type": "conan", "namespace": "openssl.org", "name": "openssl", "version": "3.0.3", "qualifiers": { "channel": "stable", "user": "bincrafters" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: conan", "test_group": "required", "test_type": "validate", "input": "pkg:conan/openssl.org/openssl@3.0.3?user=bincrafters&channel=stable", "expected_output": "pkg:conan/openssl.org/openssl@3.0.3?channel=stable&user=bincrafters", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: conan", "test_group": "required", "test_type": "build", "input": { "type": "conan", "namespace": "openssl.org", "name": "openssl", "version": "3.0.3", "qualifiers": { "channel": "stable", "user": "bincrafters" }, "subpath": null }, "expected_output": "pkg:conan/openssl.org/openssl@3.0.3?channel=stable&user=bincrafters", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: conan", "test_group": "required", "test_type": "parse", "input": "pkg:conan/openssl.org/openssl@3.0.3?arch=x86_64&build_type=Debug&compiler=Visual%20Studio&compiler.runtime=MDd&compiler.version=16&os=Windows&shared=True&rrev=93a82349c31917d2d674d22065c7a9ef9f380c8e&prev=b429db8a0e324114c25ec387bfd8281f330d7c5c", "expected_output": { "type": "conan", "namespace": "openssl.org", "name": "openssl", "version": "3.0.3", "qualifiers": { "arch": "x86_64", "build_type": "Debug", "compiler": "Visual Studio", "compiler.runtime": "MDd", "compiler.version": "16", "os": "Windows", "prev": "b429db8a0e324114c25ec387bfd8281f330d7c5c", "rrev": "93a82349c31917d2d674d22065c7a9ef9f380c8e", "shared": "True" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: conan", "test_group": "required", "test_type": "validate", "input": "pkg:conan/openssl.org/openssl@3.0.3?arch=x86_64&build_type=Debug&compiler=Visual%20Studio&compiler.runtime=MDd&compiler.version=16&os=Windows&shared=True&rrev=93a82349c31917d2d674d22065c7a9ef9f380c8e&prev=b429db8a0e324114c25ec387bfd8281f330d7c5c", "expected_output": "pkg:conan/openssl.org/openssl@3.0.3?arch=x86_64&build_type=Debug&compiler=Visual%20Studio&compiler.runtime=MDd&compiler.version=16&os=Windows&prev=b429db8a0e324114c25ec387bfd8281f330d7c5c&rrev=93a82349c31917d2d674d22065c7a9ef9f380c8e&shared=True", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: conan", "test_group": "required", "test_type": "build", "input": { "type": "conan", "namespace": "openssl.org", "name": "openssl", "version": "3.0.3", "qualifiers": { "arch": "x86_64", "build_type": "Debug", "compiler": "Visual Studio", "compiler.runtime": "MDd", "compiler.version": "16", "os": "Windows", "prev": "b429db8a0e324114c25ec387bfd8281f330d7c5c", "rrev": "93a82349c31917d2d674d22065c7a9ef9f380c8e", "shared": "True" }, "subpath": null }, "expected_output": "pkg:conan/openssl.org/openssl@3.0.3?arch=x86_64&build_type=Debug&compiler=Visual%20Studio&compiler.runtime=MDd&compiler.version=16&os=Windows&prev=b429db8a0e324114c25ec387bfd8281f330d7c5c&rrev=93a82349c31917d2d674d22065c7a9ef9f380c8e&shared=True", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/apk-test.json0000644000175000017500000000512115264504421020040 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: apk", "test_group": "required", "test_type": "parse", "input": "pkg:apk/alpine/curl@7.83.0-r0?arch=x86", "expected_output": { "type": "apk", "namespace": "alpine", "name": "curl", "version": "7.83.0-r0", "qualifiers": { "arch": "x86" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: apk", "test_group": "required", "test_type": "validate", "input": "pkg:apk/alpine/curl@7.83.0-r0?arch=x86", "expected_output": "pkg:apk/alpine/curl@7.83.0-r0?arch=x86", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: apk", "test_group": "required", "test_type": "build", "input": { "type": "apk", "namespace": "alpine", "name": "curl", "version": "7.83.0-r0", "qualifiers": { "arch": "x86" }, "subpath": null }, "expected_output": "pkg:apk/alpine/curl@7.83.0-r0?arch=x86", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: apk", "test_group": "required", "test_type": "parse", "input": "pkg:apk/alpine/apk@2.12.9-r3?arch=x86", "expected_output": { "type": "apk", "namespace": "alpine", "name": "apk", "version": "2.12.9-r3", "qualifiers": { "arch": "x86" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: apk", "test_group": "required", "test_type": "validate", "input": "pkg:apk/alpine/apk@2.12.9-r3?arch=x86", "expected_output": "pkg:apk/alpine/apk@2.12.9-r3?arch=x86", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: apk", "test_group": "required", "test_type": "build", "input": { "type": "apk", "namespace": "alpine", "name": "apk", "version": "2.12.9-r3", "qualifiers": { "arch": "x86" }, "subpath": null }, "expected_output": "pkg:apk/alpine/apk@2.12.9-r3?arch=x86", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/cran-test.json0000644000175000017500000001353315264504421020216 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid cran purl. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:cran/A3@0.9.1", "expected_output": "pkg:cran/A3@0.9.1", "expected_failure": false, "expected_message": null }, { "description": "valid cran purl", "test_group": "required", "test_type": "parse", "input": "pkg:cran/A3@0.9.1", "expected_output": { "type": "cran", "namespace": null, "name": "A3", "version": "0.9.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid cran purl. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:cran/A3@0.9.1", "expected_output": "pkg:cran/A3@0.9.1", "expected_failure": false, "expected_message": null }, { "description": "valid cran purl", "test_group": "required", "test_type": "build", "input": { "type": "cran", "namespace": null, "name": "A3", "version": "0.9.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cran/A3@0.9.1", "expected_failure": false, "expected_message": null }, { "description": "invalid cran purl without name", "test_group": "required", "test_type": "parse", "input": "pkg:cran/@0.9.1", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "invalid cran purl without name", "test_group": "required", "test_type": "parse", "input": "pkg:cran/@0.9.1", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "invalid cran purl without name", "test_group": "required", "test_type": "build", "input": { "type": "cran", "namespace": null, "name": null, "version": "0.9.1", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "Parse test for PURL type: cran", "test_group": "required", "test_type": "parse", "input": "pkg:cran/A3@1.0.0", "expected_output": { "type": "cran", "namespace": null, "name": "A3", "version": "1.0.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cran", "test_group": "required", "test_type": "validate", "input": "pkg:cran/A3@1.0.0", "expected_output": "pkg:cran/A3@1.0.0", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cran", "test_group": "required", "test_type": "build", "input": { "type": "cran", "namespace": null, "name": "A3", "version": "1.0.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cran/A3@1.0.0", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cran", "test_group": "required", "test_type": "parse", "input": "pkg:cran/rJava@1.0-4", "expected_output": { "type": "cran", "namespace": null, "name": "rJava", "version": "1.0-4", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cran", "test_group": "required", "test_type": "validate", "input": "pkg:cran/rJava@1.0-4", "expected_output": "pkg:cran/rJava@1.0-4", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cran", "test_group": "required", "test_type": "build", "input": { "type": "cran", "namespace": null, "name": "rJava", "version": "1.0-4", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cran/rJava@1.0-4", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cran", "test_group": "required", "test_type": "parse", "input": "pkg:cran/caret@6.0-88", "expected_output": { "type": "cran", "namespace": null, "name": "caret", "version": "6.0-88", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cran", "test_group": "required", "test_type": "validate", "input": "pkg:cran/caret@6.0-88", "expected_output": "pkg:cran/caret@6.0-88", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cran", "test_group": "required", "test_type": "build", "input": { "type": "cran", "namespace": null, "name": "caret", "version": "6.0-88", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cran/caret@6.0-88", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/deb-test.json0000644000175000017500000002063615264504421020027 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "debian can use qualifiers. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_output": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_failure": false, "expected_message": null }, { "description": "debian can use qualifiers", "test_group": "required", "test_type": "parse", "input": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_output": { "type": "deb", "namespace": "debian", "name": "curl", "version": "7.50.3-1", "qualifiers": { "arch": "i386", "distro": "jessie" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "debian can use qualifiers. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_output": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_failure": false, "expected_message": null }, { "description": "debian can use qualifiers", "test_group": "required", "test_type": "build", "input": { "type": "deb", "namespace": "debian", "name": "curl", "version": "7.50.3-1", "qualifiers": { "arch": "i386", "distro": "jessie" }, "subpath": null }, "expected_output": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: deb", "test_group": "required", "test_type": "parse", "input": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_output": { "type": "deb", "namespace": "debian", "name": "curl", "version": "7.50.3-1", "qualifiers": { "arch": "i386", "distro": "jessie" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: deb", "test_group": "required", "test_type": "validate", "input": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_output": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: deb", "test_group": "required", "test_type": "build", "input": { "type": "deb", "namespace": "debian", "name": "curl", "version": "7.50.3-1", "qualifiers": { "arch": "i386", "distro": "jessie" }, "subpath": null }, "expected_output": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: deb", "test_group": "required", "test_type": "parse", "input": "pkg:deb/debian/dpkg@1.19.0.4?arch=amd64&distro=stretch", "expected_output": { "type": "deb", "namespace": "debian", "name": "dpkg", "version": "1.19.0.4", "qualifiers": { "arch": "amd64", "distro": "stretch" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: deb", "test_group": "required", "test_type": "validate", "input": "pkg:deb/debian/dpkg@1.19.0.4?arch=amd64&distro=stretch", "expected_output": "pkg:deb/debian/dpkg@1.19.0.4?arch=amd64&distro=stretch", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: deb", "test_group": "required", "test_type": "build", "input": { "type": "deb", "namespace": "debian", "name": "dpkg", "version": "1.19.0.4", "qualifiers": { "arch": "amd64", "distro": "stretch" }, "subpath": null }, "expected_output": "pkg:deb/debian/dpkg@1.19.0.4?arch=amd64&distro=stretch", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: deb", "test_group": "required", "test_type": "parse", "input": "pkg:deb/ubuntu/dpkg@1.19.0.4?arch=amd64", "expected_output": { "type": "deb", "namespace": "ubuntu", "name": "dpkg", "version": "1.19.0.4", "qualifiers": { "arch": "amd64" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: deb", "test_group": "required", "test_type": "validate", "input": "pkg:deb/ubuntu/dpkg@1.19.0.4?arch=amd64", "expected_output": "pkg:deb/ubuntu/dpkg@1.19.0.4?arch=amd64", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: deb", "test_group": "required", "test_type": "build", "input": { "type": "deb", "namespace": "ubuntu", "name": "dpkg", "version": "1.19.0.4", "qualifiers": { "arch": "amd64" }, "subpath": null }, "expected_output": "pkg:deb/ubuntu/dpkg@1.19.0.4?arch=amd64", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: deb", "test_group": "required", "test_type": "parse", "input": "pkg:deb/debian/attr@1:2.4.47-2?arch=source", "expected_output": { "type": "deb", "namespace": "debian", "name": "attr", "version": "1:2.4.47-2", "qualifiers": { "arch": "source" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: deb", "test_group": "required", "test_type": "validate", "input": "pkg:deb/debian/attr@1:2.4.47-2?arch=source", "expected_output": "pkg:deb/debian/attr@1:2.4.47-2?arch=source", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: deb", "test_group": "required", "test_type": "build", "input": { "type": "deb", "namespace": "debian", "name": "attr", "version": "1:2.4.47-2", "qualifiers": { "arch": "source" }, "subpath": null }, "expected_output": "pkg:deb/debian/attr@1:2.4.47-2?arch=source", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: deb", "test_group": "required", "test_type": "parse", "input": "pkg:deb/debian/attr@1:2.4.47-2%2Bb1?arch=amd64", "expected_output": { "type": "deb", "namespace": "debian", "name": "attr", "version": "1:2.4.47-2+b1", "qualifiers": { "arch": "amd64" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: deb", "test_group": "required", "test_type": "validate", "input": "pkg:deb/debian/attr@1:2.4.47-2%2Bb1?arch=amd64", "expected_output": "pkg:deb/debian/attr@1:2.4.47-2%2Bb1?arch=amd64", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: deb", "test_group": "required", "test_type": "build", "input": { "type": "deb", "namespace": "debian", "name": "attr", "version": "1:2.4.47-2+b1", "qualifiers": { "arch": "amd64" }, "subpath": null }, "expected_output": "pkg:deb/debian/attr@1:2.4.47-2%2Bb1?arch=amd64", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/conda-test.json0000644000175000017500000000755215264504421020363 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid conda purl with qualifiers. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_output": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_failure": false, "expected_message": null }, { "description": "valid conda purl with qualifiers", "test_group": "required", "test_type": "parse", "input": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_output": { "type": "conda", "namespace": null, "name": "absl-py", "version": "0.4.1", "qualifiers": { "build": "py36h06a4308_0", "channel": "main", "subdir": "linux-64", "type": "tar.bz2" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid conda purl with qualifiers. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_output": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_failure": false, "expected_message": null }, { "description": "valid conda purl with qualifiers", "test_group": "required", "test_type": "build", "input": { "type": "conda", "namespace": null, "name": "absl-py", "version": "0.4.1", "qualifiers": { "build": "py36h06a4308_0", "channel": "main", "subdir": "linux-64", "type": "tar.bz2" }, "subpath": null }, "expected_output": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: conda", "test_group": "required", "test_type": "parse", "input": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_output": { "type": "conda", "namespace": null, "name": "absl-py", "version": "0.4.1", "qualifiers": { "build": "py36h06a4308_0", "channel": "main", "subdir": "linux-64", "type": "tar.bz2" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: conda", "test_group": "required", "test_type": "validate", "input": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_output": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: conda", "test_group": "required", "test_type": "build", "input": { "type": "conda", "namespace": null, "name": "absl-py", "version": "0.4.1", "qualifiers": { "build": "py36h06a4308_0", "channel": "main", "subdir": "linux-64", "type": "tar.bz2" }, "subpath": null }, "expected_output": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/vscode-extension-test.json0000644000175000017500000001536315264504421022573 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for basic VS Code Extension PURL with version", "test_group": "required", "test_type": "parse", "input": "pkg:vscode-extension/redhat/java@1.46.2025091308", "expected_output": { "type": "vscode-extension", "namespace": "redhat", "name": "java", "version": "1.46.2025091308", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for basic VS Code Extension PURL with version", "test_group": "required", "test_type": "validate", "input": "pkg:vscode-extension/redhat/java@1.46.2025091308", "expected_output": "pkg:vscode-extension/redhat/java@1.46.2025091308", "expected_failure": false, "expected_message": null }, { "description": "Build test for basic VS Code Extension PURL with version", "test_group": "required", "test_type": "build", "input": { "type": "vscode-extension", "namespace": "redhat", "name": "java", "version": "1.46.2025091308", "qualifiers": null, "subpath": null }, "expected_output": "pkg:vscode-extension/redhat/java@1.46.2025091308", "expected_failure": false, "expected_message": null }, { "description": "Parse test for VS Code Extension PURL with platform qualifier", "test_group": "required", "test_type": "parse", "input": "pkg:vscode-extension/redhat/java@1.46.2025091308?platform=linux-x64", "expected_output": { "type": "vscode-extension", "namespace": "redhat", "name": "java", "version": "1.46.2025091308", "qualifiers": { "platform": "linux-x64" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for VS Code Extension PURL with platform qualifier", "test_group": "required", "test_type": "validate", "input": "pkg:vscode-extension/redhat/java@1.46.2025091308?platform=linux-x64", "expected_output": "pkg:vscode-extension/redhat/java@1.46.2025091308?platform=linux-x64", "expected_failure": false, "expected_message": null }, { "description": "Build test for VS Code Extension PURL with platform qualifier", "test_group": "required", "test_type": "build", "input": { "type": "vscode-extension", "namespace": "redhat", "name": "java", "version": "1.46.2025091308", "qualifiers": { "platform": "linux-x64" }, "subpath": null }, "expected_output": "pkg:vscode-extension/redhat/java@1.46.2025091308?platform=linux-x64", "expected_failure": false, "expected_message": null }, { "description": "Parse test for VS Code Extension PURL without version", "test_group": "required", "test_type": "parse", "input": "pkg:vscode-extension/ms-python/python", "expected_output": { "type": "vscode-extension", "namespace": "ms-python", "name": "python", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for VS Code Extension PURL without version", "test_group": "required", "test_type": "validate", "input": "pkg:vscode-extension/ms-python/python", "expected_output": "pkg:vscode-extension/ms-python/python", "expected_failure": false, "expected_message": null }, { "description": "Build test for VS Code Extension PURL without version", "test_group": "required", "test_type": "build", "input": { "type": "vscode-extension", "namespace": "microsoft", "name": "python", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:vscode-extension/microsoft/python", "expected_failure": false, "expected_message": null }, { "description": "Parse test for VS Code Extension PURL with darwin-arm64 platform", "test_group": "required", "test_type": "parse", "input": "pkg:vscode-extension/microsoft/python@2024.10.0?platform=darwin-arm64", "expected_output": { "type": "vscode-extension", "namespace": "microsoft", "name": "python", "version": "2024.10.0", "qualifiers": { "platform": "darwin-arm64" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Parse test for VS Code Extension PURL with win32-x64 platform", "test_group": "required", "test_type": "parse", "input": "pkg:vscode-extension/golang/go@0.39.1?platform=win32-x64", "expected_output": { "type": "vscode-extension", "namespace": "golang", "name": "go", "version": "0.39.1", "qualifiers": { "platform": "win32-x64" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Parse test for VS Code Extension PURL without namespace should fail", "test_group": "required", "test_type": "parse", "input": "pkg:vscode-extension/java@1.46.2025091308", "expected_output": null, "expected_failure": true, "expected_message": "VS Code Extension PURLs require a namespace (publisher)" }, { "description": "Build test for VS Code Extension PURL without namespace should fail", "test_group": "required", "test_type": "build", "input": { "type": "vscode-extension", "namespace": null, "name": "java", "version": "1.46.2025091308", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "VS Code Extension PURLs require a namespace (publisher)" }, { "description": "Parse test for VS Code Extension PURL with platform=universal (default)", "test_group": "required", "test_type": "parse", "input": "pkg:vscode-extension/redhat/java@1.46.2025091308?platform=universal", "expected_output": { "type": "vscode-extension", "namespace": "redhat", "name": "java", "version": "1.46.2025091308", "qualifiers": { "platform": "universal" }, "subpath": null }, "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/pub-test.json0000644000175000017500000000452115264504421020056 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: pub", "test_group": "required", "test_type": "parse", "input": "pkg:pub/characters@1.2.0", "expected_output": { "type": "pub", "namespace": null, "name": "characters", "version": "1.2.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: pub", "test_group": "required", "test_type": "validate", "input": "pkg:pub/characters@1.2.0", "expected_output": "pkg:pub/characters@1.2.0", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: pub", "test_group": "required", "test_type": "build", "input": { "type": "pub", "namespace": null, "name": "characters", "version": "1.2.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:pub/characters@1.2.0", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: pub", "test_group": "required", "test_type": "parse", "input": "pkg:pub/flutter@0.0.0", "expected_output": { "type": "pub", "namespace": null, "name": "flutter", "version": "0.0.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: pub", "test_group": "required", "test_type": "validate", "input": "pkg:pub/flutter@0.0.0", "expected_output": "pkg:pub/flutter@0.0.0", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: pub", "test_group": "required", "test_type": "build", "input": { "type": "pub", "namespace": null, "name": "flutter", "version": "0.0.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:pub/flutter@0.0.0", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/cpan-test.json0000644000175000017500000003441715264504421020220 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "CPAN distribution name are case sensitive. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name are case sensitive", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_output": { "type": "cpan", "namespace": "DROLSKY", "name": "DateTime", "version": "1.55", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name are case sensitive. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name are case sensitive", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": "DROLSKY", "name": "DateTime", "version": "1.55", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "CPAN with just the module name and version", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/LWP::UserAgent@6.7.6", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "CPAN distribution name as module name", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/GDT/URI::PackageURL", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "CPAN distribution name like module name", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": "GDT", "name": "URI::PackageURL", "version": null, "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "Roundtrip test for PURL", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": "DROLSKY", "name": "DateTime", "version": "1.55", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/GDT/URI-PackageURL", "expected_output": { "type": "cpan", "namespace": "GDT", "name": "URI-PackageURL", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/GDT/URI-PackageURL", "expected_output": "pkg:cpan/GDT/URI-PackageURL", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": "GDT", "name": "URI-PackageURL", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:cpan/GDT/URI-PackageURL", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/OALDERS/libwww-perl@6.76", "expected_output": { "type": "cpan", "namespace": "OALDERS", "name": "libwww-perl", "version": "6.76", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/OALDERS/libwww-perl@6.76", "expected_output": "pkg:cpan/OALDERS/libwww-perl@6.76", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": "OALDERS", "name": "libwww-perl", "version": "6.76", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cpan/OALDERS/libwww-perl@6.76", "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/DROLSKY/DateTime@1.55?repository_url=backpan.perl.org", "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55?repository_url=backpan.perl.org", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/DROLSKY/DateTime@1.55?repository_url=backpan.perl.org", "expected_output": { "type": "cpan", "namespace": "DROLSKY", "name": "DateTime", "version": "1.55", "qualifiers": { "repository_url": "backpan.perl.org" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": "DROLSKY", "name": "DateTime", "version": "1.55", "qualifiers": { "repository_url": "backpan.perl.org" }, "subpath": null }, "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55?repository_url=backpan.perl.org", "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name are case sensitive. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:cpan/DateTime@1.55?author=DROLSKY", "expected_output": "pkg:cpan/DateTime@1.55?author=DROLSKY", "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name are case sensitive", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/DateTime@1.55?author=DROLSKY", "expected_output": { "type": "cpan", "namespace": null, "name": "DateTime", "version": "1.55", "qualifiers": { "author": "DROLSKY" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name are case sensitive. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/DateTime@1.55", "expected_output": "pkg:cpan/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name are case sensitive", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": null, "name": "DateTime", "version": "1.55", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cpan/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "CPAN distribution name as module name", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/URI::PackageURL", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "CPAN distribution name like module name", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": null, "name": "URI::PackageURL", "version": null, "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "Roundtrip test for PURL type: cpan", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cpan", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": "DROLSKY", "name": "DateTime", "version": "1.55", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cpan/DROLSKY/DateTime@1.55", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cpan", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/URI-PackageURL", "expected_output": { "type": "cpan", "namespace": null, "name": "URI-PackageURL", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cpan", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/URI-PackageURL", "expected_output": "pkg:cpan/URI-PackageURL", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cpan", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": null, "name": "URI-PackageURL", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:cpan/URI-PackageURL", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cpan", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/libwww-perl@6.76?author=OALDERS", "expected_output": { "type": "cpan", "namespace": null, "name": "libwww-perl", "version": "6.76", "qualifiers": { "author": "OALDERS" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cpan", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/libwww-perl@6.76?author=OALDERS", "expected_output": "pkg:cpan/libwww-perl@6.76?author=OALDERS", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cpan", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": null, "name": "libwww-perl", "version": "6.76", "qualifiers": { "author": "OALDERS" }, "subpath": null }, "expected_output": "pkg:cpan/libwww-perl@6.76?author=OALDERS", "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cpan", "test_group": "required", "test_type": "validate", "input": "pkg:cpan/DateTime@1.55?author=DROLSKY&repository_url=backpan.perl.org", "expected_output": "pkg:cpan/DateTime@1.55?author=DROLSKY&repository_url=backpan.perl.org", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cpan", "test_group": "required", "test_type": "parse", "input": "pkg:cpan/DateTime@1.55?author=DROLSKY&repository_url=backpan.perl.org", "expected_output": { "type": "cpan", "namespace": null, "name": "DateTime", "version": "1.55", "qualifiers": { "author": "DROLSKY", "repository_url": "backpan.perl.org" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cpan", "test_group": "required", "test_type": "build", "input": { "type": "cpan", "namespace": null, "name": "DateTime", "version": "1.55", "qualifiers": { "author": "DROLSKY", "repository_url": "backpan.perl.org" }, "subpath": null }, "expected_output": "pkg:cpan/DateTime@1.55?author=DROLSKY&repository_url=backpan.perl.org", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/nuget-test.json0000644000175000017500000000576015264504421020420 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "nuget names are case sensitive. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:Nuget/EnterpriseLibrary.Common@6.0.1304", "expected_output": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_failure": false, "expected_message": null }, { "description": "nuget names are case sensitive", "test_group": "required", "test_type": "parse", "input": "pkg:Nuget/EnterpriseLibrary.Common@6.0.1304", "expected_output": { "type": "nuget", "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "nuget names are case sensitive. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_output": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_failure": false, "expected_message": null }, { "description": "nuget names are case sensitive", "test_group": "required", "test_type": "build", "input": { "type": "nuget", "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null }, "expected_output": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: nuget", "test_group": "required", "test_type": "parse", "input": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_output": { "type": "nuget", "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: nuget", "test_group": "required", "test_type": "validate", "input": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_output": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: nuget", "test_group": "required", "test_type": "build", "input": { "type": "nuget", "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null }, "expected_output": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/npm-test.json0000644000175000017500000001621015264504421020060 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "npm can be scoped. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:npm/%40angular/animation@12.3.1", "expected_output": "pkg:npm/%40angular/animation@12.3.1", "expected_failure": false, "expected_message": null }, { "description": "npm can be scoped", "test_group": "required", "test_type": "parse", "input": "pkg:npm/%40angular/animation@12.3.1", "expected_output": { "type": "npm", "namespace": "@angular", "name": "animation", "version": "12.3.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "npm can be scoped. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:npm/%40angular/animation@12.3.1", "expected_output": "pkg:npm/%40angular/animation@12.3.1", "expected_failure": false, "expected_message": null }, { "description": "npm can be scoped", "test_group": "required", "test_type": "build", "input": { "type": "npm", "namespace": "@angular", "name": "animation", "version": "12.3.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:npm/%40angular/animation@12.3.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: npm", "test_group": "required", "test_type": "parse", "input": "pkg:npm/foobar@12.3.1", "expected_output": { "type": "npm", "namespace": null, "name": "foobar", "version": "12.3.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: npm", "test_group": "required", "test_type": "validate", "input": "pkg:npm/foobar@12.3.1", "expected_output": "pkg:npm/foobar@12.3.1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: npm", "test_group": "required", "test_type": "build", "input": { "type": "npm", "namespace": null, "name": "foobar", "version": "12.3.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:npm/foobar@12.3.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: npm", "test_group": "required", "test_type": "parse", "input": "pkg:npm/%40angular/animation@12.3.1", "expected_output": { "type": "npm", "namespace": "@angular", "name": "animation", "version": "12.3.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: npm", "test_group": "required", "test_type": "validate", "input": "pkg:npm/%40angular/animation@12.3.1", "expected_output": "pkg:npm/%40angular/animation@12.3.1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: npm", "test_group": "required", "test_type": "build", "input": { "type": "npm", "namespace": "@angular", "name": "animation", "version": "12.3.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:npm/%40angular/animation@12.3.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: npm", "test_group": "required", "test_type": "parse", "input": "pkg:npm/mypackage@12.4.5?vcs_url=git://host.com/path/to/repo.git%404345abcd34343", "expected_output": { "type": "npm", "namespace": null, "name": "mypackage", "version": "12.4.5", "qualifiers": { "vcs_url": "git://host.com/path/to/repo.git@4345abcd34343" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: npm", "test_group": "required", "test_type": "validate", "input": "pkg:npm/mypackage@12.4.5?vcs_url=git://host.com/path/to/repo.git%404345abcd34343", "expected_output": "pkg:npm/mypackage@12.4.5?vcs_url=git:%2F%2Fhost.com%2Fpath%2Fto%2Frepo.git%404345abcd34343", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: npm", "test_group": "required", "test_type": "build", "input": { "type": "npm", "namespace": null, "name": "mypackage", "version": "12.4.5", "qualifiers": { "vcs_url": "git://host.com/path/to/repo.git@4345abcd34343" }, "subpath": null }, "expected_output": "pkg:npm/mypackage@12.4.5?vcs_url=git:%2F%2Fhost.com%2Fpath%2Fto%2Frepo.git%404345abcd34343", "expected_failure": false, "expected_message": null }, { "description": "valid npm purl without version and with subpath, scope unencoded", "test_group": "recommended", "test_type": "validate", "input": "pkg:npm/@babel/core#/googleapis/api/annotations/", "expected_output": "pkg:npm/%40babel/core#googleapis/api/annotations", "expected_failure": false, "expected_message": null }, { "description": "valid npm purl without version and with subpath, scope unencoded", "test_group": "recommended", "test_type": "parse", "input": "pkg:npm/@babel/core#/googleapis/api/annotations/", "expected_output": { "type": "npm", "namespace": "@babel", "name": "core", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_failure": false, "expected_message": null }, { "description": "valid npm purl without version and with subpath, scope unencoded", "test_group": "required", "test_type": "parse", "input": "pkg:npm/%40babel/core#/googleapis/api/annotations/", "expected_output": { "type": "npm", "namespace": "@babel", "name": "core", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations" }, "expected_failure": false, "expected_message": null }, { "description": "valid npm purl without namespace and with subpath", "test_group": "required", "test_type": "validate", "input": "pkg:npm/core@2.0.1#/googleapis/api/annotations/", "expected_output": "pkg:npm/core@2.0.1#googleapis/api/annotations", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/generic-test.json0000644000175000017500000001114015264504421020677 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: generic", "test_group": "required", "test_type": "parse", "input": "pkg:generic/openssl@1.1.10g", "expected_output": { "type": "generic", "namespace": null, "name": "openssl", "version": "1.1.10g", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: generic", "test_group": "required", "test_type": "validate", "input": "pkg:generic/openssl@1.1.10g", "expected_output": "pkg:generic/openssl@1.1.10g", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: generic", "test_group": "required", "test_type": "build", "input": { "type": "generic", "namespace": null, "name": "openssl", "version": "1.1.10g", "qualifiers": null, "subpath": null }, "expected_output": "pkg:generic/openssl@1.1.10g", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: generic", "test_group": "required", "test_type": "parse", "input": "pkg:generic/openssl@1.1.10g?download_url=https://openssl.org/source/openssl-1.1.0g.tar.gz&checksum=sha256:de4d501267da", "expected_output": { "type": "generic", "namespace": null, "name": "openssl", "version": "1.1.10g", "qualifiers": { "checksum": "sha256:de4d501267da", "download_url": "https://openssl.org/source/openssl-1.1.0g.tar.gz" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: generic", "test_group": "required", "test_type": "validate", "input": "pkg:generic/openssl@1.1.10g?download_url=https://openssl.org/source/openssl-1.1.0g.tar.gz&checksum=sha256:de4d501267da", "expected_output": "pkg:generic/openssl@1.1.10g?checksum=sha256:de4d501267da&download_url=https:%2F%2Fopenssl.org%2Fsource%2Fopenssl-1.1.0g.tar.gz", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: generic", "test_group": "required", "test_type": "build", "input": { "type": "generic", "namespace": null, "name": "openssl", "version": "1.1.10g", "qualifiers": { "checksum": "sha256:de4d501267da", "download_url": "https://openssl.org/source/openssl-1.1.0g.tar.gz" }, "subpath": null }, "expected_output": "pkg:generic/openssl@1.1.10g?checksum=sha256:de4d501267da&download_url=https:%2F%2Fopenssl.org%2Fsource%2Fopenssl-1.1.0g.tar.gz", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: generic", "test_group": "required", "test_type": "parse", "input": "pkg:generic/bitwarderl?vcs_url=git%2Bhttps://git.fsfe.org/dxtr/bitwarderl%40cc55108da32", "expected_output": { "type": "generic", "namespace": null, "name": "bitwarderl", "version": null, "qualifiers": { "vcs_url": "git+https://git.fsfe.org/dxtr/bitwarderl@cc55108da32" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: generic", "test_group": "required", "test_type": "validate", "input": "pkg:generic/bitwarderl?vcs_url=git%2Bhttps://git.fsfe.org/dxtr/bitwarderl%40cc55108da32", "expected_output": "pkg:generic/bitwarderl?vcs_url=git%2Bhttps:%2F%2Fgit.fsfe.org%2Fdxtr%2Fbitwarderl%40cc55108da32", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: generic", "test_group": "required", "test_type": "build", "input": { "type": "generic", "namespace": null, "name": "bitwarderl", "version": null, "qualifiers": { "vcs_url": "git+https://git.fsfe.org/dxtr/bitwarderl@cc55108da32" }, "subpath": null }, "expected_output": "pkg:generic/bitwarderl?vcs_url=git%2Bhttps:%2F%2Fgit.fsfe.org%2Fdxtr%2Fbitwarderl%40cc55108da32", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/qpkg-test.json0000644000175000017500000000545315264504421020237 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: qpkg", "test_group": "required", "test_type": "parse", "input": "pkg:qpkg/blackberry/com.qnx.sdp@7.0.0.SGA201702151847", "expected_output": { "type": "qpkg", "namespace": "blackberry", "name": "com.qnx.sdp", "version": "7.0.0.SGA201702151847", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: qpkg", "test_group": "required", "test_type": "validate", "input": "pkg:qpkg/blackberry/com.qnx.sdp@7.0.0.SGA201702151847", "expected_output": "pkg:qpkg/blackberry/com.qnx.sdp@7.0.0.SGA201702151847", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: qpkg", "test_group": "required", "test_type": "build", "input": { "type": "qpkg", "namespace": "blackberry", "name": "com.qnx.sdp", "version": "7.0.0.SGA201702151847", "qualifiers": null, "subpath": null }, "expected_output": "pkg:qpkg/blackberry/com.qnx.sdp@7.0.0.SGA201702151847", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: qpkg", "test_group": "required", "test_type": "parse", "input": "pkg:qpkg/blackberry/com.qnx.qnx710.foo.bar.qux@0.0.4.01449T202205040833L", "expected_output": { "type": "qpkg", "namespace": "blackberry", "name": "com.qnx.qnx710.foo.bar.qux", "version": "0.0.4.01449T202205040833L", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: qpkg", "test_group": "required", "test_type": "validate", "input": "pkg:qpkg/blackberry/com.qnx.qnx710.foo.bar.qux@0.0.4.01449T202205040833L", "expected_output": "pkg:qpkg/blackberry/com.qnx.qnx710.foo.bar.qux@0.0.4.01449T202205040833L", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: qpkg", "test_group": "required", "test_type": "build", "input": { "type": "qpkg", "namespace": "blackberry", "name": "com.qnx.qnx710.foo.bar.qux", "version": "0.0.4.01449T202205040833L", "qualifiers": null, "subpath": null }, "expected_output": "pkg:qpkg/blackberry/com.qnx.qnx710.foo.bar.qux@0.0.4.01449T202205040833L", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/chrome-extension-test.json0000644000175000017500000000466715264504421022572 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid chrome purl (version: full)", "test_group": "required", "test_type": "validate", "input": "pkg:chrome-extension/dncgedbnidfkppmdgfgidcepclnokpkb@6.0.2.3611", "expected_output": "pkg:chrome-extension/dncgedbnidfkppmdgfgidcepclnokpkb@6.0.2.3611", "expected_failure": false, "expected_message": null }, { "description": "valid chrome purl (version: short)", "test_group": "required", "test_type": "validate", "input": "pkg:chrome-extension/kanfjhdeebkfgkbmnfknhejpadhlmiab@0.6", "expected_output": "pkg:chrome-extension/kanfjhdeebkfgkbmnfknhejpadhlmiab@0.6", "expected_failure": false, "expected_message": null }, { "description": "valid chrome purl (version: missing)", "test_group": "required", "test_type": "validate", "input": "pkg:chrome-extension/dlpngalgnefjeiefhmpklpfiohadpglk", "expected_output": "pkg:chrome-extension/dlpngalgnefjeiefhmpklpfiohadpglk", "expected_failure": false, "expected_message": null }, { "description": "invalid chrome purl (name: invalid characters)", "test_group": "required", "test_type": "parse", "input": "pkg:chrome-extension/44444algnefjeiefhmpklpfiohadpglk", "expected_output": null, "expected_failure": true, "expected_message": "permitted_characters" }, { "description": "invalid chrome purl (name: wrong length)", "test_group": "required", "test_type": "parse", "input": "pkg:chrome-extension/dogs", "expected_output": null, "expected_failure": true, "expected_message": "permitted_characters" }, { "description": "invalid chrome purl (version: too many segments)", "test_group": "required", "test_type": "parse", "input": "pkg:chrome-extension/dlpngalgnefjeiefhmpklpfiohadpglk@1.2.3.4.5", "expected_output": null, "expected_failure": true, "expected_message": "permitted_characters" }, { "description": "invalid chrome purl (version: invalid characters)", "test_group": "required", "test_type": "parse", "input": "pkg:chrome-extension/dlpngalgnefjeiefhmpklpfiohadpglk@1.2.3-beta", "expected_output": null, "expected_failure": true, "expected_message": "permitted_characters" } ] } URI-PackageURL-2.26/t/purl/types/yocto-test.json0000644000175000017500000000133415264504421020424 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "basic yocto recipe test", "test_group": "required", "test_type": "parse", "input": "pkg:yocto/core/glibc@2.35?repository_url=https:%2F%2Fgit.openembedded.org%2Fopenembedded-core&layer_version=kirkstone", "expected_output": { "type": "yocto", "namespace": "core", "name": "glibc", "version": "2.35", "qualifiers": { "layer_version": "kirkstone", "repository_url": "https://git.openembedded.org/openembedded-core" }, "subpath": null }, "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/composer-test.json0000644000175000017500000000717615264504421021130 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid packagist purl", "test_group": "required", "test_type": "validate", "input": "pkg:composer/guzzlehttp/promises@2.0.2", "expected_output": "pkg:composer/guzzlehttp/promises@2.0.2", "expected_failure": false, "expected_message": null }, { "description": "valid packagist purl", "test_group": "required", "test_type": "parse", "input": "pkg:composer/guzzlehttp/promises@2.0.2", "expected_output": { "type": "composer", "namespace": "guzzlehttp", "name": "promises", "version": "2.0.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "composer names are not case sensitive. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:composer/Laravel/Laravel@5.5.0", "expected_output": "pkg:composer/laravel/laravel@5.5.0", "expected_failure": false, "expected_message": null }, { "description": "composer names are not case sensitive", "test_group": "required", "test_type": "parse", "input": "pkg:composer/Laravel/Laravel@5.5.0", "expected_output": { "type": "composer", "namespace": "laravel", "name": "laravel", "version": "5.5.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "composer names are not case sensitive. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:composer/laravel/laravel@5.5.0", "expected_output": "pkg:composer/laravel/laravel@5.5.0", "expected_failure": false, "expected_message": null }, { "description": "composer names are not case sensitive", "test_group": "required", "test_type": "build", "input": { "type": "composer", "namespace": "laravel", "name": "laravel", "version": "5.5.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:composer/laravel/laravel@5.5.0", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: composer", "test_group": "required", "test_type": "parse", "input": "pkg:composer/laravel/laravel@5.5.0", "expected_output": { "type": "composer", "namespace": "laravel", "name": "laravel", "version": "5.5.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: composer", "test_group": "required", "test_type": "validate", "input": "pkg:composer/laravel/laravel@5.5.0", "expected_output": "pkg:composer/laravel/laravel@5.5.0", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: composer", "test_group": "required", "test_type": "build", "input": { "type": "composer", "namespace": "laravel", "name": "laravel", "version": "5.5.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:composer/laravel/laravel@5.5.0", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/cargo-test.json0000644000175000017500000000673215264504421020371 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL type: cargo", "test_group": "required", "test_type": "parse", "input": "pkg:cargo/rand@0.7.2", "expected_output": { "type": "cargo", "namespace": null, "name": "rand", "version": "0.7.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cargo", "test_group": "required", "test_type": "validate", "input": "pkg:cargo/rand@0.7.2", "expected_output": "pkg:cargo/rand@0.7.2", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cargo", "test_group": "required", "test_type": "build", "input": { "type": "cargo", "namespace": null, "name": "rand", "version": "0.7.2", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cargo/rand@0.7.2", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cargo", "test_group": "required", "test_type": "parse", "input": "pkg:cargo/clap@2.33.0", "expected_output": { "type": "cargo", "namespace": null, "name": "clap", "version": "2.33.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cargo", "test_group": "required", "test_type": "validate", "input": "pkg:cargo/clap@2.33.0", "expected_output": "pkg:cargo/clap@2.33.0", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cargo", "test_group": "required", "test_type": "build", "input": { "type": "cargo", "namespace": null, "name": "clap", "version": "2.33.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cargo/clap@2.33.0", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: cargo", "test_group": "required", "test_type": "parse", "input": "pkg:cargo/structopt@0.3.11", "expected_output": { "type": "cargo", "namespace": null, "name": "structopt", "version": "0.3.11", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: cargo", "test_group": "required", "test_type": "validate", "input": "pkg:cargo/structopt@0.3.11", "expected_output": "pkg:cargo/structopt@0.3.11", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: cargo", "test_group": "required", "test_type": "build", "input": { "type": "cargo", "namespace": null, "name": "structopt", "version": "0.3.11", "qualifiers": null, "subpath": null }, "expected_output": "pkg:cargo/structopt@0.3.11", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/bazel-test.json0000644000175000017500000002223015264504421020362 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "bazel module with default registry", "test_group": "required", "test_type": "validate", "input": "pkg:bazel/rules_java@7.8.0?repository_url=https://bcr.bazel.build/", "expected_output": "pkg:bazel/rules_java@7.8.0?repository_url=https:%2F%2Fbcr.bazel.build%2F", "expected_failure": false, "expected_message": null }, { "description": "bazel module with default registry", "test_group": "required", "test_type": "parse", "input": "pkg:bazel/rules_java@7.8.0?repository_url=https://bcr.bazel.build/", "expected_output": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "7.8.0", "qualifiers": { "repository_url": "https://bcr.bazel.build/" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "bazel module with default registry", "test_group": "required", "test_type": "build", "input": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "7.8.0", "qualifiers": null, "subpath": null }, "expected_output": "pkg:bazel/rules_java@7.8.0", "expected_failure": false, "expected_message": null }, { "description": "bazel module with custom registry", "test_group": "recommended", "test_type": "validate", "input": "pkg:bazel/rules_java@7.8.0?repository_url=https://example.org/bazel-registry/", "expected_output": "pkg:bazel/rules_java@7.8.0?repository_url=https:%2F%2Fexample.org%2Fbazel-registry%2F", "expected_failure": false, "expected_message": null }, { "description": "bazel module with custom registry", "test_group": "required", "test_type": "parse", "input": "pkg:bazel/rules_java@7.8.0?repository_url=https://example.org/bazel-registry/", "expected_output": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "7.8.0", "qualifiers": { "repository_url": "https://example.org/bazel-registry/" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "bazel module with custom registry", "test_group": "recommended", "test_type": "build", "input": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "7.8.0", "qualifiers": { "repository_url": "https://example.org/bazel-registry" }, "subpath": null }, "expected_output": "pkg:bazel/rules_java@7.8.0?repository_url=https:%2F%2Fexample.org%2Fbazel-registry", "expected_failure": false, "expected_message": null }, { "description": "bazel module with relaxed semver version", "test_group": "required", "test_type": "validate", "input": "pkg:bazel/curl@8.8.0.bcr.1", "expected_output": "pkg:bazel/curl@8.8.0.bcr.1", "expected_failure": false, "expected_message": null }, { "description": "bazel module with relaxed semver version", "test_group": "required", "test_type": "parse", "input": "pkg:bazel/curl@8.8.0.bcr.1", "expected_output": { "type": "bazel", "namespace": null, "name": "curl", "version": "8.8.0.bcr.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "bazel module with relaxed semver version", "test_group": "required", "test_type": "build", "input": { "type": "bazel", "namespace": null, "name": "curl", "version": "8.8.0.bcr.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:bazel/curl@8.8.0.bcr.1", "expected_failure": false, "expected_message": null }, { "description": "bazel module names are actually all lowercased, but this is not enforced by the PURL type spec for reasons", "test_group": "required", "test_type": "validate", "input": "pkg:bazel/Curl@8.8.0.bcr.1", "expected_output": "pkg:bazel/Curl@8.8.0.bcr.1", "expected_failure": false, "expected_message": null }, { "description": "bazel module names are actually all lowercased, but this is not enforced by the PURL type spec for reasons", "test_group": "required", "test_type": "parse", "input": "pkg:bazel/Curl@8.8.0.bcr.1", "expected_output": { "type": "bazel", "namespace": null, "name": "Curl", "version": "8.8.0.bcr.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "bazel module names are actually all lowercased, but this is not enforced by the PURL type spec for reasons", "test_group": "required", "test_type": "build", "input": { "type": "bazel", "namespace": null, "name": "Curl", "version": "8.8.0.bcr.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:bazel/Curl@8.8.0.bcr.1", "expected_failure": false, "expected_message": null }, { "description": "bazel module with multi-segment package", "test_group": "required", "test_type": "validate", "input": "pkg:bazel/rules_java@8.5.0#java/runfiles", "expected_output": "pkg:bazel/rules_java@8.5.0#java/runfiles", "expected_failure": false, "expected_message": null }, { "description": "bazel module with multi-segment package", "test_group": "required", "test_type": "parse", "input": "pkg:bazel/rules_java@8.5.0#java/runfiles", "expected_output": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "8.5.0", "qualifiers": null, "subpath": "java/runfiles" }, "expected_failure": false, "expected_message": null }, { "description": "bazel module with multi-segment package", "test_group": "required", "test_type": "build", "input": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "8.5.0", "qualifiers": null, "subpath": "java/runfiles" }, "expected_output": "pkg:bazel/rules_java@8.5.0#java/runfiles", "expected_failure": false, "expected_message": null }, { "description": "bazel module with target reference", "test_group": "required", "test_type": "validate", "input": "pkg:bazel/rules_java@8.5.0#java/runfiles:runfiles", "expected_output": "pkg:bazel/rules_java@8.5.0#java/runfiles:runfiles", "expected_failure": false, "expected_message": null }, { "description": "bazel module with target reference", "test_group": "required", "test_type": "parse", "input": "pkg:bazel/rules_java@8.5.0#java/runfiles:runfiles", "expected_output": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "8.5.0", "qualifiers": null, "subpath": "java/runfiles:runfiles" }, "expected_failure": false, "expected_message": null }, { "description": "bazel module with target reference", "test_group": "required", "test_type": "build", "input": { "type": "bazel", "namespace": null, "name": "rules_java", "version": "8.5.0", "qualifiers": null, "subpath": "java/runfiles:runfiles" }, "expected_output": "pkg:bazel/rules_java@8.5.0#java/runfiles:runfiles", "expected_failure": false, "expected_message": null }, { "description": "bazel module with single-segment package", "test_group": "required", "test_type": "validate", "input": "pkg:bazel/rules_go@0.48.0#go", "expected_output": "pkg:bazel/rules_go@0.48.0#go", "expected_failure": false, "expected_message": null }, { "description": "bazel module with single-segment package", "test_group": "required", "test_type": "parse", "input": "pkg:bazel/rules_go@0.48.0#go", "expected_output": { "type": "bazel", "namespace": null, "name": "rules_go", "version": "0.48.0", "qualifiers": null, "subpath": "go" }, "expected_failure": false, "expected_message": null }, { "description": "bazel module with single-segment package", "test_group": "required", "test_type": "build", "input": { "type": "bazel", "namespace": null, "name": "rules_go", "version": "0.48.0", "qualifiers": null, "subpath": "go" }, "expected_output": "pkg:bazel/rules_go@0.48.0#go", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/julia-test.json0000644000175000017500000001472315264504421020401 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid julia purl for stdlib package with version and uuid", "test_group": "required", "test_type": "parse", "input": "pkg:julia/Dates@1.9.0?uuid=ade2ca70-3891-5945-98fb-dc099432e06a", "expected_output": { "type": "julia", "namespace": null, "name": "Dates", "version": "1.9.0", "qualifiers": { "uuid": "ade2ca70-3891-5945-98fb-dc099432e06a" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid julia purl for stdlib package with uuid but no version", "test_group": "required", "test_type": "parse", "input": "pkg:julia/Dates?uuid=ade2ca70-3891-5945-98fb-dc099432e06a", "expected_output": { "type": "julia", "namespace": null, "name": "Dates", "version": null, "qualifiers": { "uuid": "ade2ca70-3891-5945-98fb-dc099432e06a" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid julia purl, version and uuid", "test_group": "required", "test_type": "parse", "input": "pkg:julia/AWS@1.88.0?uuid=fbe9abb3-538b-5e4e-ba9e-bc94f4f92ebc", "expected_output": { "type": "julia", "namespace": null, "name": "AWS", "version": "1.88.0", "qualifiers": { "uuid": "fbe9abb3-538b-5e4e-ba9e-bc94f4f92ebc" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid julia purl with both uuid and repository_url qualifiers", "test_group": "required", "test_type": "parse", "input": "pkg:julia/RegisterQD@0.3.1?repository_url=https://github.com/HolyLab/HolyLabRegistry&uuid=ac24ea0c-1830-11e9-18d4-81f172323054", "expected_output": { "type": "julia", "namespace": null, "name": "RegisterQD", "version": "0.3.1", "qualifiers": { "repository_url": "https://github.com/HolyLab/HolyLabRegistry", "uuid": "ac24ea0c-1830-11e9-18d4-81f172323054" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid julia purl build test - stdlib package with version and uuid", "test_group": "required", "test_type": "build", "input": { "type": "julia", "namespace": null, "name": "Dates", "version": "1.9.0", "qualifiers": { "uuid": "ade2ca70-3891-5945-98fb-dc099432e06a" }, "subpath": null }, "expected_output": "pkg:julia/Dates@1.9.0?uuid=ade2ca70-3891-5945-98fb-dc099432e06a", "expected_failure": false, "expected_message": null }, { "description": "valid julia purl build test with both qualifiers", "test_group": "required", "test_type": "build", "input": { "type": "julia", "namespace": null, "name": "RegisterQD", "version": "0.3.1", "qualifiers": { "repository_url": "https://github.com/HolyLab/HolyLabRegistry", "uuid": "ac24ea0c-1830-11e9-18d4-81f172323054" }, "subpath": null }, "expected_output": "pkg:julia/RegisterQD@0.3.1?repository_url=https:%2F%2Fgithub.com%2FHolyLab%2FHolyLabRegistry&uuid=ac24ea0c-1830-11e9-18d4-81f172323054", "expected_failure": false, "expected_message": null }, { "description": "valid julia purl roundtrip test - basic package", "test_group": "required", "test_type": "validate", "input": "pkg:julia/Dates@1.9.0?uuid=ade2ca70-3891-5945-98fb-dc099432e06a", "expected_output": "pkg:julia/Dates@1.9.0?uuid=ade2ca70-3891-5945-98fb-dc099432e06a", "expected_failure": false, "expected_message": null }, { "description": "valid julia purl roundtrip test - multiple qualifiers", "test_group": "recommended", "test_type": "validate", "input": "pkg:julia/RegisterQD@0.3.1?repository_url=https://github.com/HolyLab/HolyLabRegistry&uuid=ac24ea0c-1830-11e9-18d4-81f172323054", "expected_output": "pkg:julia/RegisterQD@0.3.1?repository_url=https:%2F%2Fgithub.com%2FHolyLab%2FHolyLabRegistry&uuid=ac24ea0c-1830-11e9-18d4-81f172323054", "expected_failure": false, "expected_message": null }, { "description": "invalid julia purl without name", "test_group": "required", "test_type": "parse", "input": "pkg:julia/@1.9.0", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "invalid julia purl with only type", "test_group": "required", "test_type": "parse", "input": "pkg:julia", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "invalid julia purl build test - null name", "test_group": "required", "test_type": "build", "input": { "type": "julia", "namespace": null, "name": null, "version": "1.9.0", "qualifiers": { "uuid": "ade2ca70-3891-5945-98fb-dc099432e06a" }, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "invalid julia purl build test - empty name", "test_group": "required", "test_type": "build", "input": { "type": "julia", "namespace": null, "name": "", "version": "1.9.0", "qualifiers": { "uuid": "ade2ca70-3891-5945-98fb-dc099432e06a" }, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "invalid julia purl for package without uuid", "test_group": "required", "test_type": "parse", "input": "pkg:julia/Dates", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" } ] } URI-PackageURL-2.26/t/purl/types/brew-test.json0000644000175000017500000002235615264504421020235 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Simple Homebrew formula with version", "test_group": "required", "test_type": "parse", "input": "pkg:brew/sqlite@3.43.2", "expected_output": { "type": "brew", "namespace": null, "name": "sqlite", "version": "3.43.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Simple Homebrew formula with version - roundtrip", "test_group": "required", "test_type": "validate", "input": "pkg:brew/sqlite@3.43.2", "expected_output": "pkg:brew/sqlite@3.43.2", "expected_failure": false, "expected_message": null }, { "description": "Simple Homebrew formula with version - build", "test_group": "required", "test_type": "build", "input": { "type": "brew", "namespace": null, "name": "sqlite", "version": "3.43.2", "qualifiers": null, "subpath": null }, "expected_output": "pkg:brew/sqlite@3.43.2", "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula names are not case sensitive", "test_group": "required", "test_type": "parse", "input": "pkg:brew/SQLite@3.43.2", "expected_output": { "type": "brew", "namespace": null, "name": "sqlite", "version": "3.43.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula names are not case sensitive. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:brew/SQLite@3.43.2", "expected_output": "pkg:brew/sqlite@3.43.2", "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula without version (versionless purl)", "test_group": "required", "test_type": "parse", "input": "pkg:brew/go", "expected_output": { "type": "brew", "namespace": null, "name": "go", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula without version - roundtrip", "test_group": "required", "test_type": "validate", "input": "pkg:brew/go", "expected_output": "pkg:brew/go", "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula without version - build", "test_group": "required", "test_type": "build", "input": { "type": "brew", "namespace": null, "name": "go", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:brew/go", "expected_failure": false, "expected_message": null }, { "description": "Versioned formula with @ in name (postgresql@12) - @ must be percent-encoded", "test_group": "required", "test_type": "parse", "input": "pkg:brew/postgresql%4012@12.17", "expected_output": { "type": "brew", "namespace": null, "name": "postgresql@12", "version": "12.17", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Versioned formula with @ in name - roundtrip", "test_group": "required", "test_type": "validate", "input": "pkg:brew/postgresql%4012@12.17", "expected_output": "pkg:brew/postgresql%4012@12.17", "expected_failure": false, "expected_message": null }, { "description": "Versioned formula with @ in name - build", "test_group": "required", "test_type": "build", "input": { "type": "brew", "namespace": null, "name": "postgresql@12", "version": "12.17", "qualifiers": null, "subpath": null }, "expected_output": "pkg:brew/postgresql%4012@12.17", "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula with namespace (tap) - parse", "test_group": "required", "test_type": "parse", "input": "pkg:brew/homebrew/core/sqlite@3.43.2", "expected_output": { "type": "brew", "namespace": "homebrew/core", "name": "sqlite", "version": "3.43.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula with namespace (tap) - roundtrip", "test_group": "required", "test_type": "validate", "input": "pkg:brew/homebrew/core/sqlite@3.43.2", "expected_output": "pkg:brew/homebrew/core/sqlite@3.43.2", "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula with namespace (tap) - build", "test_group": "required", "test_type": "build", "input": { "type": "brew", "namespace": "homebrew/core", "name": "sqlite", "version": "3.43.2", "qualifiers": null, "subpath": null }, "expected_output": "pkg:brew/homebrew/core/sqlite@3.43.2", "expected_failure": false, "expected_message": null }, { "description": "Homebrew tap namespaces are not case sensitive", "test_group": "required", "test_type": "parse", "input": "pkg:brew/Homebrew/Core/sqlite@3.43.2", "expected_output": { "type": "brew", "namespace": "homebrew/core", "name": "sqlite", "version": "3.43.2", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Homebrew tap namespaces are not case sensitive. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:brew/Homebrew/Core/sqlite@3.43.2", "expected_output": "pkg:brew/homebrew/core/sqlite@3.43.2", "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula with third-party tap and repository_url - parse", "test_group": "required", "test_type": "parse", "input": "pkg:brew/some-org/some-tap/some-app@1.2.3?repository_url=https:%2F%2Fgithub.com%2Fsome-org%2Fhomebrew-some-tap.git", "expected_output": { "type": "brew", "namespace": "some-org/some-tap", "name": "some-app", "version": "1.2.3", "qualifiers": { "repository_url": "https://github.com/some-org/homebrew-some-tap.git" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula with third-party tap and repository_url - roundtrip", "test_group": "required", "test_type": "validate", "input": "pkg:brew/some-org/some-tap/some-app@1.2.3?repository_url=https:%2F%2Fgithub.com%2Fsome-org%2Fhomebrew-some-tap.git", "expected_output": "pkg:brew/some-org/some-tap/some-app@1.2.3?repository_url=https:%2F%2Fgithub.com%2Fsome-org%2Fhomebrew-some-tap.git", "expected_failure": false, "expected_message": null }, { "description": "Homebrew formula with third-party tap and repository_url - build", "test_group": "required", "test_type": "build", "input": { "type": "brew", "namespace": "some-org/some-tap", "name": "some-app", "version": "1.2.3", "qualifiers": { "repository_url": "https://github.com/some-org/homebrew-some-tap.git" }, "subpath": null }, "expected_output": "pkg:brew/some-org/some-tap/some-app@1.2.3?repository_url=https:%2F%2Fgithub.com%2Fsome-org%2Fhomebrew-some-tap.git", "expected_failure": false, "expected_message": null }, { "description": "Versioned formula with unencoded @ should parse (advanced)", "test_group": "recommended", "test_type": "validate", "input": "pkg:brew/node@20@20.10.0", "expected_output": "pkg:brew/node%4020@20.10.0", "expected_failure": false, "expected_message": null }, { "description": "Homebrew cask example", "test_group": "required", "test_type": "parse", "input": "pkg:brew/homebrew/cask/firefox@120.0", "expected_output": { "type": "brew", "namespace": "homebrew/cask", "name": "firefox", "version": "120.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Homebrew cask example - roundtrip", "test_group": "required", "test_type": "validate", "input": "pkg:brew/homebrew/cask/firefox@120.0", "expected_output": "pkg:brew/homebrew/cask/firefox@120.0", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/maven-test.json0000644000175000017500000006757515264504421020420 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid maven purl. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:maven/org.apache.commons/io@1.3.4", "expected_output": "pkg:maven/org.apache.commons/io@1.3.4", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl", "test_group": "required", "test_type": "parse", "input": "pkg:maven/org.apache.commons/io@1.3.4", "expected_output": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": "1.3.4", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid maven purl. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.commons/io@1.3.4", "expected_output": "pkg:maven/org.apache.commons/io@1.3.4", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": "1.3.4", "qualifiers": null, "subpath": null }, "expected_output": "pkg:maven/org.apache.commons/io@1.3.4", "expected_failure": false, "expected_message": null }, { "description": "basic valid maven purl without version. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "basic valid maven purl without version", "test_group": "required", "test_type": "parse", "input": "pkg:maven/org.apache.commons/io", "expected_output": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "basic valid maven purl without version. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "basic valid maven purl without version", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "maven often uses qualifiers. Roundtrip an input purl to canonical using mixedcase type", "test_group": "recommended", "test_type": "validate", "input": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repositorY_url=https://repo.spring.io/release", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=https:%2F%2Frepo.spring.io%2Frelease", "expected_failure": false, "expected_message": null }, { "description": "maven often uses qualifiers here mixedcase type", "test_group": "recommended", "test_type": "parse", "input": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repositorY_url=https://repo.spring.io/release", "expected_output": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "classifier": "sources", "repository_url": "https://repo.spring.io/release" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "maven often uses qualifiers. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=repo.spring.io/release", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=repo.spring.io%2Frelease", "expected_failure": false, "expected_message": null }, { "description": "maven often uses qualifiers", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "classifier": "sources", "repository_url": "repo.spring.io/release" }, "subpath": null }, "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=repo.spring.io%2Frelease", "expected_failure": false, "expected_message": null }, { "description": "maven pom reference. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom&repositorY_url=repo.spring.io/release", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?repository_url=repo.spring.io%2Frelease&type=pom", "expected_failure": false, "expected_message": null }, { "description": "maven pom reference", "test_group": "required", "test_type": "parse", "input": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom&repositorY_url=repo.spring.io/release", "expected_output": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "type": "pom", "repository_url": "repo.spring.io/release" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "maven pom reference. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=war&repository_url=https://repo.spring.io/release", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?repository_url=https:%2F%2Frepo.spring.io%2Frelease&type=war", "expected_failure": false, "expected_message": null }, { "description": "maven pom reference", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "classifier": "foo", "repository_url": "repo.spring.io/release" }, "subpath": null }, "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=foo&repository_url=repo.spring.io%2Frelease", "expected_failure": false, "expected_message": null }, { "description": "maven can come with a type qualifier. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:Maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "expected_output": "pkg:maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "expected_failure": false, "expected_message": null }, { "description": "maven can come with a type qualifier", "test_group": "required", "test_type": "parse", "input": "pkg:Maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "expected_output": { "type": "maven", "namespace": "net.sf.jacob-project", "name": "jacob", "version": "1.14.3", "qualifiers": { "classifier": "x86", "type": "dll" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "maven can come with a type qualifier. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "expected_output": "pkg:maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "expected_failure": false, "expected_message": null }, { "description": "maven can come with a type qualifier", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "net.sf.jacob-project", "name": "jacob", "version": "1.14.3", "qualifiers": { "classifier": "x86", "type": "dll" }, "subpath": null }, "expected_output": "pkg:maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "expected_failure": false, "expected_message": null }, { "description": "slash / after type is not significant. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:/maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "slash / after type is not significant", "test_group": "required", "test_type": "parse", "input": "pkg:/maven/org.apache.commons/io", "expected_output": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "slash / after type is not significant. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "slash / after type is not significant", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "double slash // after type is not significant. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg://maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "double slash // after type is not significant", "test_group": "required", "test_type": "parse", "input": "pkg://maven/org.apache.commons/io", "expected_output": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "double slash // after type is not significant. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "double slash // after type is not significant", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "slash /// after type is not significant. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:///maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "slash /// after type is not significant", "test_group": "required", "test_type": "parse", "input": "pkg:///maven/org.apache.commons/io", "expected_output": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "slash /// after type is not significant. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.commons/io", "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "slash /// after type is not significant", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:maven/org.apache.commons/io", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl with case sensitive namespace and name. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "expected_output": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl with case sensitive namespace and name", "test_group": "required", "test_type": "parse", "input": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "expected_output": { "type": "maven", "namespace": "HTTPClient", "name": "HTTPClient", "version": "0.3-3", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid maven purl with case sensitive namespace and name. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "expected_output": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl with case sensitive namespace and name", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "HTTPClient", "name": "HTTPClient", "version": "0.3-3", "qualifiers": null, "subpath": null }, "expected_output": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl containing a space in the version and qualifier. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "expected_output": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl containing a space in the version and qualifier", "test_group": "required", "test_type": "parse", "input": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "expected_output": { "type": "maven", "namespace": "mygroup", "name": "myartifact", "version": "1.0.0 Final", "qualifiers": { "mykey": "my value" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid maven purl containing a space in the version and qualifier. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "expected_output": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "expected_failure": false, "expected_message": null }, { "description": "valid maven purl containing a space in the version and qualifier", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "mygroup", "name": "myartifact", "version": "1.0.0 Final", "qualifiers": { "mykey": "my value" }, "subpath": null }, "expected_output": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: maven", "test_group": "required", "test_type": "parse", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1", "expected_output": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: maven", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: maven", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: maven", "test_group": "required", "test_type": "parse", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom", "expected_output": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "type": "pom" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: maven", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: maven", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "type": "pom" }, "subpath": null }, "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: maven", "test_group": "required", "test_type": "parse", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources", "expected_output": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "classifier": "sources" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: maven", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: maven", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "classifier": "sources" }, "subpath": null }, "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: maven", "test_group": "required", "test_type": "parse", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=zip&classifier=dist", "expected_output": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "classifier": "dist", "type": "zip" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: maven", "test_group": "required", "test_type": "validate", "input": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=zip&classifier=dist", "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=dist&type=zip", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: maven", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": { "classifier": "dist", "type": "zip" }, "subpath": null }, "expected_output": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=dist&type=zip", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: maven", "test_group": "required", "test_type": "parse", "input": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x86&type=dll", "expected_output": { "type": "maven", "namespace": "net.sf.jacob-projec", "name": "jacob", "version": "1.14.3", "qualifiers": { "classifier": "x86", "type": "dll" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: maven", "test_group": "required", "test_type": "validate", "input": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x86&type=dll", "expected_output": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x86&type=dll", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: maven", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "net.sf.jacob-projec", "name": "jacob", "version": "1.14.3", "qualifiers": { "classifier": "x86", "type": "dll" }, "subpath": null }, "expected_output": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x86&type=dll", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: maven", "test_group": "required", "test_type": "parse", "input": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x64&type=dll", "expected_output": { "type": "maven", "namespace": "net.sf.jacob-projec", "name": "jacob", "version": "1.14.3", "qualifiers": { "classifier": "x64", "type": "dll" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: maven", "test_group": "required", "test_type": "validate", "input": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x64&type=dll", "expected_output": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x64&type=dll", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: maven", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "net.sf.jacob-projec", "name": "jacob", "version": "1.14.3", "qualifiers": { "classifier": "x64", "type": "dll" }, "subpath": null }, "expected_output": "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x64&type=dll", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: maven", "test_group": "required", "test_type": "parse", "input": "pkg:maven/groovy/groovy@1.0?repository_url=https://maven.google.com", "expected_output": { "type": "maven", "namespace": "groovy", "name": "groovy", "version": "1.0", "qualifiers": { "repository_url": "https://maven.google.com" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: maven", "test_group": "required", "test_type": "validate", "input": "pkg:maven/groovy/groovy@1.0?repository_url=https://maven.google.com", "expected_output": "pkg:maven/groovy/groovy@1.0?repository_url=https:%2F%2Fmaven.google.com", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: maven", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": "groovy", "name": "groovy", "version": "1.0", "qualifiers": { "repository_url": "https://maven.google.com" }, "subpath": null }, "expected_output": "pkg:maven/groovy/groovy@1.0?repository_url=https:%2F%2Fmaven.google.com", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/gem-test.json0000644000175000017500000001007715264504421020043 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Ruby gems can use qualifiers. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:gem/jruby-launcher@1.1.2?Platform=java", "expected_output": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_failure": false, "expected_message": null }, { "description": "Ruby gems can use qualifiers", "test_group": "required", "test_type": "parse", "input": "pkg:gem/jruby-launcher@1.1.2?Platform=java", "expected_failure": true, "expected_message": "Should fail due to qualifier key not in lowercase" }, { "description": "Ruby gems can use qualifiers. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_output": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_failure": false, "expected_message": null }, { "description": "Ruby gems can use qualifiers", "test_group": "required", "test_type": "build", "input": { "type": "gem", "namespace": null, "name": "jruby-launcher", "version": "1.1.2", "qualifiers": { "platform": "java" }, "subpath": null }, "expected_output": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: gem", "test_group": "required", "test_type": "parse", "input": "pkg:gem/ruby-advisory-db-check@0.12.4", "expected_output": { "type": "gem", "namespace": null, "name": "ruby-advisory-db-check", "version": "0.12.4", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: gem", "test_group": "required", "test_type": "validate", "input": "pkg:gem/ruby-advisory-db-check@0.12.4", "expected_output": "pkg:gem/ruby-advisory-db-check@0.12.4", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: gem", "test_group": "required", "test_type": "build", "input": { "type": "gem", "namespace": null, "name": "ruby-advisory-db-check", "version": "0.12.4", "qualifiers": null, "subpath": null }, "expected_output": "pkg:gem/ruby-advisory-db-check@0.12.4", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: gem", "test_group": "required", "test_type": "parse", "input": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_output": { "type": "gem", "namespace": null, "name": "jruby-launcher", "version": "1.1.2", "qualifiers": { "platform": "java" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: gem", "test_group": "required", "test_type": "validate", "input": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_output": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: gem", "test_group": "required", "test_type": "build", "input": { "type": "gem", "namespace": null, "name": "jruby-launcher", "version": "1.1.2", "qualifiers": { "platform": "java" }, "subpath": null }, "expected_output": "pkg:gem/jruby-launcher@1.1.2?platform=java", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/pypi-test.json0000644000175000017500000001547715264504421020265 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "pypi names have special rules and not case sensitive. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:PYPI/Django_package@1.11.1.dev1", "expected_output": "pkg:pypi/django-package@1.11.1.dev1", "expected_failure": false, "expected_message": null }, { "description": "pypi names have special rules and not case sensitive", "test_group": "required", "test_type": "parse", "input": "pkg:PYPI/Django_package@1.11.1.dev1", "expected_output": { "type": "pypi", "namespace": null, "name": "django-package", "version": "1.11.1.dev1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "pypi names have special rules and not case sensitive. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:pypi/django-package@1.11.1.dev1", "expected_output": "pkg:pypi/django-package@1.11.1.dev1", "expected_failure": false, "expected_message": null }, { "description": "pypi names have special rules and not case sensitive", "test_group": "required", "test_type": "build", "input": { "type": "pypi", "namespace": null, "name": "django-package", "version": "1.11.1.dev1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:pypi/django-package@1.11.1.dev1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: pypi", "test_group": "required", "test_type": "parse", "input": "pkg:pypi/django@1.11.1", "expected_output": { "type": "pypi", "namespace": null, "name": "django", "version": "1.11.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: pypi", "test_group": "required", "test_type": "validate", "input": "pkg:pypi/django@1.11.1", "expected_output": "pkg:pypi/django@1.11.1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: pypi", "test_group": "required", "test_type": "build", "input": { "type": "pypi", "namespace": null, "name": "django", "version": "1.11.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:pypi/django@1.11.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: pypi", "test_group": "required", "test_type": "parse", "input": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1.tar.gz", "expected_output": { "type": "pypi", "namespace": null, "name": "django", "version": "1.11.1", "qualifiers": { "file_name": "Django-1.11.1.tar.gz" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: pypi", "test_group": "required", "test_type": "validate", "input": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1.tar.gz", "expected_output": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1.tar.gz", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: pypi", "test_group": "required", "test_type": "build", "input": { "type": "pypi", "namespace": null, "name": "django", "version": "1.11.1", "qualifiers": { "file_name": "Django-1.11.1.tar.gz" }, "subpath": null }, "expected_output": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1.tar.gz", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: pypi", "test_group": "required", "test_type": "parse", "input": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1-py2.py3-none-any.whl", "expected_output": { "type": "pypi", "namespace": null, "name": "django", "version": "1.11.1", "qualifiers": { "file_name": "Django-1.11.1-py2.py3-none-any.whl" }, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: pypi", "test_group": "required", "test_type": "validate", "input": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1-py2.py3-none-any.whl", "expected_output": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1-py2.py3-none-any.whl", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: pypi", "test_group": "required", "test_type": "build", "input": { "type": "pypi", "namespace": null, "name": "django", "version": "1.11.1", "qualifiers": { "file_name": "Django-1.11.1-py2.py3-none-any.whl" }, "subpath": null }, "expected_output": "pkg:pypi/django@1.11.1?file_name=Django-1.11.1-py2.py3-none-any.whl", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL type: pypi", "test_group": "required", "test_type": "parse", "input": "pkg:pypi/django-allauth@12.23", "expected_output": { "type": "pypi", "namespace": null, "name": "django-allauth", "version": "12.23", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL type: pypi", "test_group": "required", "test_type": "validate", "input": "pkg:pypi/django-allauth@12.23", "expected_output": "pkg:pypi/django-allauth@12.23", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL type: pypi", "test_group": "required", "test_type": "build", "input": { "type": "pypi", "namespace": null, "name": "django-allauth", "version": "12.23", "qualifiers": null, "subpath": null }, "expected_output": "pkg:pypi/django-allauth@12.23", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/purl/types/otp-test.json0000644000175000017500000001001415264504421020064 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "Parse test for PURL", "test_group": "required", "test_type": "parse", "input": "pkg:otp/asn1@5.4.1?arch=amd64&platform=linux&repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git#src/asn1ct.erl", "expected_output": { "type": "otp", "namespace": null, "name": "asn1", "version": "5.4.1", "qualifiers": { "platform": "linux", "arch": "amd64", "repository_url": "https://github.com/erlang/otp", "vcs_url": "git+https://github.com/erlang/otp.git" }, "subpath": "src/asn1ct.erl" }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL", "test_group": "required", "test_type": "validate", "input": "pkg:otp/asn1@5.4.1?arch=amd64&platform=linux&repository_url=https://github.com/erlang/otp&vcs_url=git%2Bhttps://github.com/erlang/otp.git#src/asn1ct.erl", "expected_output": "pkg:otp/asn1@5.4.1?arch=amd64&platform=linux&repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git#src/asn1ct.erl", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL", "test_group": "required", "test_type": "build", "input": { "type": "otp", "namespace": null, "name": "asn1", "version": "5.4.1", "qualifiers": { "platform": "linux", "arch": "amd64", "repository_url": "https://github.com/erlang/otp", "vcs_url": "git+https://github.com/erlang/otp.git" }, "subpath": "src/asn1ct.erl" }, "expected_output": "pkg:otp/asn1@5.4.1?arch=amd64&platform=linux&repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git#src/asn1ct.erl", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL", "test_group": "required", "test_type": "parse", "input": "pkg:otp/hex@2.1.1", "expected_output": { "type": "otp", "namespace": null, "name": "hex", "version": "2.1.1", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "Roundtrip test for PURL", "test_group": "required", "test_type": "validate", "input": "pkg:otp/hex@2.1.1", "expected_output": "pkg:otp/hex@2.1.1", "expected_failure": false, "expected_message": null }, { "description": "Build test for PURL", "test_group": "required", "test_type": "build", "input": { "type": "otp", "namespace": null, "name": "hex", "version": "2.1.1", "qualifiers": null, "subpath": null }, "expected_output": "pkg:otp/hex@2.1.1", "expected_failure": false, "expected_message": null }, { "description": "Parse test for PURL", "test_group": "required", "test_type": "parse", "input": "pkg:otp/namespace/hex@2.1.1", "expected_failure": true, "expected_message": "Should fail to parse an OTP PURL containing a prohibited namespace component" }, { "description": "Build test for PURL", "test_group": "required", "test_type": "build", "input": { "type": "otp", "namespace": "namespace", "name": "hex", "version": "2.1.1", "qualifiers": null, "subpath": null }, "expected_failure": true, "expected_message": "Should fail to build an OTP PURL containing a prohibited namespace component" } ] } URI-PackageURL-2.26/t/purl/types/opam-test.json0000644000175000017500000000370215264504421020224 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "valid opam purl. Roundtrip an input purl to canonical.", "test_group": "recommended", "test_type": "validate", "input": "pkg:opam/conex@1.0.0", "expected_output": "pkg:opam/conex@1.0.0", "expected_failure": false, "expected_message": null }, { "description": "valid opam purl", "test_group": "required", "test_type": "parse", "input": "pkg:opam/conex@1.0.0", "expected_output": { "type": "opam", "namespace": null, "name": "conex", "version": "1.0.0", "qualifiers": null, "subpath": null }, "expected_failure": false, "expected_message": null }, { "description": "valid opam purl. Roundtrip a canonical input to canonical output.", "test_group": "required", "test_type": "validate", "input": "pkg:opam/conex@1.0.0", "expected_output": "pkg:opam/conex@1.0.0", "expected_failure": false, "expected_message": null }, { "description": "valid opam purl (name only)", "test_group": "required", "test_type": "build", "input": { "type": "opam", "namespace": null, "name": "conex", "version": null, "qualifiers": null, "subpath": null }, "expected_output": "pkg:opam/conex", "expected_failure": false, "expected_message": null }, { "description": "name is always required", "test_group": "required", "test_type": "build", "input": { "type": "opam", "namespace": null, "name": null, "version": null, "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" } ] } URI-PackageURL-2.26/t/purl/spec/0000755000175000017500000000000015264504726015214 5ustar peppepeppeURI-PackageURL-2.26/t/purl/spec/specification-test.json0000644000175000017500000001566415264504421021710 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/purl-test.schema-0.2.json", "tests": [ { "description": "a scheme is always required", "test_group": "required", "test_type": "parse", "input": "EnterpriseLibrary.Common@6.0.1304", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "a scheme is always required", "test_group": "required", "test_type": "parse", "input": "EnterpriseLibrary.Common@6.0.1304", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "a type is always required", "test_group": "required", "test_type": "parse", "input": "pkg:EnterpriseLibrary.Common@6.0.1304", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "a type is always required", "test_group": "required", "test_type": "parse", "input": "pkg:EnterpriseLibrary.Common@6.0.1304", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid canonical purl input" }, { "description": "a type is always required", "test_group": "required", "test_type": "build", "input": { "type": null, "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "check for invalid character in type", "test_group": "required", "test_type": "parse", "input": "pkg:n&g?inx/nginx@0.8.9", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "check for null type", "test_group": "required", "test_type": "build", "input": { "type": null, "namespace": null, "name": "nginx", "version": "0.8.9", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from null type" }, { "description": "check for type that starts with number", "test_group": "required", "test_type": "parse", "input": "pkg:3nginx/nginx@0.8.9", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl type (cannot start with number)" }, { "description": "check for type that starts with number", "test_group": "required", "test_type": "build", "input": { "type": null, "namespace": null, "name": "nginx", "version": "0.8.9", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "check for colon in type", "test_group": "required", "test_type": "parse", "input": "pkg:nginx:a/nginx@0.8.9", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "check for colon in type", "test_group": "required", "test_type": "build", "input": { "type": null, "namespace": null, "name": "nginx", "version": "0.8.9", "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "checks for invalid qualifier keys", "test_group": "required", "test_type": "parse", "input": "pkg:npm/myartifact@1.0.0?in%20production=true", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "checks for invalid qualifier keys", "test_group": "required", "test_type": "build", "input": { "type": "npm", "namespace": null, "name": "myartifact", "version": "1.0.0", "qualifiers": { "in production": "true" }, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "a name is required", "test_group": "required", "test_type": "parse", "input": "pkg:maven/@1.3.4", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "a name is required", "test_group": "required", "test_type": "build", "input": { "type": "maven", "namespace": null, "name": null, "version": null, "qualifiers": null, "subpath": null }, "expected_output": null, "expected_failure": true, "expected_message": "Should fail to build a PURL from invalid input components" }, { "description": "invalid encoded colon : between scheme and type", "test_group": "required", "test_type": "parse", "input": "pkg%3Amaven/org.apache.commons/io", "expected_output": null, "expected_failure": true, "expected_message": "Should fail to parse a PURL from invalid purl input" }, { "description": "Build with multiple checksum", "test_group": "required", "test_type": "build", "input": { "type": "generic", "namespace": null, "name": "openssl", "version": "1.1.10g", "qualifiers": { "checksum": "sha1:ad9503c3e994a4f,sha256:41bf9088b3a1e6c1ef1d" }, "subpath": null }, "expected_output": "pkg:generic/openssl@1.1.10g?checksum=sha1:ad9503c3e994a4f%2Csha256:41bf9088b3a1e6c1ef1d", "expected_failure": false, "expected_message": null }, { "description": "Roundtrip with multiple checksum", "test_group": "required", "test_type": "validate", "input": "pkg:generic/bitwarderl?checksum=sha1:ad9503c3e994a4f%2Csha256:41bf9088b3a1e6c1ef1d", "expected_output": "pkg:generic/bitwarderl?checksum=sha1:ad9503c3e994a4f%2Csha256:41bf9088b3a1e6c1ef1d", "expected_failure": false, "expected_message": null } ] } URI-PackageURL-2.26/t/30-util.t0000644000175000017500000001110215135504042014641 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::PackageURL::Util qw(purl_to_urls); #<<< my @tests = ( { purl => 'pkg:cpan/GDT/URI-PackageURL@2.01', download => 'https://www.cpan.org/authors/id/G/GD/GDT/URI-PackageURL-2.01.tar.gz', repository => 'https://metacpan.org/release/GDT/URI-PackageURL-2.01' }, { purl => 'pkg:github/package-url/purl-spec@40d01e26f9ae0af6b50a1309e6b089c14d6d2244', repository => 'https://github.com/package-url/purl-spec', download => 'https://github.com/package-url/purl-spec/archive/40d01e26f9ae0af6b50a1309e6b089c14d6d2244.tar.gz', }, { purl => 'pkg:gitlab/gitlab-org/gitlab-runner@v16.0.2', download => 'https://gitlab.com/gitlab-org/gitlab-runner/-/archive/v16.0.2/gitlab-runner-v16.0.2.tar.gz', repository => 'https://gitlab.com/gitlab-org/gitlab-runner' }, { purl => 'pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c', download => 'https://bitbucket.org/birkenfeld/pygments-main/get/244fd47e07d1014f0aed9c.tar.gz', repository => 'https://bitbucket.org/birkenfeld/pygments-main' }, { purl => 'pkg:gem/ruby-advisory-db-check@0.0.4', repository => 'https://rubygems.org/gems/ruby-advisory-db-check/versions/0.0.4', download => 'https://rubygems.org/downloads/ruby-advisory-db-check-0.0.4.gem' }, { purl => 'pkg:cargo/rand@0.7.2', repository => 'https://crates.io/crates/rand/0.7.2', download => 'https://crates.io/api/v1/crates/rand/0.7.2/download' }, { purl => 'pkg:npm/%40angular/animations@12.2.17', repository => 'https://www.npmjs.com/package/@angular/animations/v/12.2.17', download => 'https://registry.npmjs.org/@angular/animations/-/animations-12.2.17.tgz' }, { purl => 'pkg:nuget/EnterpriseLibrary.Common@6.0.1304', repository => 'https://www.nuget.org/packages/EnterpriseLibrary.Common/6.0.1304', download => 'https://www.nuget.org/api/v2/package/EnterpriseLibrary.Common/6.0.1304' }, { purl => 'pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?packaging=sources', repository => 'https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-anim/1.9.1', download => 'https://repo.maven.apache.org/maven2/org/apache/xmlgraphics/batik-anim/1.9.1/batik-anim-1.9.1.jar' }, { purl => 'pkg:pypi/django@1.11.1', repository => 'https://pypi.org/project/django/1.11.1' }, { purl => 'pkg:composer/laravel/laravel@5.5.0', repository => 'https://packagist.org/packages/laravel/laravel' }, { purl => 'pkg:docker/cassandra@latest', repository => 'https://hub.docker.com/_/cassandra' }, { purl => 'pkg:docker/smartentry/debian@dc437cc87d10', repository => 'https://hub.docker.com/r/smartentry/debian' }, { purl => 'pkg:github/nexb/scancode-toolkit@v3.1.1', download => 'https://github.com/nexb/scancode-toolkit/archive/refs/tags/v3.1.1.tar.gz', repository => 'https://github.com/nexb/scancode-toolkit' }, { purl => 'pkg:cpan/ILYAZ/Term-Gnuplot@0.90380906?distpath=I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip', download => 'https://www.cpan.org/authors/id/I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip', repository => 'https://metacpan.org/release/ILYAZ/Term-Gnuplot-0.90380906', }, { purl => 'pkg:cpan/ILYAZ/Term-Gnuplot@0.90380906?distpath=authors/id/I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip', download => 'https://www.cpan.org/authors/id/I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip', repository => 'https://metacpan.org/release/ILYAZ/Term-Gnuplot-0.90380906', }, { purl => 'pkg:cpan/ILYAZ/Term-Gnuplot@0.90380906?distpath=ILYAZ/modules/Term-Gnuplot-0.90380906.zip', download => 'https://www.cpan.org/authors/id/I/IL/ILYAZ/modules/Term-Gnuplot-0.90380906.zip', repository => 'https://metacpan.org/release/ILYAZ/Term-Gnuplot-0.90380906', }, ); #>>> foreach my $test (@tests) { my $purl = $test->{purl}; my $urls = purl_to_urls($purl); for my $type (qw[download repository]) { next unless defined $urls->{$type}; my $got = $urls->{$type}; my $expected = $test->{$type}; my $label = sprintf('%s - %s (%s URL)', $purl, $urls->{$type}, $type); is($got, $expected, $label); } } done_testing(); URI-PackageURL-2.26/t/20-decode.t0000644000175000017500000000615015135504042015115 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::PackageURL; my $t1 = 'pkg:cpan/GDT/URI-PackageURL@2.23'; my $t2 = 'pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie'; my $t3 = 'pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations'; my $t4 = 'pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io'; my $t5 = 'pkg:generic/ns/n@m#?@version?qualifier=#v@lue#subp@th?'; my $t6 = 'pkg:/generic/test?checksum=sha1:ad9503c3e994a4f,sha256:41bf9088b3a1e6c1ef1d'; my $t7 = 'pkg:pypi/django?vers=vers:pypi%2F%3E%3D1.11.0%7C%21%3D1.11.1%7C%3C2.0.0'; subtest "Decode '$t1'" => sub { my $purl = decode_purl($t1); is($purl->type, 'cpan', 'Type'); is($purl->namespace, 'GDT', 'Namespace'); is($purl->name, 'URI-PackageURL', 'Name'); is($purl->version, '2.23', 'Version'); is($purl->to_string, $t1, 'PackageURL'); }; subtest "Decode '$t2'" => sub { my $purl = decode_purl($t2); is($purl->type, 'deb', 'Type'); is($purl->namespace, 'debian', 'Namespace'); is($purl->name, 'curl', 'Name'); is($purl->version, '7.50.3-1', 'Version'); is($purl->qualifiers->{arch}, 'i386', 'Qualifier "arch"'); is($purl->qualifiers->{distro}, 'jessie', 'Qualifier "distro"'); is($purl->to_string, $t2, 'PackageURL'); }; subtest "Decode '$t3'" => sub { my $purl = decode_purl($t3); is($purl->type, 'golang', 'Type'); is($purl->namespace, 'google.golang.org', 'Namespace'); is($purl->name, 'genproto', 'Name'); is($purl->version, 'abcdedf', 'Version'); is($purl->subpath, 'googleapis/api/annotations', 'Subpath'); is($purl->to_string, $t3, 'PackageURL'); }; subtest "Decode '$t4'" => sub { my $purl = decode_purl($t4); is($purl->type, 'docker', 'Type'); is($purl->namespace, 'customer', 'Namespace'); is($purl->name, 'dockerimage', 'Name'); is($purl->version, 'sha256:244fd47e07d1004f0aed9c', 'Version'); is($purl->qualifiers->{repository_url}, 'gcr.io', 'Qualifier "repository_url"'); is($purl->to_string, $t4, 'PackageURL'); }; subtest "Decode '$t5'" => sub { my $purl = decode_purl($t5); is($purl->type, 'generic', 'Type'); is($purl->namespace, 'ns', 'Namespace'); is($purl->name, 'n@m#?', 'Name'); is($purl->version, 'version', 'Version'); is($purl->qualifiers->{qualifier}, '#v@lue', 'Qualifier "qualifier"'); is($purl->subpath, 'subp@th?', 'Subpath'); }; subtest "Decode '$t6'" => sub { my $purl = decode_purl($t6); is($purl->type, 'generic', 'Type'); is($purl->name, 'test', 'Name'); isa_ok($purl->qualifiers->{checksum}, 'ARRAY', 'Qualifier "checksum" as ARRAY'); }; done_testing(); URI-PackageURL-2.26/t/sync-tests.sh0000644000175000017500000000164415264504421015745 0ustar peppepeppe#!/bin/bash # sync-purl-tests - Sync the PURL and VERS tests # # (C) 2025-2026, Giuseppe Di Terlizzi cd $(dirname $0) ; CWD=$(pwd) GIT_REF=heads/main #GIT_REF=tags/v1.0.0 PURL_ARCHIVE_URL="https://github.com/package-url/purl-spec/archive/refs/$GIT_REF.zip" PURL_ARCHIVE_FILE=$(mktemp) GIT_REF=heads/main VERS_ARCHIVE_URL="https://github.com/package-url/vers-spec/archive/refs/$GIT_REF.zip" VERS_ARCHIVE_FILE=$(mktemp) rm -rf $CWD/{purl,vers}/* mkdir -p $CWD/{purl,vers} # PURL tests wget -O $PURL_ARCHIVE_FILE $PURL_ARCHIVE_URL unzip -j $PURL_ARCHIVE_FILE 'purl-spec-*/tests/spec/*' -d $CWD/purl/spec unzip -j $PURL_ARCHIVE_FILE 'purl-spec-*/tests/types/*' -d $CWD/purl/types rm $PURL_ARCHIVE_FILE # VERS tests wget -O $VERS_ARCHIVE_FILE $VERS_ARCHIVE_URL unzip -j $VERS_ARCHIVE_FILE 'vers-spec-*/tests/*' -d $CWD/vers rm $VERS_ARCHIVE_FILE # Update manifest ( cd .. make manifest ) URI-PackageURL-2.26/t/60-semver-compare.t0000644000175000017500000000726515264504421016637 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::VersionRange::Util qw(semver_version_compare version_compare); #<<< my @test_cases = ( # equal – base & build metadata ignored ["1.0.0", "1.0.0", 0], ["1.0.0+20130313144700", "1.0.0", 0], ["1.0.0+exp.sha.5114f85", "1.0.0+build.1", 0], ["2.1.0", "2.1.0", 0], ["0.0.0", "0.0.0", 0], # major/minor/patch ordering ["1.0.0", "2.0.0", -1], ["2.0.0", "1.0.0", 1], ["2.1.0", "2.2.0", -1], ["2.2.0", "2.1.0", 1], ["2.1.0", "2.1.1", -1], ["2.1.1", "2.1.0", 1], ["1.9.9", "1.10.0", -1], ["1.10.0", "1.9.9", 1], # prerelease < release ["1.0.0-alpha", "1.0.0", -1], ["1.0.0-rc.1", "1.0.0", -1], ["1.0.0-rc.1", "1.0.0-rc.1", 0], # prerelease chain (numeric vs alphabetic; length) ["1.0.0-alpha", "1.0.0-alpha.1", -1], ["1.0.0-alpha.1", "1.0.0-alpha.beta", -1], ["1.0.0-alpha.beta", "1.0.0-beta", -1], ["1.0.0-beta", "1.0.0-beta.2", -1], ["1.0.0-beta.2", "1.0.0-beta.11", -1], ["1.0.0-beta.11", "1.0.0-rc.1", -1], ["1.0.0-rc.1", "1.0.0", -1], # the same but reversed ( > ) ["1.0.0-alpha.1", "1.0.0-alpha", 1], ["1.0.0-alpha.beta", "1.0.0-alpha.1", 1], ["1.0.0-beta", "1.0.0-alpha.beta", 1], ["1.0.0-beta.2", "1.0.0-beta", 1], ["1.0.0-beta.11", "1.0.0-beta.2", 1], ["1.0.0-rc.1", "1.0.0-beta.11", 1], ["1.0.0", "1.0.0-rc.1", 1], # numeric vs alphanumeric in prerelease tokens ["1.0.0-alpha.10", "1.0.0-alpha.2", 1], # 10 > 2 (numeric) ["1.0.0-alpha.2", "1.0.0-alpha.10", -1], ["1.0.0-alpha.1", "1.0.0-alpha.a", -1], # numeric < alphanumeric ["1.0.0-alpha.a", "1.0.0-alpha.1", 1], # length comparison when prefixes are equal ["1.0.0-alpha", "1.0.0-alpha.0", -1], # shorter < longer ["1.0.0-alpha.0", "1.0.0-alpha", 1], ["1.0.0-a.b", "1.0.0-a.b.c", -1], ["1.0.0-a.b.c", "1.0.0-a.b", 1], # complex mixes (from the common node-semver suite) ["1.2.3-a.10", "1.2.3-a.5", 1], ["1.2.3-a.b", "1.2.3-a.5", 1], # alpha > numeric ["1.2.3-a.b", "1.2.3-a", 1], # extra token => greater ["1.2.3-a.b.c.10.d.5", "1.2.3-a.b.c.5.d.100", 1], # shorthand equivalences (not in pure standard, but often supported) ["1.0", "1.0.0", 0], ["1", "1.0.0", 0], # build metadata with prerelease (ignored) ["1.0.0-beta+exp.sha", "1.0.0-beta+abc", 0], ["1.0.0+exp.sha", "1.0.0", 0], ); #>>> my %COMPARATORS = ( 'semver_version_compare' => \&semver_version_compare, 'version_compare (semver)' => sub { version_compare('semver', @_) }, 'version_compare (npm)' => sub { version_compare('npm', @_) }, ); foreach my $test (@test_cases) { my ($a, $b, $expected) = @{$test}; my $rev_expected = -$expected; my $test_label = "$a <=> $b == $expected"; my $rev_test_label = "$b <=> $a == $rev_expected (reverse test)"; foreach my $name (keys %COMPARATORS) { my $comparator = $COMPARATORS{$name}; subtest "$name: $test_label" => sub { my $got = $comparator->($a, $b); my $rev_got = $comparator->($b, $a); is($got, $expected, $test_label); is($rev_got, $rev_expected, $rev_test_label); }; } } done_testing(); URI-PackageURL-2.26/t/99-vers-tests.t0000644000175000017500000001434115264504421016036 0ustar peppepeppe#!perl use strict; use warnings; use File::Find qw(find); use JSON::PP; use Test::More; require_ok('URI::VersionRange'); my $purl_tests_dir = File::Spec->catdir('t', 'vers'); BAIL_OUT('"vers" tests directory not found') if (!-d $purl_tests_dir); find {wanted => \&execute_test, no_chdir => 1}, $purl_tests_dir; sub test_context { my $test = shift; return sprintf '[group:%s / type:%s] %s', $test->{test_group}, $test->{test_type}, $test->{description}; } sub execute_test { my $test_file = $_; return if -d $test_file; return unless $test_file =~ /\.json/; if (my $vers_scheme = $ENV{VERS_SCHEME}) { return unless ($test_file =~ /$vers_scheme/); diag "Test only $ENV{VERS_SCHEME} testcases"; } note "--- $test_file ---"; open my $fh, '<', $test_file or Carp::croak "Can't open file: $!"; my $test_content = do { local $/; <$fh> }; my $test_data = eval { JSON::PP::decode_json($test_content) }; BAIL_OUT("$test_file - $@") if $@; foreach my $test (@{$test_data->{tests}}) { TODO: { execute_containment_test($test) if $test->{test_type} eq 'containment'; execute_validate_test($test) if $test->{test_type} eq 'validate'; execute_from_native_test($test) if $test->{test_type} eq 'from_native'; execute_comparison_test($test) if $test->{test_type} eq 'comparison'; execute_parse_test($test) if $test->{test_type} eq 'parse'; execute_equality_test($test) if $test->{test_type} eq 'equality'; } } } sub execute_containment_test { my $test = shift; my $test_description = test_context($test); my $vers_string = $test->{input}->{vers}; my $version = $test->{input}->{version}; my $expected_output = $test->{expected_output}; my $vers = eval { URI::VersionRange->from_string($vers_string) }; is $vers->contains($version), !!1, "$version version in range ($vers)" if $expected_output; is $vers->contains($version), !!0, "$version version not in range ($vers)" unless $expected_output; } sub execute_validate_test { my $test = shift; my $test_description = test_context($test); my $vers_string = $test->{input}; my $expected = $test->{expected_output}; my $got = eval { URI::VersionRange->from_string($vers_string) }; is "$got", $expected, "$test_description ($got)"; } sub execute_from_native_test { my $test = shift; my $test_description = test_context($test); my $native_range = $test->{input}->{native_range}; my $scheme = $test->{input}->{scheme}; my $expected = $test->{expected_output}; local $TODO = "SKIP vers:conan/" if ($expected // q{}) eq 'vers:conan/'; my $got = eval { URI::VersionRange->from_native(scheme => $scheme, range => $native_range) }; if ($test->{expected_failure}) { ok($@, "[$scheme] $test_description ($native_range)"); return; } local $TODO = 'Skip because VERS require a range' if $expected eq 'vers:conan/'; local $TODO = 'Skip include_prerelease=True' if $native_range =~ 'include_prerelease=True'; is "$got", $expected, "[$scheme] $test_description ($native_range --> $got)"; } sub execute_comparison_test { my $test = shift; my $test_description = test_context($test); my $scheme = $test->{input}->{input_scheme} || $test->{input}->{input_type}; # test schema --> v1 or v2 my @versions = @{$test->{input}->{versions}}; my @expected_output = @{$test->{expected_output}}; # Comparators for other schemes are provided by the user (see URI::VersionRange::Version) local $TODO = "No comparator class for '$scheme' scheme" if URI::VersionRange::Version->load($scheme) eq 'URI::VersionRange::Version'; my $encoded = eval { URI::VersionRange->new(scheme => $scheme, constraints => \@versions) }; diag $@ if $@; my $got = eval { URI::VersionRange->from_string("$encoded") }; my @got = map { $_->version } @{$got->constraints}; is_deeply(\@got, \@expected_output, "$test_description --> $got"); } sub execute_equality_test { my $test = shift; my $test_description = test_context($test); my $scheme = $test->{input}->{input_scheme} || $test->{input}->{input_type}; # test schema --> v1 or v2 my ($left, $right) = @{$test->{input}->{versions}}; my $expected = $test->{expected_output}; # Comparators for other schemes are provided by the user (see URI::VersionRange::Version) local $TODO = "No comparator class for '$scheme' scheme" if URI::VersionRange::Version->load($scheme) eq 'URI::VersionRange::Version'; my $got = eval { URI::VersionRange::Util::version_compare($scheme, $left, $right) == 0 }; diag $@ if $@; is(!!$got, !!$expected, "$test_description --> $left " . ($expected ? '==' : '!=') . " $right"); } sub execute_parse_test { my $test = shift; # TODO: VERS canonical form validation my @TODO = ( 'Parsing fails when ASCII whitespace is present.', 'Parsing fails when constraints start with a pipe.', 'Parsing fails when constraints end with a pipe.', 'Parsing fails when constraints are not in canonical order.', "Parsing fails when explicit equality comparator '=' is used.", "Parsing fails when double equality prefix '==' is used.", 'Parsing fails when literal ASCII whitespace occurs in a version.', 'Parsing fails for datetime when lowercase t and z are used.', ); local $TODO = 'VERS canonical form validation' if grep { $test->{description} eq $_ } @TODO; my $test_description = test_context($test); my $vers_string = $test->{input}; my $got = eval { URI::VersionRange->from_string($vers_string) }; if ($test->{expected_failure}) { ok($@, "$test_description ($vers_string)"); return; } my $expected = $test->{expected_output}; is($@, '', "$test_description ($vers_string)"); is($got->scheme, $expected->{type}, "$test_description ($vers_string) - type"); my @got = map { [$_->comparator, $_->version] } @{$got->constraints}; is_deeply(\@got, $expected->{constraints}, "$test_description ($vers_string) - constraints"); } done_testing(); URI-PackageURL-2.26/t/99-purl-legacy-test-suite.t0000644000175000017500000000627315264504421020254 0ustar peppepeppe#!perl use JSON::PP; use Test::More; use File::Spec; # Official "legacy" PURL test suite (https://raw.githubusercontent.com/package-url/purl-spec/e56202efb16b943add2ae27b81a00efd25add47a/test-suite-data.json) unless ($ENV{LEGACY_PURL_TESTS}) { plan(skip_all => "LEGACY_PURL_TEST_SUITE disabled"); } require_ok('URI::PackageURL'); sub test_purl_encode { my ($test) = @_; my $test_name = $test->{description}; my $purl = eval { URI::PackageURL->new( type => $test->{type}, namespace => $test->{namespace}, name => $test->{name}, version => $test->{version}, qualifiers => $test->{qualifiers}, subpath => $test->{subpath} ); }; local $TODO = 'SKIP test because in ENCODE always generate well format PURL string' if ($test->{purl} =~ /pkg%3A/); if ($test->{is_invalid}) { like($@, qr/Invalid PURL/i, "ENCODE: $test_name"); return; } if (!$test->{is_invalid} && $@) { fail("ENCODE: $test_name"); return; } if (!$test->{is_invalid}) { is($purl->to_string, $test->{canonical_purl}, "ENCODE: $test_name"); return; } } sub test_purl_decode { my ($test, $purl_string_field) = @_; $purl_string_field //= 'canonical_purl'; return unless defined $test->{$purl_string_field}; my $purl_string = $test->{$purl_string_field}; my $test_name = $test->{description}; my $purl = eval { URI::PackageURL->from_string($purl_string) }; if ($test->{is_invalid}) { like($@, qr/(Invalid|Malformed) PURL/i, "DECODE $purl_string_field: $test_name"); return; } if (!$test->{is_invalid} && $@) { fail("DECODE: $test_name --> $purl_string"); return; } if (!$test->{is_invalid}) { is($purl->to_string, $test->{canonical_purl}, "DECODE $purl_string_field: $test_name"); my @components = qw(type namespace name version subpath); TODO: { local $TODO = 'SKIP test because in canonical subpath exist "." or ".."' if ($test->{subpath} && $test->{subpath} =~ /\./); foreach my $component (@components) { is($purl->$component, $test->{$component}, "DECODE $purl_string_field: Compare '$test_name' $component component"); } } my $qualifiers = $purl->qualifiers; is_deeply($qualifiers, $test->{qualifiers}, "DECODE $purl_string_field: Compare '$test_name' qualifiers") if %{$qualifiers}; return; } } my $test_suite_file = File::Spec->catfile('t', 'test-suite-data.json'); BAIL_OUT('"test-suite-data.json" file not found') if (!-e $test_suite_file); open my $fh, '<', $test_suite_file or Carp::croak "Can't open file: $!"; my $test_suite_content = do { local $/; <$fh> }; my $test_suite_data = JSON::PP::decode_json($test_suite_content); foreach my $test (@{$test_suite_data}) { TODO: { local $TODO = '(!) Disabled test!'; $ENV{PURL_LEGACY_CPAN_TYPE} = 1; test_purl_encode($test); test_purl_decode($test, 'purl'); test_purl_decode($test, 'canonical_purl'); } } done_testing(); URI-PackageURL-2.26/t/54-utf8.t0000644000175000017500000000407115264504421014573 0ustar peppepeppe#!perl -T use strict; use warnings; use utf8; use Test::More; use URI::PackageURL; use URI::VersionRange; binmode Test::More->builder->$_, ':encoding(UTF-8)' for qw(output failure_output todo_output); # PURL #<<< my @purl_tests = ( {purl => 'pkg:generic/caf%C3%A9@1.0', name => 'café', expected => 'pkg:generic/caf%C3%A9@1.0'}, {purl => 'pkg:generic/café@1.0', name => 'café', expected => 'pkg:generic/caf%C3%A9@1.0'}, {purl => 'pkg:generic/%F0%9F%98%80', name => "\x{1F600}", expected => 'pkg:generic/%F0%9F%98%80'}, {purl => 'pkg:generic/ns%C3%BC/foo#d%C3%ADr/file', name => 'foo', expected => 'pkg:generic/ns%C3%BC/foo#d%C3%ADr/file'}, ); #>>> foreach my $test (@purl_tests) { my $purl = URI::PackageURL->from_string($test->{purl}); is($purl->name, $test->{name}, "$test->{purl} - name"); is("$purl", $test->{expected}, "$test->{purl} - to_string"); } my $purl = URI::PackageURL->from_string('pkg:generic/ns%C3%BC/foo?note=%E2%82%AC%20price#d%C3%ADr/file'); is($purl->namespace, 'nsü', 'PURL namespace'); is($purl->qualifiers->{note}, '€ price', 'PURL qualifier'); is($purl->subpath, 'dír/file', 'PURL subpath'); is(URI::PackageURL->new(type => 'generic', name => 'café'), 'pkg:generic/caf%C3%A9', 'PURL encode (Latin-1 range)'); is( URI::PackageURL->new(type => 'generic', name => "\x{1F600}"), 'pkg:generic/%F0%9F%98%80', 'PURL encode (wide character)' ); eval { URI::PackageURL->from_string('pkg:generic/caf%E9') }; like($@, qr/invalid UTF-8 encoding/, 'PURL invalid UTF-8'); # VERS my $vers = URI::VersionRange->new(scheme => 'lexicographic', constraints => ['é', "\x{1F600}"]); is("$vers", 'vers:lexicographic/%C3%A9|%F0%9F%98%80', 'VERS encode'); is_deeply( [map { $_->version } @{URI::VersionRange->from_string("$vers")->constraints}], ['é', "\x{1F600}"], 'VERS decode' ); eval { URI::VersionRange->from_string('vers:lexicographic/%E9') }; like($@, qr/Invalid UTF-8 encoding/, 'VERS invalid UTF-8'); done_testing(); URI-PackageURL-2.26/t/50-version-range.t0000644000175000017500000000717215264504421016465 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::VersionRange; my @in_range = ('v2.11', 'v2.99', 'v3.00'); my @not_in_range = ('v0.01', 'v0.99', 'v2.10'); subtest "VERS: encode/decode" => sub { my $vers = 'vers:cpan/>v1.00|!=v2.10|<=v3.00'; my $v1 = URI::VersionRange->from_string($vers); my $v2 = URI::VersionRange->new( scheme => 'cpan', constraints => [ URI::VersionRange::Constraint->new(comparator => '>', version => 'v1.00'), URI::VersionRange::Constraint->new(comparator => '!=', version => 'v2.10'), URI::VersionRange::Constraint->new(comparator => '<=', version => 'v3.00') ] ); my $v3 = URI::VersionRange->new(scheme => 'cpan', constraints => ['>v1.00', '!=v2.10', '<=v3.00']); my $v4 = decode_vers($vers); my $v5 = decode_vers(encode_vers(scheme => 'cpan', constraints => ['>v1.00', '!=v2.10', '<=v3.00'])); my %tests = ( 'from_string' => $v1, 'object-oriented #1' => $v2, 'object-oriented #2' => $v3, 'decode_vers' => $v4, 'encode_vers + decode_vers' => $v5, ); foreach (sort keys %tests) { is $v1, $tests{$_}, "Version range ($_)"; } eval { decode_vers('foo:bar sub { my $vers = 'vers:cpan/>v1.00|!=v2.10|<=v3.00'; my $v = URI::VersionRange->from_string($vers); is $v->contains($_), !!1, "$_ version in range ($v)" for (sort @in_range); is $v->contains($_), !!0, "$_ version not in range ($v)" for (sort @not_in_range); is decode_vers('vers:cpan/contains($_), !!1, "$_ version in range" for (sort @in_range); }; subtest "VERS: Generic schemes" => sub { #<<< my @valid = ( 'vers:all/*', 'vers:generic/*', 'vers:intdot/*', 'vers:semver/*', 'vers:lexicographic/*', 'vers:datetime/*' ); #>>> my @invalid = ('vers:none/1.00', 'vers:all/1.00'); for my $vers (@valid) { is decode_vers($vers)->contains($_), !!1, "$vers: $_ version in range" for (sort @in_range); } is decode_vers('vers:none/*')->contains($_), !!0, "vers:none/*: $_ version not in range" for (sort @in_range); for my $vers (@invalid) { eval { decode_vers($vers) }; like "$@", qr/Malformed/, "$vers: invalid VERS"; } }; subtest "VERS: is_vers" => sub { my @tests = ( {vers => 'vers:cpan/1.0', expected => 1}, {vers => 'vers:foo-bar/1.0', expected => 1}, {vers => 'vers:foo.bar/1.0', expected => 1}, {vers => 'vers:a\\b/1.0', expected => 0}, {vers => 'vers:a+b/1.0', expected => 0}, {vers => 'vers:-a/1.0', expected => 0}, ); foreach my $test (@tests) { is(!!URI::VersionRange::is_vers($test->{vers}), !!$test->{expected}, "is_vers: $test->{vers}"); } }; subtest "VERS: version \"0\" and empty version" => sub { is(decode_vers('vers:generic/>=0|<1'), 'vers:generic/>=0|<1', 'version "0" (with comparator)'); is(decode_vers('vers:generic/0'), 'vers:generic/0', 'version "0"'); eval { decode_vers('vers:npm/>=') }; like("$@", qr/empty version/, 'empty version'); }; subtest "VERS: tainted input" => sub { # %ENV is tainted under -T my $tainted = substr($ENV{PATH} // '', 0, 0) . 'cpan'; my $vers = eval { decode_vers("vers:$tainted/>1.0|<2.0") }; is($@, '', "from_string: tainted input ($tainted)"); ok($vers && $vers->contains('1.5'), "contains: tainted input ($tainted)"); }; done_testing(); URI-PackageURL-2.26/t/pod.t0000644000175000017500000000052014442172325014235 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; unless ($ENV{RELEASE_TESTING}) { plan(skip_all => "Author tests not required for installation"); } # Ensure a recent version of Test::Pod my $min_tp = 1.22; eval "use Test::Pod $min_tp"; plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; all_pod_files_ok(); URI-PackageURL-2.26/t/70-vers-from-native.t0000644000175000017500000000517515264504421017115 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::VersionRange::Util qw(native_range_to_vers); #<<< my @test_cases = ( ['nuget', '1.0', 'vers:nuget/1.0'], ['nuget', '[1.0,)', 'vers:nuget/>=1.0'], ['nuget', '(1.0,)', 'vers:nuget/>1.0'], ['nuget', '[1.0]', 'vers:nuget/1.0'], ['nuget', '(,1.0]', 'vers:nuget/>0.0|<=1.0'], ['nuget', '(,1.0)', 'vers:nuget/>0.0|<1.0'], ['nuget', '[1.0,2.0]', 'vers:nuget/>=1.0|<=2.0'], ['nuget', '(1.0,2.0)', 'vers:nuget/>1.0|<2.0'], ['nuget', '[1.0,2.0)', 'vers:nuget/>=1.0|<2.0'], ['raku', '*', 'vers:raku/*'], ['raku', '1.*', 'vers:raku/>=1'], ['raku', '1.0', 'vers:raku/1.0'], ['raku', '1.0.*', 'vers:raku/>=1.0'], ['raku', '1.0.*.5', 'vers:raku/>=1.0'], ['raku', '1.0+', 'vers:raku/>=1.0'], ['npm', '~1.2.3', 'vers:npm/>=1.2.3|<1.3.0'], ['npm', '^1.2.3', 'vers:npm/>=1.2.3|<2.0.0'], ['npm', '^0.2.3', 'vers:npm/>=0.2.3|<0.3.0'], ['npm', '~0.2.3', 'vers:npm/>=0.2.3|<0.3.0'], ['npm', '1.2.x', 'vers:npm/>=1.2.0|<1.3.0'], ['npm', '>=1.2.3 <2.0.0', 'vers:npm/>=1.2.3|<2.0.0'], ['npm', '1.2.3 - 2.3.4', 'vers:npm/>=1.2.3|<=2.3.4'], ['npm', '~1.6.5 || >=1.7.2', 'vers:npm/>=1.6.5|<1.7.0|>=1.7.2'], ['semver', '^1.2.3', 'vers:semver/>=1.2.3|<2.0.0'], ['gem', '~> 3.0', 'vers:gem/>=3.0|<4.0'], ['gem', '~> 3.0.0', 'vers:gem/>=3.0.0|<4.0'], ['gem', '~> 3', 'vers:gem/>=3|<4.0'], ['gem', '>= 3.0', 'vers:gem/>=3.0'], ['gem', '!= 1.5.1', 'vers:gem/!=1.5.1'], ['gem', '= 2.0.0', 'vers:gem/=2.0.0'], ['gem', ' ~> 3.5.0 ', 'vers:gem/>=3.5.0|<3.6'], ['gem', '>= 1.9, < 5.0', 'vers:gem/>=1.9|<5.0'], ['gem', '< 5.0, >= 1.9', 'vers:gem/<5.0|>=1.9'], ['gem', '~> 2.0, >= 2.0.3', 'vers:gem/>=2.0|<3.0|>=2.0.3'], ['nginx', '1.0.0-1.0.1', 'vers:nginx/>=1.0.0|<=1.0.1'], ['nginx', '1.0.1+', 'vers:nginx/>=1.0.1|<1.1.0'], ['conan', '>=1.0 <2.0', 'vers:conan/>=1.0|<2.0'], ['conan', '~1.2.3', 'vers:conan/>=1.2.3|<1.3-'], ['conan', '^1.2.3', 'vers:conan/>=1.2.3|<2-'], ['conan', '*', 'vers:conan/>=0.0.0'], ['conan', '1.2.3', 'vers:conan/1.2.3'], ); #>>> foreach my $test (@test_cases) { my ($scheme, $native_range, $expected) = @{$test}; my $got = native_range_to_vers($scheme, $native_range); my $label = "[$scheme] $native_range == $expected"; is $got, $expected, $label or diag explain {got => $got, expected => $expected, scheme => $scheme}; } done_testing(); URI-PackageURL-2.26/t/00-load.t0000644000175000017500000000061515135504042014607 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; my @CLASSES = qw( URI::PackageURL URI::PackageURL::App URI::PackageURL::Type URI::PackageURL::Util URI::VersionRange URI::VersionRange::App URI::VersionRange::Constraint URI::VersionRange::Version ); use_ok($_) for @CLASSES; done_testing(); diag("URI::PackageURL $URI::PackageURL::VERSION, Perl $], $^X"); URI-PackageURL-2.26/t/51-vers-scheme-loading.t0000644000175000017500000000471515264504421017543 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; use URI::VersionRange; our $INJECTED = 0; subtest "VERS: scheme is never evaluated as code" => sub { my $payload = q{x if 0; $main::INJECTED = 1}; is(URI::VersionRange::Version->load($payload), 'URI::VersionRange::Version', 'load: invalid scheme uses fallback'); eval { URI::VersionRange->new(scheme => $payload, constraints => ['1.0']) }; like($@, qr/invalid scheme/, 'new: invalid scheme'); eval { URI::VersionRange->from_native(scheme => $payload, range => '1.0') }; like($@, qr/invalid scheme/, 'from_native: invalid scheme'); is($INJECTED, 0, 'scheme is not evaluated as code'); }; subtest "VERS: scheme comparator classes" => sub { #<<< my %modules = ( 'URI/VersionRange/Scheme/foo_bar.pm' => "package URI::VersionRange::Scheme::foo_bar;\nuse parent 'URI::VersionRange::Version';\n1;\n", 'URI/VersionRange/Scheme/broken.pm' => "package URI::VersionRange::Scheme::broken;\nsub {\n1;\n", 'URI/VersionRange/Scheme/missing_module.pm' => "package URI::VersionRange::Scheme::missing_module;\nuse Not::Installed::Module;\n1;\n", ); #>>> # Load the modules from memory (based on App-FatPacker and Perlbrew) local @INC = ( sub { my (undef, $file) = @_; return unless exists $modules{$file}; open my $fh, '<', \$modules{$file} or die "Can't open '$file': $!"; return $fh; }, @INC ); #<<< my %classes = ( cpan => 'URI::VersionRange::Scheme::cpan', semver => 'URI::VersionRange::Scheme::semver', npm => 'URI::VersionRange::Scheme::npm', pypi => 'URI::VersionRange::Version', datetime => 'URI::VersionRange::Scheme::datetime', intdot => 'URI::VersionRange::Scheme::intdot', lexicographic => 'URI::VersionRange::Scheme::lexicographic', unknown => 'URI::VersionRange::Version', ); #>>> foreach my $scheme (sort keys %classes) { is(URI::VersionRange::Version->load($scheme), $classes{$scheme}, "load: '$scheme' scheme"); } foreach my $scheme (qw[broken missing_module]) { eval { URI::VersionRange::Version->load($scheme) }; like( $@, qr/Failed to load 'URI::VersionRange::Scheme::$scheme' comparator class/, "load: '$scheme' scheme croaks" ); } }; done_testing(); URI-PackageURL-2.26/t/manifest.t0000644000175000017500000000045214442172325015265 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; unless ($ENV{RELEASE_TESTING}) { plan(skip_all => "Author tests not required for installation"); } my $min_tcm = 0.9; eval "use Test::CheckManifest $min_tcm"; plan skip_all => "Test::CheckManifest $min_tcm required" if $@; ok_manifest(); URI-PackageURL-2.26/t/pod-coverage.t0000644000175000017500000000122214442172325016026 0ustar peppepeppe#!perl -T use strict; use warnings; use Test::More; unless ($ENV{RELEASE_TESTING}) { plan(skip_all => "Author tests not required for installation"); } # Ensure a recent version of Test::Pod::Coverage my $min_tpc = 1.08; eval "use Test::Pod::Coverage $min_tpc"; plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage" if $@; # Test::Pod::Coverage doesn't require a minimum Pod::Coverage version, # but older versions don't recognize some common documentation styles my $min_pc = 0.18; eval "use Pod::Coverage $min_pc"; plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" if $@; all_pod_coverage_ok(); URI-PackageURL-2.26/t/99-purl-tests.t0000644000175000017500000000766215264504421016051 0ustar peppepeppe#!perl use strict; use warnings; use Test::More; use File::Find qw(find); use File::Spec; require_ok('URI::PackageURL'); my $purl_tests_dir = File::Spec->catdir('t', 'purl'); BAIL_OUT('"purl" tests directory not found') if (!-d $purl_tests_dir); find {wanted => \&execute_test, no_chdir => 1}, $purl_tests_dir; sub test_context { my $test = shift; return sprintf '[group:%s / type:%s] %s', $test->{test_group}, $test->{test_type}, $test->{description}; } sub execute_test { my $test_file = $_; return if -d $test_file; return unless $test_file =~ /\.json/; if (my $purl_type = $ENV{PURL_TYPE}) { return unless ($test_file =~ /$purl_type/); diag "Test only $ENV{PURL_TYPE} testcases"; } note "--- $test_file ---"; open my $fh, '<', $test_file or Carp::croak "Can't open file: $!"; my $test_content = do { local $/; <$fh> }; my $test_data = eval { JSON::PP::decode_json($test_content) }; BAIL_OUT("$test_file - $@") if $@; foreach my $test (@{$test_data->{tests}}) { $test->{file} = $test_file; TODO: { local $TODO = 'Upstream inconsistency: uppercase qualifier key (see "types/gem-test.json" parse test)' if ($test->{description} eq 'maven pom reference' && $test->{test_type} eq 'parse'); execute_parse_test($test) if $test->{test_type} eq 'parse'; execute_build_test($test) if $test->{test_type} eq 'build'; execute_validate_test($test) if $test->{test_type} eq 'validate'; } } } sub execute_build_test { my $test = shift; my $test_context = test_context($test); my $purl = eval { URI::PackageURL->new(%{$test->{input}}) }; if ($test->{expected_failure}) { like($@, qr/Invalid PURL/i, $test_context); return; } if (!$test->{expected_failure} && $@) { fail("$test_context ($@)"); return; } is($purl->to_string, $test->{expected_output}, $test_context); } sub execute_parse_test { my $test = shift; my $test_context = test_context($test); my $purl_string = $test->{input}; my $validate = $test->{test_group} eq 'recommended' ? 0 : 1; note $purl_string; my $purl = eval { URI::PackageURL->from_string($purl_string, validate => $validate) }; if ($test->{expected_failure}) { like($@, qr/(Invalid|Malformed) PURL/i, $test_context); return; } if (!$test->{expected_failure} && $@) { fail("$test_context ($@)"); return; } my @components = qw(type namespace name version subpath); foreach my $component (@components) { is( $purl->$component, $test->{expected_output}->{$component}, "$test_context --> Compare '$component' component" ); } if (%{$purl->qualifiers}) { my $got_qualifiers = $purl->qualifiers; my $expected_qualifiers = $test->{expected_output}->{qualifiers}; if (defined $got_qualifiers->{checksum}) { $got_qualifiers->{checksum} = join ',', @{$got_qualifiers->{checksum}}; } is_deeply($got_qualifiers, $expected_qualifiers, "$test_context --> Compare 'qualifiers' component"); } } sub execute_validate_test { my $test = shift; my $test_context = test_context($test); my $purl_string = $test->{input}; my $validate = $test->{test_group} eq 'recommended' ? 0 : 1; note $purl_string; my $purl = eval { URI::PackageURL->from_string($purl_string, validate => $validate) }; if ($test->{expected_failure}) { diag "-- URI::PackageURL exception: $@"; diag "-- Expected message:", $test->{expected_message}; like($@, qr/(Invalid|Malformed) PURL/i, $test_context); return; } if (!$test->{expected_failure} && $@) { fail("$test_context ($@)"); return; } is($purl->to_string, $test->{expected_output}, $test_context); } done_testing(); URI-PackageURL-2.26/t/test-suite-data.json0000644000175000017500000005563415147342022017212 0ustar peppepeppe[ { "description": "valid maven purl", "purl": "pkg:maven/org.apache.commons/io@1.3.4", "canonical_purl": "pkg:maven/org.apache.commons/io@1.3.4", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": "1.3.4", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "basic valid maven purl without version", "purl": "pkg:maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid go purl without version and with subpath", "purl": "pkg:GOLANG/google.golang.org/genproto#/googleapis/api/annotations/", "canonical_purl": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "valid go purl with version and subpath", "purl": "pkg:GOLANG/google.golang.org/genproto@abcdedf#/googleapis/api/annotations/", "canonical_purl": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": "abcdedf", "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "invalid subpath - unencoded subpath cannot contain '..'", "purl": "pkg:GOLANG/google.golang.org/genproto@abcdedf#/googleapis/%2E%2E/api/annotations/", "canonical_purl": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": "abcdedf", "qualifiers": null, "subpath": "googleapis/../api/annotations", "is_invalid": false }, { "description": "invalid subpath - unencoded subpath cannot contain '.'", "purl": "pkg:GOLANG/google.golang.org/genproto@abcdedf#/googleapis/%2E/api/annotations/", "canonical_purl": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": "abcdedf", "qualifiers": null, "subpath": "googleapis/./api/annotations", "is_invalid": false }, { "description": "bitbucket namespace and name should be lowercased", "purl": "pkg:bitbucket/birKenfeld/pyGments-main@244fd47e07d1014f0aed9c", "canonical_purl": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "type": "bitbucket", "namespace": "birkenfeld", "name": "pygments-main", "version": "244fd47e07d1014f0aed9c", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "github namespace and name should be lowercased", "purl": "pkg:github/Package-url/purl-Spec@244fd47e07d1004f0aed9c", "canonical_purl": "pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c", "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004f0aed9c", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "debian can use qualifiers", "purl": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "canonical_purl": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "type": "deb", "namespace": "debian", "name": "curl", "version": "7.50.3-1", "qualifiers": {"arch": "i386", "distro": "jessie"}, "subpath": null, "is_invalid": false }, { "description": "docker uses qualifiers and hash image id as versions", "purl": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "canonical_purl": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "type": "docker", "namespace": "customer", "name": "dockerimage", "version": "sha256:244fd47e07d1004f0aed9c", "qualifiers": {"repository_url": "gcr.io"}, "subpath": null, "is_invalid": false }, { "description": "Java gem can use a qualifier", "purl": "pkg:gem/jruby-launcher@1.1.2?Platform=java", "canonical_purl": "pkg:gem/jruby-launcher@1.1.2?platform=java", "type": "gem", "namespace": null, "name": "jruby-launcher", "version": "1.1.2", "qualifiers": {"platform": "java"}, "subpath": null, "is_invalid": false }, { "description": "maven often uses qualifiers", "purl": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repositorY_url=repo.spring.io/release", "canonical_purl": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=repo.spring.io/release", "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": {"classifier": "sources", "repository_url": "repo.spring.io/release"}, "subpath": null, "is_invalid": false }, { "description": "maven pom reference", "purl": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?extension=pom&repositorY_url=repo.spring.io/release", "canonical_purl": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?extension=pom&repository_url=repo.spring.io/release", "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": {"extension": "pom", "repository_url": "repo.spring.io/release"}, "subpath": null, "is_invalid": false }, { "description": "maven can come with a type qualifier", "purl": "pkg:Maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "canonical_purl": "pkg:maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "type": "maven", "namespace": "net.sf.jacob-project", "name": "jacob", "version": "1.14.3", "qualifiers": {"classifier": "x86", "type": "dll"}, "subpath": null, "is_invalid": false }, { "description": "npm can be scoped", "purl": "pkg:npm/%40angular/animation@12.3.1", "canonical_purl": "pkg:npm/%40angular/animation@12.3.1", "type": "npm", "namespace": "@angular", "name": "animation", "version": "12.3.1", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "nuget names are case sensitive", "purl": "pkg:Nuget/EnterpriseLibrary.Common@6.0.1304", "canonical_purl": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "type": "nuget", "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "pypi names have special rules and not case sensitive", "purl": "pkg:PYPI/Django_package@1.11.1.dev1", "canonical_purl": "pkg:pypi/django-package@1.11.1.dev1", "type": "pypi", "namespace": null, "name": "django-package", "version": "1.11.1.dev1", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "rpm often use qualifiers", "purl": "pkg:Rpm/fedora/curl@7.50.3-1.fc25?Arch=i386&Distro=fedora-25", "canonical_purl": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "type": "rpm", "namespace": "fedora", "name": "curl", "version": "7.50.3-1.fc25", "qualifiers": {"arch": "i386", "distro": "fedora-25"}, "subpath": null, "is_invalid": false }, { "description": "a scheme is always required", "purl": "EnterpriseLibrary.Common@6.0.1304", "canonical_purl": "EnterpriseLibrary.Common@6.0.1304", "type": null, "namespace": null, "name": "EnterpriseLibrary.Common", "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "a type is always required", "purl": "pkg:EnterpriseLibrary.Common@6.0.1304", "canonical_purl": "pkg:EnterpriseLibrary.Common@6.0.1304", "type": null, "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "a name is required", "purl": "pkg:maven/@1.3.4", "canonical_purl": "pkg:maven/@1.3.4", "type": "maven", "namespace": null, "name": null, "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "slash / after scheme is not significant", "purl": "pkg:/maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "double slash // after scheme is not significant", "purl": "pkg://maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "slash /// after scheme is not significant", "purl": "pkg:///maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid maven purl with case sensitive namespace and name", "purl": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "canonical_purl": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "type": "maven", "namespace": "HTTPClient", "name": "HTTPClient", "version": "0.3-3", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid maven purl containing a space in the version and qualifier", "purl": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "canonical_purl": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "type": "maven", "namespace": "mygroup", "name": "myartifact", "version": "1.0.0 Final", "qualifiers": {"mykey": "my value"}, "subpath": null, "is_invalid": false }, { "description": "checks for invalid qualifier keys", "purl": "pkg:npm/myartifact@1.0.0?in%20production=true", "canonical_purl": null, "type": "npm", "namespace": null, "name": "myartifact", "version": "1.0.0", "qualifiers": {"in production": "true"}, "subpath": null, "is_invalid": true }, { "description": "valid conan purl", "purl": "pkg:conan/cctz@2.3", "canonical_purl": "pkg:conan/cctz@2.3", "type": "conan", "namespace": null, "name": "cctz", "version": "2.3", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid conan purl with namespace and qualifier channel", "purl": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "canonical_purl": "pkg:conan/bincrafters/cctz@2.3?channel=stable", "type": "conan", "namespace": "bincrafters", "name": "cctz", "version": "2.3", "qualifiers": {"channel": "stable"}, "subpath": null, "is_invalid": false }, { "description": "invalid conan purl only namespace", "purl": "pkg:conan/bincrafters/cctz@2.3", "canonical_purl": "pkg:conan/bincrafters/cctz@2.3", "type": "conan", "namespace": "bincrafters", "name": "cctz", "version": "2.3", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "invalid conan purl only channel qualifier", "purl": "pkg:conan/cctz@2.3?channel=stable", "canonical_purl": "pkg:conan/cctz@2.3?channel=stable", "type": "conan", "namespace": null, "name": "cctz", "version": "2.3", "qualifiers": {"channel": "stable"}, "subpath": null, "is_invalid": true }, { "description": "valid conda purl with qualifiers", "purl": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "canonical_purl": "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2", "type": "conda", "namespace": null, "name": "absl-py", "version": "0.4.1", "qualifiers": {"build": "py36h06a4308_0", "channel": "main", "subdir": "linux-64", "type": "tar.bz2"}, "subpath": null, "is_invalid": false }, { "description": "valid cran purl", "purl": "pkg:cran/A3@0.9.1", "canonical_purl": "pkg:cran/A3@0.9.1", "type": "cran", "namespace": null, "name": "A3", "version": "0.9.1", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "invalid cran purl without name", "purl": "pkg:cran/@0.9.1", "canonical_purl": "pkg:cran/@0.9.1", "type": "cran", "namespace": null, "name": null, "version": "0.9.1", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "invalid cran purl without version", "purl": "pkg:cran/A3", "canonical_purl": "pkg:cran/A3", "type": "cran", "namespace": null, "name": "A3", "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "valid swift purl", "purl": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "canonical_purl": "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "type": "swift", "namespace": "github.com/Alamofire", "name": "Alamofire", "version": "5.4.3", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "invalid swift purl without namespace", "purl": "pkg:swift/Alamofire@5.4.3", "canonical_purl": "pkg:swift/Alamofire@5.4.3", "type": "swift", "namespace": null, "name": "Alamofire", "version": "5.4.3", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "invalid swift purl without name", "purl": "pkg:swift/github.com/Alamofire/@5.4.3", "canonical_purl": "pkg:swift/github.com/Alamofire/@5.4.3", "type": "swift", "namespace": "github.com/Alamofire", "name": null, "version": "5.4.3", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "invalid swift purl without version", "purl": "pkg:swift/github.com/Alamofire/Alamofire", "canonical_purl": "pkg:swift/github.com/Alamofire/Alamofire", "type": "swift", "namespace": "github.com/Alamofire", "name": "Alamofire", "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "valid hackage purl", "purl": "pkg:hackage/AC-HalfInteger@1.2.1", "canonical_purl": "pkg:hackage/AC-HalfInteger@1.2.1", "type": "hackage", "namespace": null, "name": "AC-HalfInteger", "version": "1.2.1", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "name and version are always required", "purl": "pkg:hackage", "canonical_purl": "pkg:hackage", "type": "hackage", "namespace": null, "name": null, "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "minimal Hugging Face model", "purl": "pkg:huggingface/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "canonical_purl": "pkg:huggingface/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "type": "huggingface", "namespace": null, "name": "distilbert-base-uncased", "version": "043235d6088ecd3dd5fb5ca3592b6913fd516027", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "Hugging Face model with staging endpoint", "purl": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co", "canonical_purl": "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https://hub-ci.huggingface.co", "type": "huggingface", "namespace": "microsoft", "name": "deberta-v3-base", "version": "559062ad13d311b87b2c455e67dcd5f1c8f65111", "qualifiers": {"repository_url": "https://hub-ci.huggingface.co"}, "subpath": null, "is_invalid": false }, { "description": "Hugging Face model with various cases", "purl": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552AE47F449AB70B684CABCB6603E5E85E", "canonical_purl": "pkg:huggingface/EleutherAI/gpt-neo-1.3B@797174552ae47f449ab70b684cabcb6603e5e85e", "type": "huggingface", "namespace": "EleutherAI", "name": "gpt-neo-1.3B", "version": "797174552ae47f449ab70b684cabcb6603e5e85e", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "MLflow model tracked in Azure Databricks (case insensitive)", "purl": "pkg:mlflow/CreditFraud@3?repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "canonical_purl": "pkg:mlflow/creditfraud@3?repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "type": "mlflow", "namespace": null, "name": "creditfraud", "version": "3", "qualifiers": {"repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow"}, "subpath": null, "is_invalid": false }, { "description": "MLflow model tracked in Azure ML (case sensitive)", "purl": "pkg:mlflow/CreditFraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace", "canonical_purl": "pkg:mlflow/CreditFraud@3?repository_url=https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace", "type": "mlflow", "namespace": null, "name": "CreditFraud", "version": "3", "qualifiers": {"repository_url": "https://westus2.api.azureml.ms/mlflow/v1.0/subscriptions/a50f2011-fab8-4164-af23-c62881ef8c95/resourceGroups/TestResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/TestWorkspace"}, "subpath": null, "is_invalid": false }, { "description": "MLflow model with unique identifiers", "purl": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow", "canonical_purl": "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&repository_url=https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a", "type": "mlflow", "namespace": null, "name": "trafficsigns", "version": "10", "qualifiers": {"model_uuid": "36233173b22f4c89b451f1228d700d49", "run_id": "410a3121-2709-4f88-98dd-dba0ef056b0a", "repository_url": "https://adb-5245952564735461.0.azuredatabricks.net/api/2.0/mlflow"}, "subpath": null, "is_invalid": false }, { "description": "composer names are not case sensitive", "purl": "pkg:composer/Laravel/Laravel@5.5.0", "canonical_purl": "pkg:composer/laravel/laravel@5.5.0", "type": "composer", "namespace": "laravel", "name": "laravel", "version": "5.5.0", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "cpan distribution name are case sensitive", "purl": "pkg:cpan/DROLSKY/DateTime@1.55", "canonical_purl": "pkg:cpan/DROLSKY/DateTime@1.55", "type": "cpan", "namespace": "DROLSKY", "name": "DateTime", "version": "1.55", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "cpan module name are case sensitive", "purl": "pkg:cpan/URI::PackageURL@2.11", "canonical_purl": "pkg:cpan/URI::PackageURL@2.11", "type": "cpan", "namespace": null, "name": "URI::PackageURL", "version": "2.11", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "cpan module name like distribution name", "purl": "pkg:cpan/Perl-Version@1.013", "canonical_purl": "pkg:cpan/Perl-Version@1.013", "type": "cpan", "namespace": null, "name": "Perl-Version", "version": "1.013", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "cpan distribution name like module name", "purl": "pkg:cpan/GDT/URI::PackageURL@2.11", "canonical_purl": "pkg:cpan/GDT/URI::PackageURL", "type": "cpan", "namespace": "GDT", "name": "URI::PackageURL", "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "cpan valid module name", "purl": "pkg:cpan/DateTime@1.55", "canonical_purl": "pkg:cpan/DateTime@1.55", "type": "cpan", "namespace": null, "name": "DateTime", "version": "1.55", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "cpan valid module name without version", "purl": "pkg:cpan/URI", "canonical_purl": "pkg:cpan/URI", "type": "cpan", "namespace": null, "name": "URI", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "ensure namespace allows multiple segments", "purl": "pkg:bintray/apache/couchdb/couchdb-mac@2.3.0", "canonical_purl": "pkg:bintray/apache/couchdb/couchdb-mac@2.3.0", "type": "bintray", "namespace": "apache/couchdb", "name": "couchdb-mac", "version": "2.3.0", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "invalid encoded colon : between scheme and type", "purl": "pkg%3Amaven/org.apache.commons/io", "canonical_purl": null, "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "check for invalid character in type", "purl": "pkg:n&g?inx/nginx@0.8.9", "canonical_purl": null, "type": null, "namespace": null, "name": "nginx", "version": "0.8.9", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "check for type that starts with number", "purl": "pkg:3nginx/nginx@0.8.9", "canonical_purl": null, "type": null, "namespace": null, "name": "nginx", "version": "0.8.9", "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "check for colon in type", "purl": "pkg:nginx:a/nginx@0.8.9", "canonical_purl": null, "type": null, "namespace": null, "name": "nginx", "version": "0.8.9", "qualifiers": null, "subpath": null, "is_invalid": true } ] URI-PackageURL-2.26/t/vers/0000755000175000017500000000000015264504726014257 5ustar peppepeppeURI-PackageURL-2.26/t/vers/openssl_version_cmp_test.json0000644000175000017500000003353415264504421022300 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.0.0e", "1.0.0r" ] }, "expected_output": [ "1.0.0e", "1.0.0r" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.0.0e", "1.0.0r" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.0.1f", "1.0.1m" ] }, "expected_output": [ "1.0.1f", "1.0.1m" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.0.1f", "1.0.1m" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.0.1g", "1.0.2a" ] }, "expected_output": [ "1.0.1g", "1.0.2a" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.0.1g", "1.0.2a" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.0.1h", "0.9.8" ] }, "expected_output": [ "0.9.8", "1.0.1h" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.0.1h", "0.9.8" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.0.1h", "0.9.8a" ] }, "expected_output": [ "0.9.8a", "1.0.1h" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.0.1h", "0.9.8a" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "0.9.8lt", "0.9.8ztl" ] }, "expected_output": [ "0.9.8lt", "0.9.8ztl" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "0.9.8lt", "0.9.8ztl" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.1.1ag", "1.1.1ag" ] }, "expected_output": [ "1.1.1ag", "1.1.1ag" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.1.1ag", "1.1.1ag" ] }, "expected_output": true }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.0.0", "1.1.1z" ] }, "expected_output": [ "1.1.1z", "3.0.0" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.0.0", "1.1.1z" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.1.0", "1.0.1m" ] }, "expected_output": [ "1.0.1m", "3.1.0" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.1.0", "1.0.1m" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.0.3", "1.0.2a" ] }, "expected_output": [ "1.0.2a", "3.0.3" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.0.3", "1.0.2a" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.0.1", "0.9.8ztl" ] }, "expected_output": [ "0.9.8ztl", "3.0.1" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.0.1", "0.9.8ztl" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "4.1.11", "1.1.1ag" ] }, "expected_output": [ "1.1.1ag", "4.1.11" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "4.1.11", "1.1.1ag" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.1.1z", "3.0.0" ] }, "expected_output": [ "1.1.1z", "3.0.0" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.1.1z", "3.0.0" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.0.1m", "3.1.0" ] }, "expected_output": [ "1.0.1m", "3.1.0" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.0.1m", "3.1.0" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.0.2a", "3.0.3" ] }, "expected_output": [ "1.0.2a", "3.0.3" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.0.2a", "3.0.3" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "0.9.8ztl", "3.0.1" ] }, "expected_output": [ "0.9.8ztl", "3.0.1" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "0.9.8ztl", "3.0.1" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "1.1.1ag", "4.1.11" ] }, "expected_output": [ "1.1.1ag", "4.1.11" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "1.1.1ag", "4.1.11" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.0.0", "3.0.0" ] }, "expected_output": [ "3.0.0", "3.0.0" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.0.0", "3.0.0" ] }, "expected_output": true }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.1.0", "3.0.2" ] }, "expected_output": [ "3.0.2", "3.1.0" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.1.0", "3.0.2" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.0.3", "4.0.2" ] }, "expected_output": [ "3.0.3", "4.0.2" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.0.3", "4.0.2" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "3.0.1", "3.0.2" ] }, "expected_output": [ "3.0.1", "3.0.2" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "3.0.1", "3.0.2" ] }, "expected_output": false }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "openssl", "versions": [ "4.1.11", "4.2.0" ] }, "expected_output": [ "4.1.11", "4.2.0" ] }, { "description": "Comparison test for OpenSSL version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "openssl", "versions": [ "4.1.11", "4.2.0" ] }, "expected_output": false } ] } URI-PackageURL-2.26/t/vers/gentoo_version_cmp_test.json0000644000175000017500000003650315264504421022107 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "4.0", "4.0" ] }, "expected_output": true }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r0", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0", "1.0-r0" ] }, "expected_output": true }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r0", "1.0-r0" ] }, "expected_output": true }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r1", "1.0-r1" ] }, "expected_output": true }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "6.0", "5.0" ] }, "expected_output": [ "5.0", "6.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "5.0", "5" ] }, "expected_output": [ "5", "5.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r1", "1.0-r0" ] }, "expected_output": [ "1.0-r0", "1.0-r1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r1", "1.0" ] }, "expected_output": [ "1.0", "1.0-r1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "999999999999999999999999999999", "999999999999999999999999999998" ] }, "expected_output": [ "999999999999999999999999999998", "999999999999999999999999999999" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0.0", "1.0" ] }, "expected_output": [ "1.0", "1.0.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0.0", "1.0b" ] }, "expected_output": [ "1.0b", "1.0.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1b", "1" ] }, "expected_output": [ "1", "1b" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1b_p1", "1_p1" ] }, "expected_output": [ "1_p1", "1b_p1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.1b", "1.1" ] }, "expected_output": [ "1.1", "1.1b" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "12.2.5", "12.2b" ] }, "expected_output": [ "12.2b", "12.2.5" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "4.0", "5.0" ] }, "expected_output": [ "4.0", "5.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "5", "5.0" ] }, "expected_output": [ "5", "5.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0_pre2", "1.0_p2" ] }, "expected_output": [ "1.0_pre2", "1.0_p2" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0_alpha2", "1.0_p2" ] }, "expected_output": [ "1.0_alpha2", "1.0_p2" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0_alpha1", "1.0_beta1" ] }, "expected_output": [ "1.0_alpha1", "1.0_beta1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0_beta3", "1.0_rc3" ] }, "expected_output": [ "1.0_beta3", "1.0_rc3" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.001000000000000000001", "1.001000000000000000002" ] }, "expected_output": [ "1.001000000000000000001", "1.001000000000000000002" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.00100000000", "1.0010000000000000001" ] }, "expected_output": [ "1.00100000000", "1.0010000000000000001" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "999999999999999999999999999998", "999999999999999999999999999999" ] }, "expected_output": [ "999999999999999999999999999998", "999999999999999999999999999999" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.01", "1.1" ] }, "expected_output": [ "1.01", "1.1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r0", "1.0-r1" ] }, "expected_output": [ "1.0-r0", "1.0-r1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0", "1.0-r1" ] }, "expected_output": [ "1.0", "1.0-r1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0", "1.0.0" ] }, "expected_output": [ "1.0", "1.0.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.0b", "1.0.0" ] }, "expected_output": [ "1.0b", "1.0.0" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1_p1", "1b_p1" ] }, "expected_output": [ "1_p1", "1b_p1" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1", "1b" ] }, "expected_output": [ "1", "1b" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "1.1", "1.1b" ] }, "expected_output": [ "1.1", "1.1b" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "gentoo", "versions": [ "12.2b", "12.2.5" ] }, "expected_output": [ "12.2b", "12.2.5" ] }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1", "2" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0_alpha", "1.0_pre" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0_beta", "1.0_alpha" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "0", "0.0" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r0", "1.0-r1" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r1", "1.0-r0" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0", "1.0-r1" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0-r1", "1.0" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.0", "1.0.0" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1_p1", "1b_p1" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1b", "1" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "1.1b", "1.1" ] }, "expected_output": false }, { "description": "Comparison test for Gentoo version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "gentoo", "versions": [ "12.2b", "12.2" ] }, "expected_output": false } ] } URI-PackageURL-2.26/t/vers/gem_range_from_native_test.json0000644000175000017500000000057315264504421022523 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native RubyGems range.", "test_group": "required", "test_type": "from_native", "input": { "native_range": "~>2.0.8", "scheme": "gem" }, "expected_output": "vers:gem/>=2.0.8|<2.1" } ] } URI-PackageURL-2.26/t/vers/intdot_version_cmp_test.json0000644000175000017500000000775315264504421022122 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Identical intdot versions are equal.", "test_group": "required", "test_type": "equality", "input": { "input_type": "intdot", "versions": [ "1.2.3", "1.2.3" ] }, "expected_output": true }, { "description": "Leading zeros are ignored for equality.", "test_group": "required", "test_type": "equality", "input": { "input_type": "intdot", "versions": [ "01.002.0003", "1.2.3" ] }, "expected_output": true }, { "description": "A missing trailing segment is equivalent to a zero segment.", "test_group": "recommended", "test_type": "equality", "input": { "input_type": "intdot", "versions": [ "1.2", "1.2.0" ] }, "expected_output": true }, { "description": "Distinct numeric intdot versions are not equal.", "test_group": "required", "test_type": "equality", "input": { "input_type": "intdot", "versions": [ "1.2", "1.3" ] }, "expected_output": false }, { "description": "Comparison is numeric per dot-separated segment, not lexicographic.", "test_group": "required", "test_type": "comparison", "input": { "input_type": "intdot", "versions": [ "1.10", "1.2" ] }, "expected_output": [ "1.2", "1.10" ] }, { "description": "An additional non-zero segment sorts after its prefix version.", "test_group": "required", "test_type": "comparison", "input": { "input_type": "intdot", "versions": [ "1.2", "1.2.1" ] }, "expected_output": [ "1.2", "1.2.1" ] }, { "description": "Mixed leading-zero forms sort by normalized numeric segments.", "test_group": "required", "test_type": "comparison", "input": { "input_type": "intdot", "versions": [ "1.0002.10", "1.2.2", "1.02.0011" ] }, "expected_output": [ "1.2.2", "1.0002.10", "1.02.0011" ] }, { "description": "A containment range includes values inside its lower and upper bounds.", "test_group": "required", "test_type": "containment", "input": { "version": "1.5.0", "vers": "vers:intdot/>=1.2|<2.0" }, "expected_output": true }, { "description": "A range includes its inclusive lower bound.", "test_group": "required", "test_type": "containment", "input": { "version": "1.2", "vers": "vers:intdot/>=1.2|<2.0" }, "expected_output": true }, { "description": "A containment range excludes values at or above an exclusive upper bound.", "test_group": "required", "test_type": "containment", "input": { "version": "2.0", "vers": "vers:intdot/>=1.2|<2.0" }, "expected_output": false }, { "description": "Comparison ignores any suffix after the first non-digit and non-dot character.", "test_group": "required", "test_type": "comparison", "input": { "input_type": "intdot", "versions": [ "1.2beta", "1.10alpha", "1.3rc1" ] }, "expected_output": [ "1.2beta", "1.3rc1", "1.10alpha" ] }, { "description": "Suffixes are ignored for equality after the first non-digit and non-dot character.", "test_group": "required", "test_type": "equality", "input": { "input_type": "intdot", "versions": [ "1.2beta", "1.2rc1" ] }, "expected_output": true } ] } URI-PackageURL-2.26/t/vers/conan_range_from_native_basic_test.json0000644000175000017500000001343315264504421024211 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": ">1.0.0" }, "expected_output": "vers:conan/>1.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "<2.0" }, "expected_output": "vers:conan/<2.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": ">1 <2.0" }, "expected_output": "vers:conan/>1|<2.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "~2.5" }, "expected_output": "vers:conan/>=2.5|<2.6-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "~2.5.1" }, "expected_output": "vers:conan/>=2.5.1|<2.6-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "~1" }, "expected_output": "vers:conan/>=1|<2-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "^1.2" }, "expected_output": "vers:conan/>=1.2|<2-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "^1.2.3" }, "expected_output": "vers:conan/>=1.2.3|<2-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "^0.1.2" }, "expected_output": "vers:conan/>=0.1.2|<0.2-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "1.0.0" }, "expected_output": "vers:conan/1.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "=1.0.0" }, "expected_output": "vers:conan/1.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "*" }, "expected_output": "vers:conan/>=0.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "1.0.0 || 2.1.3" }, "expected_output": "vers:conan/1.0.0|2.1.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": ">1 <2.0 || ^3.2 " }, "expected_output": "vers:conan/>1|<2.0|>=3.2|<4-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "*, include_prerelease=True" }, "expected_output": "vers:conan/>=0.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "*-" }, "expected_output": "vers:conan/>=0.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": ">1- <2.0" }, "expected_output": "vers:conan/>1|<2.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": ">1- <2.0 || ^3.2 " }, "expected_output": "vers:conan/>1|<2.0|>=3.2|<4-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "^1.1.2-" }, "expected_output": "vers:conan/>=1.1.2|<2-" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "required", "test_type": "from_native", "input": { "scheme": "conan", "native_range": "~1.1.2-" }, "expected_output": "vers:conan/>=1.1.2|<1.2-" } ] } URI-PackageURL-2.26/t/vers/conan_version_cmp_test.json0000644000175000017500000003633215264504421021712 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "2", "1" ] }, "expected_output": [ "1", "2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1", "1.0" ] }, "expected_output": [ "1.0", "1.1" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.0", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.1.0" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.22", "1.3" ] }, "expected_output": [ "1.3", "1.22" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.22", "1.1.3" ] }, "expected_output": [ "1.1.3", "1.1.22" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.1.22", "1.1.1.3" ] }, "expected_output": [ "1.1.1.3", "1.1.1.22" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.1.1.22", "1.1.1.1.3" ] }, "expected_output": [ "1.1.1.1.3", "1.1.1.1.22" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "2", "1.0" ] }, "expected_output": [ "1.0", "2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.3.1", "1.2" ] }, "expected_output": [ "1.2", "1.3.1" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.1" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.b", "1.1.a" ] }, "expected_output": [ "1.1.a", "1.1.b" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.1.abz", "1.1.1.abc" ] }, "expected_output": [ "1.1.1.abc", "1.1.1.abz" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "b.c", "a.b.c" ] }, "expected_output": [ "a.b.c", "b.c" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.a", "1.1" ] }, "expected_output": [ "1.1", "1.a" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1a", "1.1" ] }, "expected_output": [ "1.1", "1.1a" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.a", "1.1" ] }, "expected_output": [ "1.1", "1.1.a" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.2", "1.1.a" ] }, "expected_output": [ "1.1.a", "1.2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.20", "1.1*" ] }, "expected_output": [ "1.1*", "1.20" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.20", "1.1.*" ] }, "expected_output": [ "1.1.*", "1.20" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.3.*", "1.2.2" ] }, "expected_output": [ "1.2.2", "1.3.*" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.2.3*", "1.2.2" ] }, "expected_output": [ "1.2.2", "1.2.3*" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1+b2", "1.1+b1" ] }, "expected_output": [ "1.1+b1", "1.1+b2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1+b2", "1.1" ] }, "expected_output": [ "1.1", "1.1+b2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.2", "1.1+b1" ] }, "expected_output": [ "1.1+b1", "1.2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1+b.22", "1.1+b.3" ] }, "expected_output": [ "1.1+b.3", "1.1+b.22" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1-pre2", "1.1-pre1" ] }, "expected_output": [ "1.1-pre1", "1.1-pre2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1-alpha.22", "1.1-alpha.3" ] }, "expected_output": [ "1.1-alpha.3", "1.1-alpha.22" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1-alpha.3+b2", "1.1-alpha.3+b1" ] }, "expected_output": [ "1.1-alpha.3+b1", "1.1-alpha.3+b2" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1", "1.1-alpha.1" ] }, "expected_output": [ "1.1-alpha.1", "1.1" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.2-alpha1", "1.1" ] }, "expected_output": [ "1.1", "1.2-alpha1" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.1.0", "1.1-alpha.1" ] }, "expected_output": [ "1.1-alpha.1", "1.1.0" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "conan", "versions": [ "1.0.0-alpha1", "1.0.0-" ] }, "expected_output": [ "1.0.0-", "1.0.0-alpha1" ] }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1.0", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1.0", "1.0.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1-pre1", "1.0-pre1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1-pre1", "1.0.0-pre1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1.0-pre1", "1.0.0-pre1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1.0-pre1.0", "1.0.0-pre1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1-pre1+b1", "1.0-pre1+b1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1-pre1+b1", "1.0.0-pre1+b1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1.0-pre1+b1", "1.0.0-pre1+b1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1+b1", "1.0+b1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1+b1", "1.0+b1.0" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1+b1", "1.0.0+b1" ] }, "expected_output": true }, { "description": "Comparison test for Conan C/C++ version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "conan", "versions": [ "1.0+b1", "1.0.0+b1" ] }, "expected_output": true } ] } URI-PackageURL-2.26/t/vers/test-suite.md0000644000175000017500000001172715264504421016707 0ustar peppepeppe--- id: test-suite title: VERS test suite sidebar_label: Test suite hide_table_of_contents: false --- # VERS test suite The VERS test suite is intended to help a VERS implementation tool demonstrate conformance with the VERS specification. The primary objective is to provide clarity about whether a VERS string or a set of VERS components is in canonical form. ## Test files Each VERS test file is a collection of test cases whose structure is defined by the VERS test schema. The current VERS test schema is [vers-test.schema-0.2.json](https://github.com/package-url/vers-spec/blob/main/schemas/vers-test.schema-0.2.json). The VERS test files are currently organized in the folder: https://github.com/package-url/vers-spec/tree/main/tests. Most test file names follow the pattern of VERS **type** concatenated with **test type**. ## Test cases The basic structure of a VERS **test case** is: - `description`: string - `test_group`: 'required' or 'recommended' - `test_type`: see list below - `input`: A VERS string or an object of VERS components that is the test case input. The "input" is not required to be in canonical form. - `expected_output`: A VERS string or a set of decoded components (canonical form) that is the test case output. - `expected_failure`: boolean - `expected_message`: string Each test case is granular such that an expected failure condition covers only one error. This means that a test case should only cover an error for a single VERS component or a single parsing error related to separator characters. This is necessary to keep test cases simple. It is not intended to constrain error message handling implemented by a VERS tool. ### description The test case **description** should succinctly describe the test case scope and purpose. ### test_group There are two VERS **test groups**: - 'required': A test case to demonstrate conformance with the VERS specification. - 'recommended': A test case that is recommended to identify common problems in VERS data and how to remediate or normalise them in order to pass the 'required' tests. The use of 'recommended' test cases is always optional. The terminology of 'required' vs 'recommended' matches the use of "shall" vs "should" for Ecma conformance. A "shall" statement means 'required'; a "should" statement means 'recommended'. ### test_type There are nine VERS **test types**: - 'build': A test case for the function of building a canonical VERS output string from an input of decoded VERS components. - 'comparison': A test case to sort an input version string array using the applicable VERS type rules. - 'containment': A test case to determine if a bare version string is contained within the range of a VERS string. - 'equality': A test case to check if two input version strings are equal using the applicable VERS type rules. - 'from_native': A test case to construct a canonical VERS string from a native ecosystem data source. - 'invert': A test case to invert a VERS string into a canonical VERS string. - 'merge': A test case to merge an array of VERS strings into a canonical VERS string. - 'parse': A test case to parse a VERS string into a decoded VERS type and a constraints list. - 'validate': A test case for the function of validating a VERS input string. The input is a VERS string (in canonical form or not) and the output is a VERS string in canonical form. ### input - **input** may be a VERS string or an object containing VERS components. - **input** does not need to be in canonical form, but a test case with non-canonical input shall fail when the **test group** is 'required'. ### expected_output **expected output** is either a canonical VERS string or an object containing a set of decoded VERS components. - If **expected_failure** is true, then **expected output** is null. - If **expected failure** is false, then **expected output** is required. ### expected_failure **expected failure** is true if the test **input** is expected to fail according to the function defined by the **test type**. ### expected_message **expected message** either documents the reason that a test case results in a failure or provides information about the result of the test case. It should be descriptive without duplicating the test case **description**. - If **expected failure** is true, then **expected message** is required. - If **expected failure** is false, then **expected message** is not required, but is recommended when an **input** contains an unregistered VERS **type**. It is important to document that a VERS **type** is not registered because this means that the VERS **type** is effectively unknown across the tools and databases that implement VERS. The VERS specification does not mandate how a VERS tool natively reports the success or failure of a test. Implementation languages that throw exceptions or return typed results should return typed errors, i.e. a syntactically invalid VERS and a VERS input that fails VERS **type**-specific validation should result in different types or enum values. URI-PackageURL-2.26/t/vers/conan_range_from_native_test.json0000644000175000017500000017203715264504421023056 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.1.0 <=5.1.1", "scheme": "conan" }, "expected_output": "vers:conan/>=5.1.0|<=5.1.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=5.2.5", "scheme": "conan" }, "expected_output": "vers:conan/5.2.5" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.5.4", "scheme": "conan" }, "expected_output": "vers:conan/<3.5.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.7", "scheme": "conan" }, "expected_output": "vers:conan/3.7" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0", "scheme": "conan" }, "expected_output": "vers:conan/<0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.17.3", "scheme": "conan" }, "expected_output": "vers:conan/<2.17.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.18.1", "scheme": "conan" }, "expected_output": "vers:conan/<=2.18.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.11.34 <2.19.3", "scheme": "conan" }, "expected_output": "vers:conan/>=1.11.34|<2.19.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.8", "scheme": "conan" }, "expected_output": "vers:conan/<1.0.8" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.16.0", "scheme": "conan" }, "expected_output": "vers:conan/1.16.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.16.0", "scheme": "conan" }, "expected_output": "vers:conan/<1.16.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.0 <1.17.2", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.0|<1.17.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.17.4", "scheme": "conan" }, "expected_output": "vers:conan/<1.17.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.13.7||>=0.14.0 <0.14.11||>=0.15.0 <0.15.2", "scheme": "conan" }, "expected_output": "vers:conan/<0.13.7|>=0.14.0|<0.14.11|>=0.15.0|<0.15.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.3.0", "scheme": "conan" }, "expected_output": "vers:conan/<=1.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.9.3", "scheme": "conan" }, "expected_output": "vers:conan/<2.9.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.1.0", "scheme": "conan" }, "expected_output": "vers:conan/<3.1.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.5.8", "scheme": "conan" }, "expected_output": "vers:conan/<=0.5.8" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.1.12", "scheme": "conan" }, "expected_output": "vers:conan/<=0.1.12" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.1.27", "scheme": "conan" }, "expected_output": "vers:conan/<=2.1.27" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.1.17 <=2.1.27", "scheme": "conan" }, "expected_output": "vers:conan/>=2.1.17|<=2.1.27" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.6.6", "scheme": "conan" }, "expected_output": "vers:conan/<=3.6.6" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.6.7", "scheme": "conan" }, "expected_output": "vers:conan/<3.6.7" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.6.7", "scheme": "conan" }, "expected_output": "vers:conan/3.6.7" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2021.07.22.00", "scheme": "conan" }, "expected_output": "vers:conan/<2021.07.22.00" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.12", "scheme": "conan" }, "expected_output": "vers:conan/<1.0.12" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.3.0 <=3.4.0", "scheme": "conan" }, "expected_output": "vers:conan/>=3.3.0|<=3.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.42.6", "scheme": "conan" }, "expected_output": "vers:conan/2.42.6" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=5.1.4", "scheme": "conan" }, "expected_output": "vers:conan/<=5.1.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=5.1.4", "scheme": "conan" }, "expected_output": "vers:conan/5.1.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=5.2.1", "scheme": "conan" }, "expected_output": "vers:conan/5.2.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.65.3", "scheme": "conan" }, "expected_output": "vers:conan/<2.65.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.60.0 <=2.62.4", "scheme": "conan" }, "expected_output": "vers:conan/>=2.60.0|<=2.62.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.66.7||>=2.67.0 <2.67.4", "scheme": "conan" }, "expected_output": "vers:conan/<2.66.7|>=2.67.0|<2.67.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.66.6||>=2.67.0 <2.67.3", "scheme": "conan" }, "expected_output": "vers:conan/<2.66.6|>=2.67.0|<2.67.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.66.8", "scheme": "conan" }, "expected_output": "vers:conan/<2.66.8" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.63.6", "scheme": "conan" }, "expected_output": "vers:conan/<2.63.6" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.2", "scheme": "conan" }, "expected_output": "vers:conan/<=3.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.8.107", "scheme": "conan" }, "expected_output": "vers:conan/2.8.107" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.9.0", "scheme": "conan" }, "expected_output": "vers:conan/2.9.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=4.3.0", "scheme": "conan" }, "expected_output": "vers:conan/4.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.12.0", "scheme": "conan" }, "expected_output": "vers:conan/<=1.12.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.13.1-1", "scheme": "conan" }, "expected_output": "vers:conan/1.13.1-1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.10.4", "scheme": "conan" }, "expected_output": "vers:conan/1.10.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.14.0", "scheme": "conan" }, "expected_output": "vers:conan/<=0.14.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.13.1", "scheme": "conan" }, "expected_output": "vers:conan/<=2.13.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.23", "scheme": "conan" }, "expected_output": "vers:conan/<2.0.23" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.25", "scheme": "conan" }, "expected_output": "vers:conan/<2.0.25" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.0 <2.0.17", "scheme": "conan" }, "expected_output": "vers:conan/>=2.0.0|<2.0.17" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.0.24", "scheme": "conan" }, "expected_output": "vers:conan/2.0.24" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.27", "scheme": "conan" }, "expected_output": "vers:conan/<2.0.27" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.26", "scheme": "conan" }, "expected_output": "vers:conan/<2.0.26" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.0.6", "scheme": "conan" }, "expected_output": "vers:conan/3.0.6" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.2.0", "scheme": "conan" }, "expected_output": "vers:conan/2.2.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.3.0", "scheme": "conan" }, "expected_output": "vers:conan/<=2.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.3.0", "scheme": "conan" }, "expected_output": "vers:conan/2.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.4.0", "scheme": "conan" }, "expected_output": "vers:conan/2.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<=2.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "", "scheme": "conan" }, "expected_output": "vers:conan/" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2021-10-15", "scheme": "conan" }, "expected_output": "vers:conan/<2021-10-15" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.0.0", "scheme": "conan" }, "expected_output": "vers:conan/3.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.14", "scheme": "conan" }, "expected_output": "vers:conan/<=0.14" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.80.0", "scheme": "conan" }, "expected_output": "vers:conan/<1.80.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.4.1", "scheme": "conan" }, "expected_output": "vers:conan/3.4.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.4.0 <3.4.2", "scheme": "conan" }, "expected_output": "vers:conan/>=3.4.0|<3.4.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.5.2", "scheme": "conan" }, "expected_output": "vers:conan/<3.5.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.4.1 <=3.5.2", "scheme": "conan" }, "expected_output": "vers:conan/>=3.4.1|<=3.5.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.6.0", "scheme": "conan" }, "expected_output": "vers:conan/3.6.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0 <3.6.2", "scheme": "conan" }, "expected_output": "vers:conan/>=3.0.0|<3.6.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.6.0 <=0.6.1", "scheme": "conan" }, "expected_output": "vers:conan/>=0.6.0|<=0.6.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.3", "scheme": "conan" }, "expected_output": "vers:conan/3.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.29.0 <=7.71.1", "scheme": "conan" }, "expected_output": "vers:conan/>=7.29.0|<=7.71.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.21.0 <7.74.0", "scheme": "conan" }, "expected_output": "vers:conan/>=7.21.0|<7.74.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.41.0 <7.74.0", "scheme": "conan" }, "expected_output": "vers:conan/>=7.41.0|<7.74.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.1.1 <=7.75.0", "scheme": "conan" }, "expected_output": "vers:conan/>=7.1.1|<=7.75.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.63.0 <=7.75.0", "scheme": "conan" }, "expected_output": "vers:conan/>=7.63.0|<=7.75.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.10.4 <7.77.0", "scheme": "conan" }, "expected_output": "vers:conan/>=7.10.4|<7.77.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.73.0 <=7.78.0", "scheme": "conan" }, "expected_output": "vers:conan/>=7.73.0|<=7.78.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.0.8", "scheme": "conan" }, "expected_output": "vers:conan/1.0.8" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.0.8", "scheme": "conan" }, "expected_output": "vers:conan/<=1.0.8" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.0.9", "scheme": "conan" }, "expected_output": "vers:conan/1.0.9" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=0.4.0", "scheme": "conan" }, "expected_output": "vers:conan/0.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=0.4.1", "scheme": "conan" }, "expected_output": "vers:conan/0.4.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.28.4", "scheme": "conan" }, "expected_output": "vers:conan/<0.28.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.0.4", "scheme": "conan" }, "expected_output": "vers:conan/2.0.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.4", "scheme": "conan" }, "expected_output": "vers:conan/<2.0.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.0.90", "scheme": "conan" }, "expected_output": "vers:conan/2.0.90" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">1.5.3 <=2.0.90", "scheme": "conan" }, "expected_output": "vers:conan/>1.5.3|<=2.0.90" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<9d", "scheme": "conan" }, "expected_output": "vers:conan/<9d" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.64", "scheme": "conan" }, "expected_output": "vers:conan/<1.64" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.1.7", "scheme": "conan" }, "expected_output": "vers:conan/<3.1.7" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.6.0", "scheme": "conan" }, "expected_output": "vers:conan/1.6.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.20", "scheme": "conan" }, "expected_output": "vers:conan/<0.20" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.20", "scheme": "conan" }, "expected_output": "vers:conan/<=0.20" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.20.1", "scheme": "conan" }, "expected_output": "vers:conan/<0.20.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.20.0", "scheme": "conan" }, "expected_output": "vers:conan/<0.20.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=0.20.0", "scheme": "conan" }, "expected_output": "vers:conan/0.20.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<=3.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.0.30", "scheme": "conan" }, "expected_output": "vers:conan/1.0.30" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.1.10", "scheme": "conan" }, "expected_output": "vers:conan/1.1.10" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.2.0", "scheme": "conan" }, "expected_output": "vers:conan/<4.2.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.9.0 <=4.3.0", "scheme": "conan" }, "expected_output": "vers:conan/>=3.9.0|<=4.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.0.0 <=4.3.0", "scheme": "conan" }, "expected_output": "vers:conan/>=4.0.0|<=4.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=4.3.0", "scheme": "conan" }, "expected_output": "vers:conan/<=4.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<4.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=4.4.0", "scheme": "conan" }, "expected_output": "vers:conan/4.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=4.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<=4.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=4.0.3-35", "scheme": "conan" }, "expected_output": "vers:conan/4.0.3-35" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.9.0 <=4.4.0", "scheme": "conan" }, "expected_output": "vers:conan/>=3.9.0|<=4.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.5.0", "scheme": "conan" }, "expected_output": "vers:conan/<4.5.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.1", "scheme": "conan" }, "expected_output": "vers:conan/<1.0.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.9.10", "scheme": "conan" }, "expected_output": "vers:conan/2.9.10" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.9.11", "scheme": "conan" }, "expected_output": "vers:conan/<2.9.11" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.9.13", "scheme": "conan" }, "expected_output": "vers:conan/<2.9.13" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.9.14", "scheme": "conan" }, "expected_output": "vers:conan/<2.9.14" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.10.3", "scheme": "conan" }, "expected_output": "vers:conan/<2.10.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.1.35", "scheme": "conan" }, "expected_output": "vers:conan/<1.1.35" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.11.4", "scheme": "conan" }, "expected_output": "vers:conan/<=0.11.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.12.1", "scheme": "conan" }, "expected_output": "vers:conan/<0.12.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.12.1", "scheme": "conan" }, "expected_output": "vers:conan/<=0.12.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=0.12.1", "scheme": "conan" }, "expected_output": "vers:conan/0.12.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=5.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<=5.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=5.4.0", "scheme": "conan" }, "expected_output": "vers:conan/5.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.1.0 <5.3.5||>=5.4.0 <5.4.4", "scheme": "conan" }, "expected_output": "vers:conan/>=5.1.0|<5.3.5|>=5.4.0|<5.4.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=5.4.3", "scheme": "conan" }, "expected_output": "vers:conan/5.4.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.4.0 <=5.4.3", "scheme": "conan" }, "expected_output": "vers:conan/>=5.4.0|<=5.4.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.4.0 <=5.4.4", "scheme": "conan" }, "expected_output": "vers:conan/>=5.4.0|<=5.4.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.4.2 <=5.4.4", "scheme": "conan" }, "expected_output": "vers:conan/>=5.4.2|<=5.4.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.8.3", "scheme": "conan" }, "expected_output": "vers:conan/1.8.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.7.17||>=2.8.0 <2.16.8||>=2.17.0 <2.24.0", "scheme": "conan" }, "expected_output": "vers:conan/<2.7.17|>=2.8.0|<2.16.8|>=2.17.0|<2.24.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=4.0.0", "scheme": "conan" }, "expected_output": "vers:conan/4.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=6.2.1", "scheme": "conan" }, "expected_output": "vers:conan/<=6.2.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<6.3", "scheme": "conan" }, "expected_output": "vers:conan/<6.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.7.2", "scheme": "conan" }, "expected_output": "vers:conan/<3.7.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.7.3", "scheme": "conan" }, "expected_output": "vers:conan/<3.7.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.4.1", "scheme": "conan" }, "expected_output": "vers:conan/<2.4.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.5.2", "scheme": "conan" }, "expected_output": "vers:conan/<2.5.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.4.3||>=2.5.0 <2.5.4", "scheme": "conan" }, "expected_output": "vers:conan/<2.4.3|>=2.5.0|<2.5.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.5.7", "scheme": "conan" }, "expected_output": "vers:conan/<=2.5.7" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.5.4", "scheme": "conan" }, "expected_output": "vers:conan/<2.5.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.0.1", "scheme": "conan" }, "expected_output": "vers:conan/<3.0.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.0.5", "scheme": "conan" }, "expected_output": "vers:conan/<3.0.5" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.1.2", "scheme": "conan" }, "expected_output": "vers:conan/<3.1.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.1.2", "scheme": "conan" }, "expected_output": "vers:conan/3.1.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.1.0 <3.1.4", "scheme": "conan" }, "expected_output": "vers:conan/>=3.1.0|<3.1.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.3.1", "scheme": "conan" }, "expected_output": "vers:conan/<=2.3.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.5.1||>=2.0.0 <2.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<=1.5.1|>=2.0.0|<2.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<2.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.3.1", "scheme": "conan" }, "expected_output": "vers:conan/2.3.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.1d <=1.1.1f", "scheme": "conan" }, "expected_output": "vers:conan/>=1.1.1d|<=1.1.1f" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <=1.0.2v", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<=1.0.2v" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <=1.0.2w||>=1.1.1 <=1.1.1h", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<=1.0.2w|>=1.1.1|<=1.1.1h" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.0.2s", "scheme": "conan" }, "expected_output": "vers:conan/1.0.2s" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <1.0.2y||>=1.1.1 <1.1.1j", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<1.0.2y|>=1.1.1|<1.1.1j" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.1 <1.1.1k", "scheme": "conan" }, "expected_output": "vers:conan/>=1.1.1|<1.1.1k" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.1h <1.1.1k", "scheme": "conan" }, "expected_output": "vers:conan/>=1.1.1h|<1.1.1k" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.1 <1.1.1l", "scheme": "conan" }, "expected_output": "vers:conan/>=1.1.1|<1.1.1l" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <1.0.2za||>=1.1.1 <1.1.1l", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<1.0.2za|>=1.1.1|<1.1.1l" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.2||=1.1.0||=3.0.0", "scheme": "conan" }, "expected_output": "vers:conan/<1.0.2|1.1.0|3.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <1.1.1m||=3.0.0", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<1.1.1m|3.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <1.0.2zd||>=1.1.0 <1.1.1n||>=3.0.0 <3.0.2", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<1.0.2zd|>=1.1.0|<1.1.1n|>=3.0.0|<3.0.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <1.0.2ze||>=1.1.1 <1.1.1o||>=3.0.0 <3.0.3", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<1.0.2ze|>=1.1.1|<1.1.1o|>=3.0.0|<3.0.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0 <3.0.3", "scheme": "conan" }, "expected_output": "vers:conan/>=3.0.0|<3.0.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2 <1.0.2zf||>=1.1.1 <1.1.1p||>=3.0.0 <3.0.4", "scheme": "conan" }, "expected_output": "vers:conan/>=1.0.2|<1.0.2zf|>=1.1.1|<1.1.1p|>=3.0.0|<3.0.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.1 <1.1.1q||>=3.0.0 <3.0.5", "scheme": "conan" }, "expected_output": "vers:conan/>=1.1.1|<1.1.1q|>=3.0.0|<3.0.5" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.0.4", "scheme": "conan" }, "expected_output": "vers:conan/3.0.4" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0 <3.0.6", "scheme": "conan" }, "expected_output": "vers:conan/>=3.0.0|<3.0.6" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0 <3.0.7", "scheme": "conan" }, "expected_output": "vers:conan/>=3.0.0|<3.0.7" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0 <=3.0.7", "scheme": "conan" }, "expected_output": "vers:conan/>=3.0.0|<=3.0.7" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<8.44", "scheme": "conan" }, "expected_output": "vers:conan/<8.44" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<10.40", "scheme": "conan" }, "expected_output": "vers:conan/<10.40" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.15.0", "scheme": "conan" }, "expected_output": "vers:conan/<3.15.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.18.3||>=3.19.0 <3.19.5||>=3.20.0 <3.20.2||>=3.21.0 <3.21.6", "scheme": "conan" }, "expected_output": "vers:conan/<3.18.3|>=3.19.0|<3.19.5|>=3.20.0|<3.20.2|>=3.21.0|<3.21.6" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=1.3", "scheme": "conan" }, "expected_output": "vers:conan/1.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.2", "scheme": "conan" }, "expected_output": "vers:conan/2.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.5.0", "scheme": "conan" }, "expected_output": "vers:conan/<=1.5.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.0 <4.4.1", "scheme": "conan" }, "expected_output": "vers:conan/>=4.0|<4.4.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.0 <4.4.3", "scheme": "conan" }, "expected_output": "vers:conan/>=4.0|<4.4.3" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.0.1", "scheme": "conan" }, "expected_output": "vers:conan/<=2.0.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=cci.20200203", "scheme": "conan" }, "expected_output": "vers:conan/cci.20200203" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=2.27", "scheme": "conan" }, "expected_output": "vers:conan/2.27" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=8.6.11", "scheme": "conan" }, "expected_output": "vers:conan/8.6.11" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=5.0.0", "scheme": "conan" }, "expected_output": "vers:conan/5.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.9.3 <=0.13.0", "scheme": "conan" }, "expected_output": "vers:conan/>=0.9.3|<=0.13.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2021.02.22.00", "scheme": "conan" }, "expected_output": "vers:conan/<2021.02.22.00" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.05.01", "scheme": "conan" }, "expected_output": "vers:conan/<1.05.01" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.9.6", "scheme": "conan" }, "expected_output": "vers:conan/<0.9.6" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=19.0.0 <=20.8.0", "scheme": "conan" }, "expected_output": "vers:conan/>=19.0.0|<=20.8.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.19.0 <0.30.0", "scheme": "conan" }, "expected_output": "vers:conan/>=0.19.0|<0.30.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.26.0 <0.30.0", "scheme": "conan" }, "expected_output": "vers:conan/>=0.26.0|<0.30.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.30.0", "scheme": "conan" }, "expected_output": "vers:conan/<0.30.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.33.1||>0.33.1 <0.34.1", "scheme": "conan" }, "expected_output": "vers:conan/<0.33.1|>0.33.1|<0.34.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.34.0 <0.34.2||>=0.35.0 <0.35.2", "scheme": "conan" }, "expected_output": "vers:conan/>=0.34.0|<0.34.2|>=0.35.0|<0.35.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.38.1", "scheme": "conan" }, "expected_output": "vers:conan/<0.38.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.37.0 <0.38.2", "scheme": "conan" }, "expected_output": "vers:conan/>=0.37.0|<0.38.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.2||>=2.0.0 <2.0.2", "scheme": "conan" }, "expected_output": "vers:conan/<1.0.2|>=2.0.0|<2.0.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.6.0", "scheme": "conan" }, "expected_output": "vers:conan/<4.6.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.7.0", "scheme": "conan" }, "expected_output": "vers:conan/<4.7.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.6.0 <4.8.0", "scheme": "conan" }, "expected_output": "vers:conan/>=4.6.0|<4.8.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.8.1", "scheme": "conan" }, "expected_output": "vers:conan/<4.8.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=5.0.0", "scheme": "conan" }, "expected_output": "vers:conan/<=5.0.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.0.0 <5.1.1", "scheme": "conan" }, "expected_output": "vers:conan/>=5.0.0|<5.1.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<5.2.0", "scheme": "conan" }, "expected_output": "vers:conan/<5.2.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<5.4.0", "scheme": "conan" }, "expected_output": "vers:conan/<5.4.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<5.5.0", "scheme": "conan" }, "expected_output": "vers:conan/<5.5.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=5.3.0", "scheme": "conan" }, "expected_output": "vers:conan/5.3.0" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<5.5.1", "scheme": "conan" }, "expected_output": "vers:conan/<5.5.1" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<5.5.2", "scheme": "conan" }, "expected_output": "vers:conan/<5.5.2" }, { "description": "Construct VERS range from native Conan C/C++ range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.3.3", "scheme": "conan" }, "expected_output": "vers:conan/<4.3.3" } ] } URI-PackageURL-2.26/t/vers/nginx_range_from_native_test.json0000644000175000017500000000237515264504421023100 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native Nginx range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "0.8.40+", "scheme": "nginx" }, "expected_output": "vers:nginx/>=0.8.40|<0.9.0" }, { "description": "Construct VERS range from native Nginx range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "0.7.52-0.8.39", "scheme": "nginx" }, "expected_output": "vers:nginx/>=0.7.52|<=0.8.39" }, { "description": "Construct VERS range from native Nginx range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "0.9.10", "scheme": "nginx" }, "expected_output": "vers:nginx/0.9.10" }, { "description": "Construct VERS range from native Nginx range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "1.5.0+, 1.4.1+", "scheme": "nginx" }, "expected_output": "vers:nginx/>=1.4.1|<1.5.0|>=1.5.0" } ] } URI-PackageURL-2.26/t/vers/pypi_range_from_native_test.json0000644000175000017500000000163615264504421022735 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native PyPI range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.0", "scheme": "pypi" }, "expected_output": "vers:pypi/>=1.0" }, { "description": "Construct VERS range from native PyPI range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.1.0", "scheme": "pypi" }, "expected_output": "vers:pypi/<2.1.0" }, { "description": "Construct VERS range from native PyPI range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "!=5", "scheme": "pypi" }, "expected_output": "vers:pypi/!=5" } ] } URI-PackageURL-2.26/t/vers/test-overview.md0000644000175000017500000000614215264504421017417 0ustar peppepeppe--- id: test-overview title: VERS test overview sidebar_label: Test overview hide_table_of_contents: true --- # VERS test overview The Version Range Specifier (VERS) specification provides test files to support language-neutral testing of VERS implementations. The objectives for the VERS test suite are to: - Enable tools to demonstrate conformance with the VERS specification as defined in the [VERS Core Specification](https://packageurl.org/docs/vers/specification) and in registered VERS **type** definitions. - Help tools identify and fix common problems in VERS data. The structure of test cases used in VERS test files is defined in a JSON Schema. The current VERS Test Schema is [version 0.2](https://packageurl.org/vers-schemas/vers-test.schema-0.2.json). ## Conformance Since the primary goal for the VERS test suite is to help VERS tools achieve and demonstrate conformance with the VERS specification, it is important to state what we mean by conformance. Conformance for VERS is defined in the VERS specification files at: https://github.com/package-url/vers-spec/tree/main/docs/specification/standard. The summary is: "A conforming implementation of Version Range Specifier (VERS) shall fully implement and support all elements defined within this Standard, including the syntax, components, and semantic requirements for constructing and interpreting valid VERS notations." Other VERS documentation such as "How to parse and validate VERS" is important but not part of the VERS Standard for conformance purposes. Some common words have a very specific meaning for Ecma conformance: - "canonical form" means a VERS string or a set of VERS components in the format that matches the Standard for a string or components respectively - "normalisation" means the process of structuring, standardizing, or converting data to conform to a standard format - i.e. canonical form. - "shall" indicates a requirement (Ecma & ISO definition) - "should" indicates a recommendation (Ecma & ISO definition) The VERS Standard requires that: - A VERS string is in canonical form or - Each VERS component in a set (object) conforms to the VERS Standard. ## Terminology Some key terminology for the VERS test suite is: | Term | Definition | |-----------------|---------------------------------------------------------| | VERS component | One of the 3 components of a VERS string | | VERS data | Summary term for a VERS string or an object composed of VERS components | | VERS Standard | Refers to the VERS Core Specification | | VERS tool | A software program that implements one or more VERS functions such as building or parsing a VERS notation or determining whether a version is contained within VERS **constraints** | | VERS type registration | Means that there is a VERS type definition file (JSON) in the `vers-spec` repository | | test case | Is a single test example within a *test file* | | test file | Is a set of *test cases* | | test suite | Is the entire set of current VERS *test files* | URI-PackageURL-2.26/t/vers/maven_version_cmp_test.json0000644000175000017500000117063715264504421021732 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2" ] }, "expected_output": [ "1", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.5", "2" ] }, "expected_output": [ "1.5", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2.5" ] }, "expected_output": [ "1", "2.5" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.1" ] }, "expected_output": [ "1.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2" ] }, "expected_output": [ "1.1", "1.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.0", "1.1" ] }, "expected_output": [ "1.0.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.1", "1.1" ] }, "expected_output": [ "1.0.1", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2.0" ] }, "expected_output": [ "1.1", "1.2.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-alpha-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-2" ] }, "expected_output": [ "1.0-alpha-1", "1.0-alpha-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-beta-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0-beta-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-SNAPSHOT", "1.0-beta-1" ] }, "expected_output": [ "1.0-beta-1", "1.0-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-SNAPSHOT" ] }, "expected_output": [ "1.0-SNAPSHOT", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-1-SNAPSHOT" ] }, "expected_output": [ "1.0-alpha-1-SNAPSHOT", "1.0-alpha-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-1" ] }, "expected_output": [ "1.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0-2" ] }, "expected_output": [ "1.0-1", "1.0-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0.0" ] }, "expected_output": [ "1.0.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0-1", "2.0.1" ] }, "expected_output": [ "2.0-1", "2.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-klm", "2.0.1-lmn" ] }, "expected_output": [ "2.0.1-klm", "2.0.1-lmn" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1", "2.0.1-xyz" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-123" ] }, "expected_output": [ "2.0.1", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-123", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1-xyz", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2" ] }, "expected_output": [ "1", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.5", "2" ] }, "expected_output": [ "1.5", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2.5" ] }, "expected_output": [ "1", "2.5" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.1" ] }, "expected_output": [ "1.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2" ] }, "expected_output": [ "1.1", "1.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.0", "1.1" ] }, "expected_output": [ "1.0.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.1", "1.1" ] }, "expected_output": [ "1.0.1", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2.0" ] }, "expected_output": [ "1.1", "1.2.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-alpha-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-2" ] }, "expected_output": [ "1.0-alpha-1", "1.0-alpha-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-beta-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0-beta-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-SNAPSHOT", "1.0-beta-1" ] }, "expected_output": [ "1.0-beta-1", "1.0-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-SNAPSHOT" ] }, "expected_output": [ "1.0-SNAPSHOT", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-1-SNAPSHOT" ] }, "expected_output": [ "1.0-alpha-1-SNAPSHOT", "1.0-alpha-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-1" ] }, "expected_output": [ "1.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0-2" ] }, "expected_output": [ "1.0-1", "1.0-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0.0" ] }, "expected_output": [ "1.0.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0-1", "2.0.1" ] }, "expected_output": [ "2.0-1", "2.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-klm", "2.0.1-lmn" ] }, "expected_output": [ "2.0.1-klm", "2.0.1-lmn" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1", "2.0.1-xyz" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-123" ] }, "expected_output": [ "2.0.1", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-123", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1-xyz", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2" ] }, "expected_output": [ "1", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.5", "2" ] }, "expected_output": [ "1.5", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2.5" ] }, "expected_output": [ "1", "2.5" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.1" ] }, "expected_output": [ "1.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2" ] }, "expected_output": [ "1.1", "1.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.0", "1.1" ] }, "expected_output": [ "1.0.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.1", "1.1" ] }, "expected_output": [ "1.0.1", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2.0" ] }, "expected_output": [ "1.1", "1.2.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-alpha-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-2" ] }, "expected_output": [ "1.0-alpha-1", "1.0-alpha-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-beta-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0-beta-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-SNAPSHOT", "1.0-beta-1" ] }, "expected_output": [ "1.0-beta-1", "1.0-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-SNAPSHOT" ] }, "expected_output": [ "1.0-SNAPSHOT", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-1-SNAPSHOT" ] }, "expected_output": [ "1.0-alpha-1-SNAPSHOT", "1.0-alpha-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-1" ] }, "expected_output": [ "1.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0-2" ] }, "expected_output": [ "1.0-1", "1.0-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0.0" ] }, "expected_output": [ "1.0.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0-1", "2.0.1" ] }, "expected_output": [ "2.0-1", "2.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-klm", "2.0.1-lmn" ] }, "expected_output": [ "2.0.1-klm", "2.0.1-lmn" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1", "2.0.1-xyz" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-123" ] }, "expected_output": [ "2.0.1", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-123", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1-xyz", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2" ] }, "expected_output": [ "1", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.5", "2" ] }, "expected_output": [ "1.5", "2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "2.5" ] }, "expected_output": [ "1", "2.5" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.1" ] }, "expected_output": [ "1.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2" ] }, "expected_output": [ "1.1", "1.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.0", "1.1" ] }, "expected_output": [ "1.0.0", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0.1", "1.1" ] }, "expected_output": [ "1.0.1", "1.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.1", "1.2.0" ] }, "expected_output": [ "1.1", "1.2.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-alpha-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-2" ] }, "expected_output": [ "1.0-alpha-1", "1.0-alpha-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-beta-1" ] }, "expected_output": [ "1.0-alpha-1", "1.0-beta-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-SNAPSHOT", "1.0-beta-1" ] }, "expected_output": [ "1.0-beta-1", "1.0-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-SNAPSHOT" ] }, "expected_output": [ "1.0-SNAPSHOT", "1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-alpha-1", "1.0-alpha-1-SNAPSHOT" ] }, "expected_output": [ "1.0-alpha-1-SNAPSHOT", "1.0-alpha-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-1" ] }, "expected_output": [ "1.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0-2" ] }, "expected_output": [ "1.0-1", "1.0-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1.0-1", "1.0.0" ] }, "expected_output": [ "1.0.0", "1.0-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0-1", "2.0.1" ] }, "expected_output": [ "2.0-1", "2.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-klm", "2.0.1-lmn" ] }, "expected_output": [ "2.0.1-klm", "2.0.1-lmn" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1", "2.0.1-xyz" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1", "2.0.1-123" ] }, "expected_output": [ "2.0.1", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.1-123", "2.0.1-xyz" ] }, "expected_output": [ "2.0.1-xyz", "2.0.1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1a", "1-a" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1a", "1.0-a" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1a", "1.0.0-a" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0a", "1-a" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0.0a", "1-a" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1x", "1-x" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1x", "1.0-x" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1x", "1.0.0-x" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0x", "1-x" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0.0x", "1-x" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1ga", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1final", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1cr", "1rc" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1a1", "1-alpha-1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1b2", "1-beta-2" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1m3", "1-milestone-3" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1X", "1x" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1A", "1a" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1B", "1b" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1M", "1m" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1Ga", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1GA", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1Final", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1FinaL", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1FINAL", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1Cr", "1Rc" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1cR", "1rC" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1m3", "1Milestone3" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1m3", "1MileStone3" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1m3", "1MILESTONE3" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "maven", "versions": [ "1.0", "1.0-0" ] }, "expected_output": true }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0" ] }, "expected_output": [ "2.0", "2-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.a" ] }, "expected_output": [ "2.0", "2.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.0.a" ] }, "expected_output": [ "2.0", "2.0.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.2" ] }, "expected_output": [ "2.0", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.123" ] }, "expected_output": [ "2.0", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1.0" ] }, "expected_output": [ "2.0", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1-a" ] }, "expected_output": [ "2.0", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1b" ] }, "expected_output": [ "2.0", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1-x" ] }, "expected_output": [ "2.0", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1-1" ] }, "expected_output": [ "2.0", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1.0.1" ] }, "expected_output": [ "2.0", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.2" ] }, "expected_output": [ "2.0", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.123" ] }, "expected_output": [ "2.0", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0" ] }, "expected_output": [ "2.0", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0" ] }, "expected_output": [ "2.0", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0" ] }, "expected_output": [ "2.0", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0" ] }, "expected_output": [ "2.0", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0" ] }, "expected_output": [ "2.0", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0" ] }, "expected_output": [ "2.0", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0" ] }, "expected_output": [ "2.0", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0" ] }, "expected_output": [ "2.0", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0" ] }, "expected_output": [ "2.0", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0" ] }, "expected_output": [ "2.0", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0" ] }, "expected_output": [ "2.0", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.a" ] }, "expected_output": [ "2-1", "2.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.0.a" ] }, "expected_output": [ "2-1", "2.0.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.2" ] }, "expected_output": [ "2-1", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.123" ] }, "expected_output": [ "2-1", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1.0" ] }, "expected_output": [ "2-1", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1-a" ] }, "expected_output": [ "2-1", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1b" ] }, "expected_output": [ "2-1", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1-x" ] }, "expected_output": [ "2-1", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1-1" ] }, "expected_output": [ "2-1", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1.0.1" ] }, "expected_output": [ "2-1", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.2" ] }, "expected_output": [ "2-1", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.123" ] }, "expected_output": [ "2-1", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2-1" ] }, "expected_output": [ "2-1", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2-1" ] }, "expected_output": [ "2-1", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2-1" ] }, "expected_output": [ "2-1", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2-1" ] }, "expected_output": [ "2-1", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2-1" ] }, "expected_output": [ "2-1", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2-1" ] }, "expected_output": [ "2-1", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2-1" ] }, "expected_output": [ "2-1", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2-1" ] }, "expected_output": [ "2-1", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2-1" ] }, "expected_output": [ "2-1", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2-1" ] }, "expected_output": [ "2-1", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2-1" ] }, "expected_output": [ "2-1", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.0.a" ] }, "expected_output": [ "2.0.a", "2.0.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.0.a" ] }, "expected_output": [ "2.0.a", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.0.a" ] }, "expected_output": [ "2.0.a", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1.0" ] }, "expected_output": [ "2.0.a", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1-a" ] }, "expected_output": [ "2.0.a", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1b" ] }, "expected_output": [ "2.0.a", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1-x" ] }, "expected_output": [ "2.0.a", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1-1" ] }, "expected_output": [ "2.0.a", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1.0.1" ] }, "expected_output": [ "2.0.a", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.2" ] }, "expected_output": [ "2.0.a", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.123" ] }, "expected_output": [ "2.0.a", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.a" ] }, "expected_output": [ "2.0.a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.a" ] }, "expected_output": [ "2.0.a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.a" ] }, "expected_output": [ "2.0.a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.0.2" ] }, "expected_output": [ "2.0.0.a", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.0.123" ] }, "expected_output": [ "2.0.0.a", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1.0" ] }, "expected_output": [ "2.0.0.a", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1-a" ] }, "expected_output": [ "2.0.0.a", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1b" ] }, "expected_output": [ "2.0.0.a", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1-x" ] }, "expected_output": [ "2.0.0.a", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1-1" ] }, "expected_output": [ "2.0.0.a", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1.0.1" ] }, "expected_output": [ "2.0.0.a", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.2" ] }, "expected_output": [ "2.0.0.a", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.123" ] }, "expected_output": [ "2.0.0.a", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.0.2" ] }, "expected_output": [ "2.0.2", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1.0" ] }, "expected_output": [ "2.0.2", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1-a" ] }, "expected_output": [ "2.0.2", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1b" ] }, "expected_output": [ "2.0.2", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1-x" ] }, "expected_output": [ "2.0.2", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1-1" ] }, "expected_output": [ "2.0.2", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1.0.1" ] }, "expected_output": [ "2.0.2", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.2" ] }, "expected_output": [ "2.0.2", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.123" ] }, "expected_output": [ "2.0.2", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.2" ] }, "expected_output": [ "2.0.2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.2" ] }, "expected_output": [ "2.0.2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.2" ] }, "expected_output": [ "2.0.2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1.0" ] }, "expected_output": [ "2.0.123", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1-a" ] }, "expected_output": [ "2.0.123", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1b" ] }, "expected_output": [ "2.0.123", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1-x" ] }, "expected_output": [ "2.0.123", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1-1" ] }, "expected_output": [ "2.0.123", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1.0.1" ] }, "expected_output": [ "2.0.123", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.2" ] }, "expected_output": [ "2.0.123", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.123" ] }, "expected_output": [ "2.0.123", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.123" ] }, "expected_output": [ "2.0.123", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.123" ] }, "expected_output": [ "2.0.123", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.123" ] }, "expected_output": [ "2.0.123", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1.0" ] }, "expected_output": [ "2.1.0", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.1b" ] }, "expected_output": [ "2.1.0", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.1.0" ] }, "expected_output": [ "2.1.0", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1.0" ] }, "expected_output": [ "2.1.0", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.1.0.1" ] }, "expected_output": [ "2.1.0", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.2" ] }, "expected_output": [ "2.1.0", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.123" ] }, "expected_output": [ "2.1.0", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1.0" ] }, "expected_output": [ "2.1.0", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1.0" ] }, "expected_output": [ "2.1.0", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1.0" ] }, "expected_output": [ "2.1.0", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1b" ] }, "expected_output": [ "2.1-a", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1-x" ] }, "expected_output": [ "2.1-a", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1-a" ] }, "expected_output": [ "2.1-a", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1.0.1" ] }, "expected_output": [ "2.1-a", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.2" ] }, "expected_output": [ "2.1-a", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.123" ] }, "expected_output": [ "2.1-a", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1-a" ] }, "expected_output": [ "2.1-a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1-a" ] }, "expected_output": [ "2.1-a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1-a" ] }, "expected_output": [ "2.1-a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.1b" ] }, "expected_output": [ "2.1b", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1b" ] }, "expected_output": [ "2.1b", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0.1", "2.1b" ] }, "expected_output": [ "2.1b", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1b", "2.2" ] }, "expected_output": [ "2.1b", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.123", "2.1b" ] }, "expected_output": [ "2.1b", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1b" ] }, "expected_output": [ "2.1b", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1b" ] }, "expected_output": [ "2.1b", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1b" ] }, "expected_output": [ "2.1b", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1b" ] }, "expected_output": [ "2.1b", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1b" ] }, "expected_output": [ "2.1b", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1b" ] }, "expected_output": [ "2.1b", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1b" ] }, "expected_output": [ "2.1b", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1b" ] }, "expected_output": [ "2.1b", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1b" ] }, "expected_output": [ "2.1b", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1b" ] }, "expected_output": [ "2.1b", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1b" ] }, "expected_output": [ "2.1b", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1-x" ] }, "expected_output": [ "2.1-x", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.1.0.1" ] }, "expected_output": [ "2.1-x", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.2" ] }, "expected_output": [ "2.1-x", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.123" ] }, "expected_output": [ "2.1-x", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1-x" ] }, "expected_output": [ "2.1-x", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1-x" ] }, "expected_output": [ "2.1-x", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1-x" ] }, "expected_output": [ "2.1-x", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1.0.1" ] }, "expected_output": [ "2.1-1", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.2" ] }, "expected_output": [ "2.1-1", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.123" ] }, "expected_output": [ "2.1-1", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1-1" ] }, "expected_output": [ "2.1-1", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1-1" ] }, "expected_output": [ "2.1-1", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1-1" ] }, "expected_output": [ "2.1-1", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0.1", "2.2" ] }, "expected_output": [ "2.1.0.1", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0.1", "2.123" ] }, "expected_output": [ "2.1.0.1", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.123", "2.2" ] }, "expected_output": [ "2.2", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.2" ] }, "expected_output": [ "2.2", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.2" ] }, "expected_output": [ "2.2", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.2" ] }, "expected_output": [ "2.2", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.2" ] }, "expected_output": [ "2.2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.2" ] }, "expected_output": [ "2.2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.2" ] }, "expected_output": [ "2.2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.2" ] }, "expected_output": [ "2.2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.2" ] }, "expected_output": [ "2.2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.2" ] }, "expected_output": [ "2.2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.2" ] }, "expected_output": [ "2.2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.2" ] }, "expected_output": [ "2.2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.123" ] }, "expected_output": [ "2.123", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.123" ] }, "expected_output": [ "2.123", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.123" ] }, "expected_output": [ "2.123", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.123" ] }, "expected_output": [ "2.123", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.123" ] }, "expected_output": [ "2.123", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.123" ] }, "expected_output": [ "2.123", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.123" ] }, "expected_output": [ "2.123", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.123" ] }, "expected_output": [ "2.123", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.123" ] }, "expected_output": [ "2.123", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.123" ] }, "expected_output": [ "2.123", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.123" ] }, "expected_output": [ "2.123", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.a2" ] }, "expected_output": [ "11.a2", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.b2" ] }, "expected_output": [ "11.a2", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.b11" ] }, "expected_output": [ "11.a2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.m2" ] }, "expected_output": [ "11.a2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.m11" ] }, "expected_output": [ "11.a2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.a2" ] }, "expected_output": [ "11.a2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.a2" ] }, "expected_output": [ "11.a2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11b" ] }, "expected_output": [ "11.a2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11c" ] }, "expected_output": [ "11.a2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11m" ] }, "expected_output": [ "11.a2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.b2" ] }, "expected_output": [ "11.a11", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.b11" ] }, "expected_output": [ "11.a11", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.m2" ] }, "expected_output": [ "11.a11", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.m11" ] }, "expected_output": [ "11.a11", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.a11" ] }, "expected_output": [ "11.a11", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.a11" ] }, "expected_output": [ "11.a11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11b" ] }, "expected_output": [ "11.a11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11c" ] }, "expected_output": [ "11.a11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11m" ] }, "expected_output": [ "11.a11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11.b2" ] }, "expected_output": [ "11.b2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11.m2" ] }, "expected_output": [ "11.b2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11.m11" ] }, "expected_output": [ "11.b2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.b2" ] }, "expected_output": [ "11.b2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.b2" ] }, "expected_output": [ "11.b2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11b" ] }, "expected_output": [ "11.b2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11c" ] }, "expected_output": [ "11.b2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11m" ] }, "expected_output": [ "11.b2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11.m2" ] }, "expected_output": [ "11.b11", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11.m11" ] }, "expected_output": [ "11.b11", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.b11" ] }, "expected_output": [ "11.b11", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.b11" ] }, "expected_output": [ "11.b11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11b" ] }, "expected_output": [ "11.b11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11c" ] }, "expected_output": [ "11.b11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11m" ] }, "expected_output": [ "11.b11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11.m2" ] }, "expected_output": [ "11.m2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.m2" ] }, "expected_output": [ "11.m2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.m2" ] }, "expected_output": [ "11.m2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "11b" ] }, "expected_output": [ "11.m2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "11c" ] }, "expected_output": [ "11.m2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "11m" ] }, "expected_output": [ "11.m2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.m11" ] }, "expected_output": [ "11.m11", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.m11" ] }, "expected_output": [ "11.m11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11b" ] }, "expected_output": [ "11.m11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11c" ] }, "expected_output": [ "11.m11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11m" ] }, "expected_output": [ "11.m11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.a" ] }, "expected_output": [ "11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11b" ] }, "expected_output": [ "11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11c" ] }, "expected_output": [ "11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11m" ] }, "expected_output": [ "11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11b" ] }, "expected_output": [ "11.a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11c" ] }, "expected_output": [ "11.a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11m" ] }, "expected_output": [ "11.a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "11c" ] }, "expected_output": [ "11b", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "11m" ] }, "expected_output": [ "11b", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "11m" ] }, "expected_output": [ "11c", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0" ] }, "expected_output": [ "2.0", "2-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.a" ] }, "expected_output": [ "2.0", "2.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.0.a" ] }, "expected_output": [ "2.0", "2.0.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.2" ] }, "expected_output": [ "2.0", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.0.123" ] }, "expected_output": [ "2.0", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1.0" ] }, "expected_output": [ "2.0", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1-a" ] }, "expected_output": [ "2.0", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1b" ] }, "expected_output": [ "2.0", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1-x" ] }, "expected_output": [ "2.0", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1-1" ] }, "expected_output": [ "2.0", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.1.0.1" ] }, "expected_output": [ "2.0", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.2" ] }, "expected_output": [ "2.0", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0", "2.123" ] }, "expected_output": [ "2.0", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0" ] }, "expected_output": [ "2.0", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0" ] }, "expected_output": [ "2.0", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0" ] }, "expected_output": [ "2.0", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0" ] }, "expected_output": [ "2.0", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0" ] }, "expected_output": [ "2.0", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0" ] }, "expected_output": [ "2.0", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0" ] }, "expected_output": [ "2.0", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0" ] }, "expected_output": [ "2.0", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0" ] }, "expected_output": [ "2.0", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0" ] }, "expected_output": [ "2.0", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0" ] }, "expected_output": [ "2.0", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.a" ] }, "expected_output": [ "2-1", "2.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.0.a" ] }, "expected_output": [ "2-1", "2.0.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.2" ] }, "expected_output": [ "2-1", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.0.123" ] }, "expected_output": [ "2-1", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1.0" ] }, "expected_output": [ "2-1", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1-a" ] }, "expected_output": [ "2-1", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1b" ] }, "expected_output": [ "2-1", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1-x" ] }, "expected_output": [ "2-1", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1-1" ] }, "expected_output": [ "2-1", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.1.0.1" ] }, "expected_output": [ "2-1", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.2" ] }, "expected_output": [ "2-1", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2-1", "2.123" ] }, "expected_output": [ "2-1", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2-1" ] }, "expected_output": [ "2-1", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2-1" ] }, "expected_output": [ "2-1", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2-1" ] }, "expected_output": [ "2-1", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2-1" ] }, "expected_output": [ "2-1", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2-1" ] }, "expected_output": [ "2-1", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2-1" ] }, "expected_output": [ "2-1", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2-1" ] }, "expected_output": [ "2-1", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2-1" ] }, "expected_output": [ "2-1", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2-1" ] }, "expected_output": [ "2-1", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2-1" ] }, "expected_output": [ "2-1", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2-1" ] }, "expected_output": [ "2-1", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.0.a" ] }, "expected_output": [ "2.0.a", "2.0.0.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.0.a" ] }, "expected_output": [ "2.0.a", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.0.a" ] }, "expected_output": [ "2.0.a", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1.0" ] }, "expected_output": [ "2.0.a", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1-a" ] }, "expected_output": [ "2.0.a", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1b" ] }, "expected_output": [ "2.0.a", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1-x" ] }, "expected_output": [ "2.0.a", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1-1" ] }, "expected_output": [ "2.0.a", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.1.0.1" ] }, "expected_output": [ "2.0.a", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.2" ] }, "expected_output": [ "2.0.a", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.a", "2.123" ] }, "expected_output": [ "2.0.a", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.a" ] }, "expected_output": [ "2.0.a", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.a" ] }, "expected_output": [ "2.0.a", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.a" ] }, "expected_output": [ "2.0.a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.a" ] }, "expected_output": [ "2.0.a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.a" ] }, "expected_output": [ "2.0.a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.0.2" ] }, "expected_output": [ "2.0.0.a", "2.0.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.0.123" ] }, "expected_output": [ "2.0.0.a", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1.0" ] }, "expected_output": [ "2.0.0.a", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1-a" ] }, "expected_output": [ "2.0.0.a", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1b" ] }, "expected_output": [ "2.0.0.a", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1-x" ] }, "expected_output": [ "2.0.0.a", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1-1" ] }, "expected_output": [ "2.0.0.a", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.1.0.1" ] }, "expected_output": [ "2.0.0.a", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.2" ] }, "expected_output": [ "2.0.0.a", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.0.a", "2.123" ] }, "expected_output": [ "2.0.0.a", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.0.a" ] }, "expected_output": [ "2.0.0.a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.0.2" ] }, "expected_output": [ "2.0.2", "2.0.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1.0" ] }, "expected_output": [ "2.0.2", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1-a" ] }, "expected_output": [ "2.0.2", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1b" ] }, "expected_output": [ "2.0.2", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1-x" ] }, "expected_output": [ "2.0.2", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1-1" ] }, "expected_output": [ "2.0.2", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.1.0.1" ] }, "expected_output": [ "2.0.2", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.2" ] }, "expected_output": [ "2.0.2", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.2", "2.123" ] }, "expected_output": [ "2.0.2", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.2" ] }, "expected_output": [ "2.0.2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.2" ] }, "expected_output": [ "2.0.2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.2" ] }, "expected_output": [ "2.0.2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.2" ] }, "expected_output": [ "2.0.2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.2" ] }, "expected_output": [ "2.0.2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1.0" ] }, "expected_output": [ "2.0.123", "2.1.0" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1-a" ] }, "expected_output": [ "2.0.123", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1b" ] }, "expected_output": [ "2.0.123", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1-x" ] }, "expected_output": [ "2.0.123", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1-1" ] }, "expected_output": [ "2.0.123", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.1.0.1" ] }, "expected_output": [ "2.0.123", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.2" ] }, "expected_output": [ "2.0.123", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.0.123", "2.123" ] }, "expected_output": [ "2.0.123", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.0.123" ] }, "expected_output": [ "2.0.123", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.0.123" ] }, "expected_output": [ "2.0.123", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.0.123" ] }, "expected_output": [ "2.0.123", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.0.123" ] }, "expected_output": [ "2.0.123", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.0.123" ] }, "expected_output": [ "2.0.123", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1.0" ] }, "expected_output": [ "2.1.0", "2.1-a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.1b" ] }, "expected_output": [ "2.1.0", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.1.0" ] }, "expected_output": [ "2.1.0", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1.0" ] }, "expected_output": [ "2.1.0", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.1.0.1" ] }, "expected_output": [ "2.1.0", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.2" ] }, "expected_output": [ "2.1.0", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0", "2.123" ] }, "expected_output": [ "2.1.0", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1.0" ] }, "expected_output": [ "2.1.0", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1.0" ] }, "expected_output": [ "2.1.0", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1.0" ] }, "expected_output": [ "2.1.0", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1.0" ] }, "expected_output": [ "2.1.0", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1.0" ] }, "expected_output": [ "2.1.0", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1b" ] }, "expected_output": [ "2.1-a", "2.1b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1-x" ] }, "expected_output": [ "2.1-a", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1-a" ] }, "expected_output": [ "2.1-a", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.1.0.1" ] }, "expected_output": [ "2.1-a", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.2" ] }, "expected_output": [ "2.1-a", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-a", "2.123" ] }, "expected_output": [ "2.1-a", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1-a" ] }, "expected_output": [ "2.1-a", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1-a" ] }, "expected_output": [ "2.1-a", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1-a" ] }, "expected_output": [ "2.1-a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1-a" ] }, "expected_output": [ "2.1-a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1-a" ] }, "expected_output": [ "2.1-a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.1b" ] }, "expected_output": [ "2.1b", "2.1-x" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1b" ] }, "expected_output": [ "2.1b", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0.1", "2.1b" ] }, "expected_output": [ "2.1b", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1b", "2.2" ] }, "expected_output": [ "2.1b", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.123", "2.1b" ] }, "expected_output": [ "2.1b", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1b" ] }, "expected_output": [ "2.1b", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1b" ] }, "expected_output": [ "2.1b", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1b" ] }, "expected_output": [ "2.1b", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1b" ] }, "expected_output": [ "2.1b", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1b" ] }, "expected_output": [ "2.1b", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1b" ] }, "expected_output": [ "2.1b", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1b" ] }, "expected_output": [ "2.1b", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1b" ] }, "expected_output": [ "2.1b", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1b" ] }, "expected_output": [ "2.1b", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1b" ] }, "expected_output": [ "2.1b", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1b" ] }, "expected_output": [ "2.1b", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1-x" ] }, "expected_output": [ "2.1-x", "2.1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.1.0.1" ] }, "expected_output": [ "2.1-x", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.2" ] }, "expected_output": [ "2.1-x", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-x", "2.123" ] }, "expected_output": [ "2.1-x", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1-x" ] }, "expected_output": [ "2.1-x", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1-x" ] }, "expected_output": [ "2.1-x", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1-x" ] }, "expected_output": [ "2.1-x", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1-x" ] }, "expected_output": [ "2.1-x", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1-x" ] }, "expected_output": [ "2.1-x", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.1.0.1" ] }, "expected_output": [ "2.1-1", "2.1.0.1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.2" ] }, "expected_output": [ "2.1-1", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1-1", "2.123" ] }, "expected_output": [ "2.1-1", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1-1" ] }, "expected_output": [ "2.1-1", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1-1" ] }, "expected_output": [ "2.1-1", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1-1" ] }, "expected_output": [ "2.1-1", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1-1" ] }, "expected_output": [ "2.1-1", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1-1" ] }, "expected_output": [ "2.1-1", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0.1", "2.2" ] }, "expected_output": [ "2.1.0.1", "2.2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.1.0.1", "2.123" ] }, "expected_output": [ "2.1.0.1", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.1.0.1" ] }, "expected_output": [ "2.1.0.1", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "2.123", "2.2" ] }, "expected_output": [ "2.2", "2.123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.2" ] }, "expected_output": [ "2.2", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.2" ] }, "expected_output": [ "2.2", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.2" ] }, "expected_output": [ "2.2", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.2" ] }, "expected_output": [ "2.2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.2" ] }, "expected_output": [ "2.2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.2" ] }, "expected_output": [ "2.2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.2" ] }, "expected_output": [ "2.2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.2" ] }, "expected_output": [ "2.2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.2" ] }, "expected_output": [ "2.2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.2" ] }, "expected_output": [ "2.2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.2" ] }, "expected_output": [ "2.2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "2.123" ] }, "expected_output": [ "2.123", "11.a2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "2.123" ] }, "expected_output": [ "2.123", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "2.123" ] }, "expected_output": [ "2.123", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "2.123" ] }, "expected_output": [ "2.123", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "2.123" ] }, "expected_output": [ "2.123", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "2.123" ] }, "expected_output": [ "2.123", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "2.123" ] }, "expected_output": [ "2.123", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "2.123" ] }, "expected_output": [ "2.123", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "2.123" ] }, "expected_output": [ "2.123", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "2.123" ] }, "expected_output": [ "2.123", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11m", "2.123" ] }, "expected_output": [ "2.123", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.a2" ] }, "expected_output": [ "11.a2", "11.a11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.b2" ] }, "expected_output": [ "11.a2", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.b11" ] }, "expected_output": [ "11.a2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.m2" ] }, "expected_output": [ "11.a2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11.m11" ] }, "expected_output": [ "11.a2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.a2" ] }, "expected_output": [ "11.a2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.a2" ] }, "expected_output": [ "11.a2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11b" ] }, "expected_output": [ "11.a2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11c" ] }, "expected_output": [ "11.a2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a2", "11m" ] }, "expected_output": [ "11.a2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.b2" ] }, "expected_output": [ "11.a11", "11.b2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.b11" ] }, "expected_output": [ "11.a11", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.m2" ] }, "expected_output": [ "11.a11", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11.m11" ] }, "expected_output": [ "11.a11", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.a11" ] }, "expected_output": [ "11.a11", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.a11" ] }, "expected_output": [ "11.a11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11b" ] }, "expected_output": [ "11.a11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11c" ] }, "expected_output": [ "11.a11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a11", "11m" ] }, "expected_output": [ "11.a11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11.b2" ] }, "expected_output": [ "11.b2", "11.b11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11.m2" ] }, "expected_output": [ "11.b2", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11.m11" ] }, "expected_output": [ "11.b2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.b2" ] }, "expected_output": [ "11.b2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.b2" ] }, "expected_output": [ "11.b2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11b" ] }, "expected_output": [ "11.b2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11c" ] }, "expected_output": [ "11.b2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b2", "11m" ] }, "expected_output": [ "11.b2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11.m2" ] }, "expected_output": [ "11.b11", "11.m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11.m11" ] }, "expected_output": [ "11.b11", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.b11" ] }, "expected_output": [ "11.b11", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.b11" ] }, "expected_output": [ "11.b11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11b" ] }, "expected_output": [ "11.b11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11c" ] }, "expected_output": [ "11.b11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.b11", "11m" ] }, "expected_output": [ "11.b11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11.m2" ] }, "expected_output": [ "11.m2", "11.m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.m2" ] }, "expected_output": [ "11.m2", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.m2" ] }, "expected_output": [ "11.m2", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "11b" ] }, "expected_output": [ "11.m2", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "11c" ] }, "expected_output": [ "11.m2", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m2", "11m" ] }, "expected_output": [ "11.m2", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.m11" ] }, "expected_output": [ "11.m11", "11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11.m11" ] }, "expected_output": [ "11.m11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11b" ] }, "expected_output": [ "11.m11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11c" ] }, "expected_output": [ "11.m11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.m11", "11m" ] }, "expected_output": [ "11.m11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11.a" ] }, "expected_output": [ "11", "11.a" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11b" ] }, "expected_output": [ "11", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11c" ] }, "expected_output": [ "11", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11", "11m" ] }, "expected_output": [ "11", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11b" ] }, "expected_output": [ "11.a", "11b" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11c" ] }, "expected_output": [ "11.a", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11.a", "11m" ] }, "expected_output": [ "11.a", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "11c" ] }, "expected_output": [ "11b", "11c" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11b", "11m" ] }, "expected_output": [ "11b", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "11c", "11m" ] }, "expected_output": [ "11c", "11m" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-alpha2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-alpha-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-beta-2" ] }, "expected_output": [ "1-alpha2snapshot", "1-beta-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-beta123" ] }, "expected_output": [ "1-alpha2snapshot", "1-beta123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-m2" ] }, "expected_output": [ "1-alpha2snapshot", "1-m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-m11" ] }, "expected_output": [ "1-alpha2snapshot", "1-m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-rc" ] }, "expected_output": [ "1-alpha2snapshot", "1-rc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-cr2" ] }, "expected_output": [ "1-alpha2snapshot", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-rc123" ] }, "expected_output": [ "1-alpha2snapshot", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-sp" ] }, "expected_output": [ "1-alpha2snapshot", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-sp2" ] }, "expected_output": [ "1-alpha2snapshot", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-sp123" ] }, "expected_output": [ "1-alpha2snapshot", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-def" ] }, "expected_output": [ "1-alpha2snapshot", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2snapshot", "1-pom-1" ] }, "expected_output": [ "1-alpha2snapshot", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-alpha2snapshot" ] }, "expected_output": [ "1-alpha2snapshot", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1-alpha-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-beta-2" ] }, "expected_output": [ "1-alpha2", "1-beta-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-beta123" ] }, "expected_output": [ "1-alpha2", "1-beta123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-m2" ] }, "expected_output": [ "1-alpha2", "1-m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-m11" ] }, "expected_output": [ "1-alpha2", "1-m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-rc" ] }, "expected_output": [ "1-alpha2", "1-rc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-cr2" ] }, "expected_output": [ "1-alpha2", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-rc123" ] }, "expected_output": [ "1-alpha2", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-sp" ] }, "expected_output": [ "1-alpha2", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-sp2" ] }, "expected_output": [ "1-alpha2", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-sp123" ] }, "expected_output": [ "1-alpha2", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-def" ] }, "expected_output": [ "1-alpha2", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha2", "1-pom-1" ] }, "expected_output": [ "1-alpha2", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-alpha2" ] }, "expected_output": [ "1-alpha2", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-beta-2" ] }, "expected_output": [ "1-alpha-123", "1-beta-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-beta123" ] }, "expected_output": [ "1-alpha-123", "1-beta123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-m2" ] }, "expected_output": [ "1-alpha-123", "1-m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-m11" ] }, "expected_output": [ "1-alpha-123", "1-m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-rc" ] }, "expected_output": [ "1-alpha-123", "1-rc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-cr2" ] }, "expected_output": [ "1-alpha-123", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-rc123" ] }, "expected_output": [ "1-alpha-123", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-alpha-123" ] }, "expected_output": [ "1-alpha-123", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-alpha-123" ] }, "expected_output": [ "1-alpha-123", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-sp" ] }, "expected_output": [ "1-alpha-123", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-sp2" ] }, "expected_output": [ "1-alpha-123", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-sp123" ] }, "expected_output": [ "1-alpha-123", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-alpha-123" ] }, "expected_output": [ "1-alpha-123", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-def" ] }, "expected_output": [ "1-alpha-123", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-alpha-123", "1-pom-1" ] }, "expected_output": [ "1-alpha-123", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-alpha-123" ] }, "expected_output": [ "1-alpha-123", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-alpha-123" ] }, "expected_output": [ "1-alpha-123", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-alpha-123" ] }, "expected_output": [ "1-alpha-123", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-alpha-123" ] }, "expected_output": [ "1-alpha-123", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-beta123" ] }, "expected_output": [ "1-beta-2", "1-beta123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-m2" ] }, "expected_output": [ "1-beta-2", "1-m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-m11" ] }, "expected_output": [ "1-beta-2", "1-m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-rc" ] }, "expected_output": [ "1-beta-2", "1-rc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-cr2" ] }, "expected_output": [ "1-beta-2", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-rc123" ] }, "expected_output": [ "1-beta-2", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-beta-2" ] }, "expected_output": [ "1-beta-2", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-beta-2" ] }, "expected_output": [ "1-beta-2", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-sp" ] }, "expected_output": [ "1-beta-2", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-sp2" ] }, "expected_output": [ "1-beta-2", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-sp123" ] }, "expected_output": [ "1-beta-2", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-beta-2" ] }, "expected_output": [ "1-beta-2", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-def" ] }, "expected_output": [ "1-beta-2", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta-2", "1-pom-1" ] }, "expected_output": [ "1-beta-2", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-beta-2" ] }, "expected_output": [ "1-beta-2", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-beta-2" ] }, "expected_output": [ "1-beta-2", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-beta-2" ] }, "expected_output": [ "1-beta-2", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-beta-2" ] }, "expected_output": [ "1-beta-2", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-m2" ] }, "expected_output": [ "1-beta123", "1-m2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-m11" ] }, "expected_output": [ "1-beta123", "1-m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-rc" ] }, "expected_output": [ "1-beta123", "1-rc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-cr2" ] }, "expected_output": [ "1-beta123", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-rc123" ] }, "expected_output": [ "1-beta123", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-beta123" ] }, "expected_output": [ "1-beta123", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-beta123" ] }, "expected_output": [ "1-beta123", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-sp" ] }, "expected_output": [ "1-beta123", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-sp2" ] }, "expected_output": [ "1-beta123", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-sp123" ] }, "expected_output": [ "1-beta123", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-beta123" ] }, "expected_output": [ "1-beta123", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-def" ] }, "expected_output": [ "1-beta123", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-beta123", "1-pom-1" ] }, "expected_output": [ "1-beta123", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-beta123" ] }, "expected_output": [ "1-beta123", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-beta123" ] }, "expected_output": [ "1-beta123", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-beta123" ] }, "expected_output": [ "1-beta123", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-beta123" ] }, "expected_output": [ "1-beta123", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m11", "1-m2" ] }, "expected_output": [ "1-m2", "1-m11" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m2", "1-rc" ] }, "expected_output": [ "1-m2", "1-rc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-m2" ] }, "expected_output": [ "1-m2", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m2", "1-rc123" ] }, "expected_output": [ "1-m2", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-m2" ] }, "expected_output": [ "1-m2", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-m2" ] }, "expected_output": [ "1-m2", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m2", "1-sp" ] }, "expected_output": [ "1-m2", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m2", "1-sp2" ] }, "expected_output": [ "1-m2", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m2", "1-sp123" ] }, "expected_output": [ "1-m2", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-m2" ] }, "expected_output": [ "1-m2", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-m2" ] }, "expected_output": [ "1-m2", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m2", "1-pom-1" ] }, "expected_output": [ "1-m2", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-m2" ] }, "expected_output": [ "1-m2", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-m2" ] }, "expected_output": [ "1-m2", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-m2" ] }, "expected_output": [ "1-m2", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-m2" ] }, "expected_output": [ "1-m2", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m11", "1-rc" ] }, "expected_output": [ "1-m11", "1-rc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-m11" ] }, "expected_output": [ "1-m11", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m11", "1-rc123" ] }, "expected_output": [ "1-m11", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-m11" ] }, "expected_output": [ "1-m11", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-m11" ] }, "expected_output": [ "1-m11", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m11", "1-sp" ] }, "expected_output": [ "1-m11", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m11", "1-sp2" ] }, "expected_output": [ "1-m11", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m11", "1-sp123" ] }, "expected_output": [ "1-m11", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-m11" ] }, "expected_output": [ "1-m11", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-m11" ] }, "expected_output": [ "1-m11", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-m11", "1-pom-1" ] }, "expected_output": [ "1-m11", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-m11" ] }, "expected_output": [ "1-m11", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-m11" ] }, "expected_output": [ "1-m11", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-m11" ] }, "expected_output": [ "1-m11", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-m11" ] }, "expected_output": [ "1-m11", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-rc" ] }, "expected_output": [ "1-rc", "1-cr2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-rc", "1-rc123" ] }, "expected_output": [ "1-rc", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-rc" ] }, "expected_output": [ "1-rc", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-rc" ] }, "expected_output": [ "1-rc", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-rc", "1-sp" ] }, "expected_output": [ "1-rc", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-rc", "1-sp2" ] }, "expected_output": [ "1-rc", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-rc", "1-sp123" ] }, "expected_output": [ "1-rc", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-rc" ] }, "expected_output": [ "1-rc", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-rc" ] }, "expected_output": [ "1-rc", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-pom-1", "1-rc" ] }, "expected_output": [ "1-rc", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-rc" ] }, "expected_output": [ "1-rc", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-rc" ] }, "expected_output": [ "1-rc", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-rc" ] }, "expected_output": [ "1-rc", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-rc" ] }, "expected_output": [ "1-rc", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-rc123" ] }, "expected_output": [ "1-cr2", "1-rc123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-cr2" ] }, "expected_output": [ "1-cr2", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-cr2" ] }, "expected_output": [ "1-cr2", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-sp" ] }, "expected_output": [ "1-cr2", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-sp2" ] }, "expected_output": [ "1-cr2", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-sp123" ] }, "expected_output": [ "1-cr2", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-cr2" ] }, "expected_output": [ "1-cr2", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-def" ] }, "expected_output": [ "1-cr2", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-cr2", "1-pom-1" ] }, "expected_output": [ "1-cr2", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-cr2" ] }, "expected_output": [ "1-cr2", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-cr2" ] }, "expected_output": [ "1-cr2", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-cr2" ] }, "expected_output": [ "1-cr2", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-cr2" ] }, "expected_output": [ "1-cr2", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-SNAPSHOT" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-rc123" ] }, "expected_output": [ "1-rc123", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-rc123", "1-sp" ] }, "expected_output": [ "1-rc123", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-rc123", "1-sp2" ] }, "expected_output": [ "1-rc123", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-rc123", "1-sp123" ] }, "expected_output": [ "1-rc123", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-pom-1", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-rc123" ] }, "expected_output": [ "1-rc123", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-SNAPSHOT" ] }, "expected_output": [ "1-SNAPSHOT", "1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-sp" ] }, "expected_output": [ "1-SNAPSHOT", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-sp2" ] }, "expected_output": [ "1-SNAPSHOT", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-sp123" ] }, "expected_output": [ "1-SNAPSHOT", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-abc" ] }, "expected_output": [ "1-SNAPSHOT", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-def" ] }, "expected_output": [ "1-SNAPSHOT", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-SNAPSHOT", "1-pom-1" ] }, "expected_output": [ "1-SNAPSHOT", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-SNAPSHOT" ] }, "expected_output": [ "1-SNAPSHOT", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-SNAPSHOT" ] }, "expected_output": [ "1-SNAPSHOT", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-SNAPSHOT" ] }, "expected_output": [ "1-SNAPSHOT", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-SNAPSHOT" ] }, "expected_output": [ "1-SNAPSHOT", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-sp" ] }, "expected_output": [ "1", "1-sp" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-sp2" ] }, "expected_output": [ "1", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-sp123" ] }, "expected_output": [ "1", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-abc" ] }, "expected_output": [ "1", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-def" ] }, "expected_output": [ "1", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-pom-1" ] }, "expected_output": [ "1", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-1-snapshot" ] }, "expected_output": [ "1", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-1" ] }, "expected_output": [ "1", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-2" ] }, "expected_output": [ "1", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1", "1-123" ] }, "expected_output": [ "1", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-sp", "1-sp2" ] }, "expected_output": [ "1-sp", "1-sp2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-sp", "1-sp123" ] }, "expected_output": [ "1-sp", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-sp" ] }, "expected_output": [ "1-sp", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-sp" ] }, "expected_output": [ "1-sp", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-pom-1", "1-sp" ] }, "expected_output": [ "1-sp", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-sp" ] }, "expected_output": [ "1-sp", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-sp" ] }, "expected_output": [ "1-sp", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-sp" ] }, "expected_output": [ "1-sp", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-sp" ] }, "expected_output": [ "1-sp", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-sp123", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-sp123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-pom-1", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-sp2" ] }, "expected_output": [ "1-sp2", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-sp123" ] }, "expected_output": [ "1-sp123", "1-abc" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-sp123" ] }, "expected_output": [ "1-sp123", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-pom-1", "1-sp123" ] }, "expected_output": [ "1-sp123", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-sp123" ] }, "expected_output": [ "1-sp123", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-sp123" ] }, "expected_output": [ "1-sp123", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-sp123" ] }, "expected_output": [ "1-sp123", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-sp123" ] }, "expected_output": [ "1-sp123", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-def" ] }, "expected_output": [ "1-abc", "1-def" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-abc", "1-pom-1" ] }, "expected_output": [ "1-abc", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-abc" ] }, "expected_output": [ "1-abc", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-abc" ] }, "expected_output": [ "1-abc", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-abc" ] }, "expected_output": [ "1-abc", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-abc" ] }, "expected_output": [ "1-abc", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-def", "1-pom-1" ] }, "expected_output": [ "1-def", "1-pom-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-def" ] }, "expected_output": [ "1-def", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-def" ] }, "expected_output": [ "1-def", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-def" ] }, "expected_output": [ "1-def", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-def" ] }, "expected_output": [ "1-def", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-pom-1" ] }, "expected_output": [ "1-pom-1", "1-1-snapshot" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-pom-1" ] }, "expected_output": [ "1-pom-1", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-2", "1-pom-1" ] }, "expected_output": [ "1-pom-1", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-pom-1" ] }, "expected_output": [ "1-pom-1", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-1-snapshot" ] }, "expected_output": [ "1-1-snapshot", "1-1" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-2" ] }, "expected_output": [ "1-1-snapshot", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1-snapshot", "1-123" ] }, "expected_output": [ "1-1-snapshot", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-2" ] }, "expected_output": [ "1-1", "1-2" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-1", "1-123" ] }, "expected_output": [ "1-1", "1-123" ] }, { "description": "Comparison test for Maven version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "maven", "versions": [ "1-123", "1-2" ] }, "expected_output": [ "1-2", "1-123" ] } ] } URI-PackageURL-2.26/t/vers/alpine_version_cmp_test.json0000644000175000017500000072761515264504421022077 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.34", "0.1.0_alpha" ] }, "expected_output": [ "0.1.0_alpha", "2.34" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "0.1.0_alpha", "0.1.0_alpha" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.0_alpha", "0.1.3_alpha" ] }, "expected_output": [ "0.1.0_alpha", "0.1.3_alpha" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.3_alpha", "0.1.0_alpha" ] }, "expected_output": [ "0.1.0_alpha", "0.1.3_alpha" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.0_alpha2", "0.1.0_alpha" ] }, "expected_output": [ "0.1.0_alpha", "0.1.0_alpha2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.0_alpha", "2.2.39-r1" ] }, "expected_output": [ "0.1.0_alpha", "2.2.39-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.2.39-r1", "1.0.4-r3" ] }, "expected_output": [ "1.0.4-r3", "2.2.39-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.4-r3", "1.0.4-r4" ] }, "expected_output": [ "1.0.4-r3", "1.0.4-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.4-r4", "1.6" ] }, "expected_output": [ "1.0.4-r4", "1.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "0.7-r1" ] }, "expected_output": [ "0.7-r1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7-r1", "1.0.0" ] }, "expected_output": [ "0.7-r1", "1.0.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.0", "1.0.1" ] }, "expected_output": [ "1.0.0", "1.0.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.1" ] }, "expected_output": [ "1.0.1", "1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1", "1.1_alpha1" ] }, "expected_output": [ "1.1_alpha1", "1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1_alpha1", "1.2.1" ] }, "expected_output": [ "1.1_alpha1", "1.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.1", "1.2" ] }, "expected_output": [ "1.2", "1.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2", "1.3_alpha" ] }, "expected_output": [ "1.2", "1.3_alpha" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3_alpha", "1.3_alpha2" ] }, "expected_output": [ "1.3_alpha", "1.3_alpha2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3_alpha2", "1.3_alpha3" ] }, "expected_output": [ "1.3_alpha2", "1.3_alpha3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3_alpha8", "0.6.0" ] }, "expected_output": [ "0.6.0", "1.3_alpha8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6.0", "0.6.1" ] }, "expected_output": [ "0.6.0", "0.6.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6.1", "0.7.0" ] }, "expected_output": [ "0.6.1", "0.7.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7.0", "0.8_beta1" ] }, "expected_output": [ "0.7.0", "0.8_beta1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8_beta1", "0.8_beta2" ] }, "expected_output": [ "0.8_beta1", "0.8_beta2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8_beta4", "4.8-r1" ] }, "expected_output": [ "0.8_beta4", "4.8-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.8-r1", "3.10.18-r1" ] }, "expected_output": [ "3.10.18-r1", "4.8-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.10.18-r1", "2.3.0b-r1" ] }, "expected_output": [ "2.3.0b-r1", "3.10.18-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.0b-r1", "2.3.0b-r2" ] }, "expected_output": [ "2.3.0b-r1", "2.3.0b-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.0b-r2", "2.3.0b-r3" ] }, "expected_output": [ "2.3.0b-r2", "2.3.0b-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.0b-r3", "2.3.0b-r4" ] }, "expected_output": [ "2.3.0b-r3", "2.3.0b-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.0b-r4", "0.12.1" ] }, "expected_output": [ "0.12.1", "2.3.0b-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.12.1", "0.12.2" ] }, "expected_output": [ "0.12.1", "0.12.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.12.2", "0.12.3" ] }, "expected_output": [ "0.12.2", "0.12.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.12.3", "0.12" ] }, "expected_output": [ "0.12", "0.12.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.12", "0.13_beta1" ] }, "expected_output": [ "0.12", "0.13_beta1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.13_beta1", "0.13_beta2" ] }, "expected_output": [ "0.13_beta1", "0.13_beta2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.13_beta2", "0.13_beta3" ] }, "expected_output": [ "0.13_beta2", "0.13_beta3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.13_beta3", "0.13_beta4" ] }, "expected_output": [ "0.13_beta3", "0.13_beta4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.13_beta4", "0.13_beta5" ] }, "expected_output": [ "0.13_beta4", "0.13_beta5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.13_beta5", "0.9.12" ] }, "expected_output": [ "0.9.12", "0.13_beta5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.12", "0.9.13" ] }, "expected_output": [ "0.9.12", "0.9.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.13", "0.9.12" ] }, "expected_output": [ "0.9.12", "0.9.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.12", "0.9.13" ] }, "expected_output": [ "0.9.12", "0.9.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.13", "0.0.16" ] }, "expected_output": [ "0.0.16", "0.9.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.0.16", "0.6" ] }, "expected_output": [ "0.0.16", "0.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6", "2.1.13-r3" ] }, "expected_output": [ "0.6", "2.1.13-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.13-r3", "2.1.15-r2" ] }, "expected_output": [ "2.1.13-r3", "2.1.15-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.15-r2", "2.1.15-r3" ] }, "expected_output": [ "2.1.15-r2", "2.1.15-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.15-r3", "1.2.11" ] }, "expected_output": [ "1.2.11", "2.1.15-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.11", "1.2.12.1" ] }, "expected_output": [ "1.2.11", "1.2.12.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.12.1", "1.2.13" ] }, "expected_output": [ "1.2.12.1", "1.2.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.13", "1.2.14-r1" ] }, "expected_output": [ "1.2.13", "1.2.14-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.14-r1", "0.7.1" ] }, "expected_output": [ "0.7.1", "1.2.14-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7.1", "0.5.4" ] }, "expected_output": [ "0.5.4", "0.7.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.5.4", "0.7.0" ] }, "expected_output": [ "0.5.4", "0.7.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7.0", "1.2.13" ] }, "expected_output": [ "0.7.0", "1.2.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.13", "1.0.8" ] }, "expected_output": [ "1.0.8", "1.2.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.8", "1.2.1" ] }, "expected_output": [ "1.0.8", "1.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.1", "0.7-r1" ] }, "expected_output": [ "0.7-r1", "1.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7-r1", "2.4.32" ] }, "expected_output": [ "0.7-r1", "2.4.32" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.32", "2.8-r4" ] }, "expected_output": [ "2.4.32", "2.8-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8-r4", "0.9.6" ] }, "expected_output": [ "0.9.6", "2.8-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.6", "0.2.0-r1" ] }, "expected_output": [ "0.2.0-r1", "0.9.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "0.2.0-r1", "0.2.0-r1" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.0-r1", "3.1_p16" ] }, "expected_output": [ "0.2.0-r1", "3.1_p16" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.1_p16", "3.1_p17" ] }, "expected_output": [ "3.1_p16", "3.1_p17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.1_p17", "1.06-r6" ] }, "expected_output": [ "1.06-r6", "3.1_p17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.0", "1.2.2-r1" ] }, "expected_output": [ "1.0.0", "1.2.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.2-r1", "1.2.2" ] }, "expected_output": [ "1.2.2", "1.2.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.2", "0.3-r1" ] }, "expected_output": [ "0.3-r1", "1.2.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3-r1", "9.3.2-r4" ] }, "expected_output": [ "0.3-r1", "9.3.2-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "9.3.2-r4", "9.3.4-r2" ] }, "expected_output": [ "9.3.2-r4", "9.3.4-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "9.3.4-r2", "9.3.4" ] }, "expected_output": [ "9.3.4", "9.3.4-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "9.3.4", "9.3.2" ] }, "expected_output": [ "9.3.2", "9.3.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "9.3.2", "9.3.4" ] }, "expected_output": [ "9.3.2", "9.3.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "9.3.4", "1.1.3" ] }, "expected_output": [ "1.1.3", "9.3.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.3", "2.16.1-r3" ] }, "expected_output": [ "1.1.3", "2.16.1-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "2.16.1-r3", "2.16.1-r3" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.16.1-r3", "2.1.0-r2" ] }, "expected_output": [ "2.1.0-r2", "2.16.1-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.0-r2", "2.9.3-r1" ] }, "expected_output": [ "2.1.0-r2", "2.9.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.9.3-r1", "0.9-r1" ] }, "expected_output": [ "0.9-r1", "2.9.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9-r1", "0.8-r1" ] }, "expected_output": [ "0.8-r1", "0.9-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8-r1", "1.0.6-r3" ] }, "expected_output": [ "0.8-r1", "1.0.6-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.6-r3", "0.11" ] }, "expected_output": [ "0.11", "1.0.6-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.11", "0.12" ] }, "expected_output": [ "0.11", "0.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.12", "1.2.1-r1" ] }, "expected_output": [ "0.12", "1.2.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.1-r1", "1.2.2.1" ] }, "expected_output": [ "1.2.1-r1", "1.2.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.2.1", "1.4.1-r1" ] }, "expected_output": [ "1.2.2.1", "1.4.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4.1-r1", "1.4.1-r2" ] }, "expected_output": [ "1.4.1-r1", "1.4.1-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4.1-r2", "1.2.2" ] }, "expected_output": [ "1.2.2", "1.4.1-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.2", "1.3" ] }, "expected_output": [ "1.2.2", "1.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3", "1.0.3-r6" ] }, "expected_output": [ "1.0.3-r6", "1.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.3-r6", "1.0.4" ] }, "expected_output": [ "1.0.3-r6", "1.0.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.4", "2.59" ] }, "expected_output": [ "1.0.4", "2.59" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.59", "20050718-r1" ] }, "expected_output": [ "2.59", "20050718-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20050718-r1", "20050718-r2" ] }, "expected_output": [ "20050718-r1", "20050718-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20050718-r2", "3.9.8-r5" ] }, "expected_output": [ "3.9.8-r5", "20050718-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.9.8-r5", "2.01.01_alpha10" ] }, "expected_output": [ "2.01.01_alpha10", "3.9.8-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.01.01_alpha10", "0.94" ] }, "expected_output": [ "0.94", "2.01.01_alpha10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.94", "1.0" ] }, "expected_output": [ "0.94", "1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0", "0.99.3.20040818" ] }, "expected_output": [ "0.99.3.20040818", "1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.99.3.20040818", "0.7" ] }, "expected_output": [ "0.7", "0.99.3.20040818" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7", "1.21-r1" ] }, "expected_output": [ "0.7", "1.21-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.21-r1", "0.13" ] }, "expected_output": [ "0.13", "1.21-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.13", "0.90.1-r1" ] }, "expected_output": [ "0.13", "0.90.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.90.1-r1", "0.10.2" ] }, "expected_output": [ "0.10.2", "0.90.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.10.2", "0.10.3" ] }, "expected_output": [ "0.10.2", "0.10.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.10.3", "1.6" ] }, "expected_output": [ "0.10.3", "1.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6", "1.39" ] }, "expected_output": [ "1.6", "1.39" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.39", "1.00_beta2" ] }, "expected_output": [ "1.00_beta2", "1.39" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.00_beta2", "0.9.2" ] }, "expected_output": [ "0.9.2", "1.00_beta2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.2", "5.94-r1" ] }, "expected_output": [ "0.9.2", "5.94-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.94-r1", "6.4" ] }, "expected_output": [ "5.94-r1", "6.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.4", "2.6-r5" ] }, "expected_output": [ "2.6-r5", "6.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6-r5", "1.4" ] }, "expected_output": [ "1.4", "2.6-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4", "2.8.9-r1" ] }, "expected_output": [ "1.4", "2.8.9-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.9-r1", "2.8.9" ] }, "expected_output": [ "2.8.9", "2.8.9-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.9", "1.1" ] }, "expected_output": [ "1.1", "2.8.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1", "1.0.3-r2" ] }, "expected_output": [ "1.0.3-r2", "1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.3-r2", "1.3.4-r3" ] }, "expected_output": [ "1.0.3-r2", "1.3.4-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.4-r3", "2.2" ] }, "expected_output": [ "1.3.4-r3", "2.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.2", "1.2.6" ] }, "expected_output": [ "1.2.6", "2.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.6", "7.15.1-r1" ] }, "expected_output": [ "1.2.6", "7.15.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "7.15.1-r1", "1.02" ] }, "expected_output": [ "1.02", "7.15.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.02", "1.03-r1" ] }, "expected_output": [ "1.02", "1.03-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.03-r1", "1.12.12-r2" ] }, "expected_output": [ "1.03-r1", "1.12.12-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.12.12-r2", "2.8.0.6-r1" ] }, "expected_output": [ "1.12.12-r2", "2.8.0.6-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.0.6-r1", "0.5.2.7" ] }, "expected_output": [ "0.5.2.7", "2.8.0.6-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.5.2.7", "4.2.52_p2-r1" ] }, "expected_output": [ "0.5.2.7", "4.2.52_p2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.2.52_p2-r1", "4.2.52_p4-r2" ] }, "expected_output": [ "4.2.52_p2-r1", "4.2.52_p4-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.2.52_p4-r2", "1.02.07" ] }, "expected_output": [ "1.02.07", "4.2.52_p4-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.02.07", "1.02.10-r1" ] }, "expected_output": [ "1.02.07", "1.02.10-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.02.10-r1", "3.0.3-r9" ] }, "expected_output": [ "1.02.10-r1", "3.0.3-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.0.3-r9", "2.0.5-r1" ] }, "expected_output": [ "2.0.5-r1", "3.0.3-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.5-r1", "4.5" ] }, "expected_output": [ "2.0.5-r1", "4.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.5", "2.8.7-r1" ] }, "expected_output": [ "2.8.7-r1", "4.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.7-r1", "1.0.5" ] }, "expected_output": [ "1.0.5", "2.8.7-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.5", "8" ] }, "expected_output": [ "1.0.5", "8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8", "9" ] }, "expected_output": [ "8", "9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "9", "2.18.3-r10" ] }, "expected_output": [ "2.18.3-r10", "9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.18.3-r10", "1.05-r18" ] }, "expected_output": [ "1.05-r18", "2.18.3-r10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.05-r18", "1.05-r19" ] }, "expected_output": [ "1.05-r18", "1.05-r19" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.05-r19", "2.2.5" ] }, "expected_output": [ "1.05-r19", "2.2.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.2.5", "2.8" ] }, "expected_output": [ "2.2.5", "2.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8", "2.20.1" ] }, "expected_output": [ "2.8", "2.20.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.20.1", "2.20.3" ] }, "expected_output": [ "2.20.1", "2.20.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.20.3", "2.31" ] }, "expected_output": [ "2.20.3", "2.31" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.31", "2.34" ] }, "expected_output": [ "2.31", "2.34" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.34", "2.38" ] }, "expected_output": [ "2.34", "2.38" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.38", "20050405" ] }, "expected_output": [ "2.38", "20050405" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20050405", "1.8" ] }, "expected_output": [ "1.8", "20050405" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.8", "2.11-r1" ] }, "expected_output": [ "1.8", "2.11-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.11-r1", "2.11" ] }, "expected_output": [ "2.11", "2.11-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.11", "0.1.6-r3" ] }, "expected_output": [ "0.1.6-r3", "2.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.6-r3", "0.47-r1" ] }, "expected_output": [ "0.1.6-r3", "0.47-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.47-r1", "0.49" ] }, "expected_output": [ "0.47-r1", "0.49" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.49", "3.6.8-r2" ] }, "expected_output": [ "0.49", "3.6.8-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.6.8-r2", "1.39" ] }, "expected_output": [ "1.39", "3.6.8-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.39", "2.43" ] }, "expected_output": [ "1.39", "2.43" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.43", "2.0.6-r1" ] }, "expected_output": [ "2.0.6-r1", "2.43" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.6-r1", "0.2-r6" ] }, "expected_output": [ "0.2-r6", "2.0.6-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2-r6", "0.4" ] }, "expected_output": [ "0.2-r6", "0.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.4", "1.0.0" ] }, "expected_output": [ "0.4", "1.0.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.0", "10-r1" ] }, "expected_output": [ "1.0.0", "10-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "10-r1", "4" ] }, "expected_output": [ "4", "10-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4", "0.7.3-r2" ] }, "expected_output": [ "0.7.3-r2", "4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7.3-r2", "0.7.3" ] }, "expected_output": [ "0.7.3", "0.7.3-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7.3", "1.95.8" ] }, "expected_output": [ "0.7.3", "1.95.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.95.8", "1.1.19" ] }, "expected_output": [ "1.1.19", "1.95.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.19", "1.1.5" ] }, "expected_output": [ "1.1.5", "1.1.19" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.5", "6.3.2-r1" ] }, "expected_output": [ "1.1.5", "6.3.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.3.2-r1", "6.3.3" ] }, "expected_output": [ "6.3.2-r1", "6.3.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.3.3", "4.17-r1" ] }, "expected_output": [ "4.17-r1", "6.3.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.17-r1", "4.18" ] }, "expected_output": [ "4.17-r1", "4.18" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.18", "4.19" ] }, "expected_output": [ "4.18", "4.19" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.19", "4.3.0" ] }, "expected_output": [ "4.3.0", "4.19" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.3.0", "4.3.2-r1" ] }, "expected_output": [ "4.3.0", "4.3.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.3.2-r1", "4.3.2" ] }, "expected_output": [ "4.3.2", "4.3.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.3.2", "0.68-r3" ] }, "expected_output": [ "0.68-r3", "4.3.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.68-r3", "1.0.0" ] }, "expected_output": [ "0.68-r3", "1.0.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.0", "1.0.1" ] }, "expected_output": [ "1.0.0", "1.0.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.0" ] }, "expected_output": [ "1.0.0", "1.0.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.0.0", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.0", "1.0.1" ] }, "expected_output": [ "1.0.0", "1.0.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "2.3.2-r1" ] }, "expected_output": [ "1.0.1", "2.3.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.2-r1", "2.4.2" ] }, "expected_output": [ "2.3.2-r1", "2.4.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.2", "20060720" ] }, "expected_output": [ "2.4.2", "20060720" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20060720", "3.0.20060720" ] }, "expected_output": [ "3.0.20060720", "20060720" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.0.20060720", "20060720" ] }, "expected_output": [ "3.0.20060720", "20060720" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20060720", "1.1" ] }, "expected_output": [ "1.1", "20060720" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.1", "1.1" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1", "1.1.1-r1" ] }, "expected_output": [ "1.1", "1.1.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1-r1", "1.1.3-r1" ] }, "expected_output": [ "1.1.1-r1", "1.1.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.3-r1", "1.1.3-r2" ] }, "expected_output": [ "1.1.3-r1", "1.1.3-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.3-r2", "2.1.10-r2" ] }, "expected_output": [ "1.1.3-r2", "2.1.10-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.10-r2", "0.7.18-r2" ] }, "expected_output": [ "0.7.18-r2", "2.1.10-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7.18-r2", "0.17-r6" ] }, "expected_output": [ "0.7.18-r2", "0.17-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.17-r6", "2.6.1" ] }, "expected_output": [ "0.17-r6", "2.6.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.1", "2.6.3" ] }, "expected_output": [ "2.6.1", "2.6.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.3", "3.1.5-r2" ] }, "expected_output": [ "2.6.3", "3.1.5-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.1.5-r2", "3.4.6-r1" ] }, "expected_output": [ "3.1.5-r2", "3.4.6-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.4.6-r1", "3.4.6-r2" ] }, "expected_output": [ "3.4.6-r1", "3.4.6-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "3.4.6-r2", "3.4.6-r2" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.4.6-r2", "2.0.33" ] }, "expected_output": [ "2.0.33", "3.4.6-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.33", "2.0.34" ] }, "expected_output": [ "2.0.33", "2.0.34" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.34", "1.8.3-r2" ] }, "expected_output": [ "1.8.3-r2", "2.0.34" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.8.3-r2", "1.8.3-r3" ] }, "expected_output": [ "1.8.3-r2", "1.8.3-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.8.3-r3", "4.1" ] }, "expected_output": [ "1.8.3-r3", "4.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1", "8.54" ] }, "expected_output": [ "4.1", "8.54" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.54", "4.1.4" ] }, "expected_output": [ "4.1.4", "8.54" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1.4", "1.2.10-r5" ] }, "expected_output": [ "1.2.10-r5", "4.1.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.10-r5", "4.1.4-r3" ] }, "expected_output": [ "1.2.10-r5", "4.1.4-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "4.1.4-r3", "4.1.4-r3" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1.4-r3", "4.2.1" ] }, "expected_output": [ "4.1.4-r3", "4.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.2.1", "4.1.0" ] }, "expected_output": [ "4.1.0", "4.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1.0", "8.11" ] }, "expected_output": [ "4.1.0", "8.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.11", "1.4.4-r1" ] }, "expected_output": [ "1.4.4-r1", "8.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4.4-r1", "2.1.9.200602141850" ] }, "expected_output": [ "1.4.4-r1", "2.1.9.200602141850" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.9.200602141850", "1.6" ] }, "expected_output": [ "1.6", "2.1.9.200602141850" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6", "2.5.1-r8" ] }, "expected_output": [ "1.6", "2.5.1-r8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.5.1-r8", "2.5.1a-r1" ] }, "expected_output": [ "2.5.1-r8", "2.5.1a-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.5.1a-r1", "1.19.2-r1" ] }, "expected_output": [ "1.19.2-r1", "2.5.1a-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.19.2-r1", "0.97-r2" ] }, "expected_output": [ "0.97-r2", "1.19.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.97-r2", "0.97-r3" ] }, "expected_output": [ "0.97-r2", "0.97-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.97-r3", "1.3.5-r10" ] }, "expected_output": [ "0.97-r3", "1.3.5-r10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.5-r10", "1.3.5-r8" ] }, "expected_output": [ "1.3.5-r8", "1.3.5-r10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.5-r8", "1.3.5-r9" ] }, "expected_output": [ "1.3.5-r8", "1.3.5-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.5-r9", "1.0" ] }, "expected_output": [ "1.0", "1.3.5-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0", "1.1" ] }, "expected_output": [ "1.0", "1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1", "0.9.11" ] }, "expected_output": [ "0.9.11", "1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.11", "0.9.12" ] }, "expected_output": [ "0.9.11", "0.9.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.12", "0.9.13" ] }, "expected_output": [ "0.9.12", "0.9.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.13", "0.9.14" ] }, "expected_output": [ "0.9.13", "0.9.14" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.14", "0.9.15" ] }, "expected_output": [ "0.9.14", "0.9.15" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.15", "0.9.16" ] }, "expected_output": [ "0.9.15", "0.9.16" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.16", "0.3-r2" ] }, "expected_output": [ "0.3-r2", "0.9.16" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3-r2", "6.3" ] }, "expected_output": [ "0.3-r2", "6.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.3", "6.6" ] }, "expected_output": [ "6.3", "6.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.6", "6.9" ] }, "expected_output": [ "6.6", "6.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.9", "0.7.2-r3" ] }, "expected_output": [ "0.7.2-r3", "6.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.7.2-r3", "1.2.10" ] }, "expected_output": [ "0.7.2-r3", "1.2.10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.10", "20040923-r2" ] }, "expected_output": [ "1.2.10", "20040923-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20040923-r2", "20040401" ] }, "expected_output": [ "20040401", "20040923-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20040401", "2.0.0_rc3-r1" ] }, "expected_output": [ "2.0.0_rc3-r1", "20040401" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.0_rc3-r1", "1.5" ] }, "expected_output": [ "1.5", "2.0.0_rc3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.5", "4.4" ] }, "expected_output": [ "1.5", "4.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.4", "1.0.1" ] }, "expected_output": [ "1.0.1", "4.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "2.2.0" ] }, "expected_output": [ "1.0.1", "2.2.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.2.0", "1.1.0-r2" ] }, "expected_output": [ "1.1.0-r2", "2.2.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0-r2", "0.3" ] }, "expected_output": [ "0.3", "1.1.0-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3", "20020207-r2" ] }, "expected_output": [ "0.3", "20020207-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20020207-r2", "1.31-r2" ] }, "expected_output": [ "1.31-r2", "20020207-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.31-r2", "3.7" ] }, "expected_output": [ "1.31-r2", "3.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.7", "2.0.1" ] }, "expected_output": [ "2.0.1", "3.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.1", "2.0.2" ] }, "expected_output": [ "2.0.1", "2.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.2", "0.99.163" ] }, "expected_output": [ "0.99.163", "2.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.99.163", "2.6.15.20060110" ] }, "expected_output": [ "0.99.163", "2.6.15.20060110" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.15.20060110", "2.6.16.20060323" ] }, "expected_output": [ "2.6.15.20060110", "2.6.16.20060323" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.16.20060323", "2.6.19.20061214" ] }, "expected_output": [ "2.6.16.20060323", "2.6.19.20061214" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.19.20061214", "0.6.2-r1" ] }, "expected_output": [ "0.6.2-r1", "2.6.19.20061214" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6.2-r1", "0.6.3" ] }, "expected_output": [ "0.6.2-r1", "0.6.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6.3", "0.6.5" ] }, "expected_output": [ "0.6.3", "0.6.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6.5", "1.3.5-r1" ] }, "expected_output": [ "0.6.5", "1.3.5-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.5-r1", "1.3.5-r4" ] }, "expected_output": [ "1.3.5-r1", "1.3.5-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.5-r4", "3.0.0-r2" ] }, "expected_output": [ "1.3.5-r4", "3.0.0-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20060512", "1.24" ] }, "expected_output": [ "1.24", "20060512" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.24", "0.9.16-r1" ] }, "expected_output": [ "0.9.16-r1", "1.24" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.16-r1", "3.9_pre20060124" ] }, "expected_output": [ "0.9.16-r1", "3.9_pre20060124" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.9_pre20060124", "0.01" ] }, "expected_output": [ "0.01", "3.9_pre20060124" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.01", "0.06" ] }, "expected_output": [ "0.01", "0.06" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.06", "1.1.7" ] }, "expected_output": [ "0.06", "1.1.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.7", "6b-r7" ] }, "expected_output": [ "1.1.7", "6b-r7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6b-r7", "1.12-r7" ] }, "expected_output": [ "1.12-r7", "6b-r7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.12-r7", "1.12-r8" ] }, "expected_output": [ "1.12-r7", "1.12-r8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.12-r8", "1.1.12" ] }, "expected_output": [ "1.1.12", "1.12-r8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.12", "1.1.13" ] }, "expected_output": [ "1.1.12", "1.1.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.13", "0.3" ] }, "expected_output": [ "0.3", "1.1.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3", "0.5" ] }, "expected_output": [ "0.3", "0.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.5", "3.96.1" ] }, "expected_output": [ "0.5", "3.96.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.96.1", "3.97" ] }, "expected_output": [ "3.96.1", "3.97" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.97", "0.10.0-r1" ] }, "expected_output": [ "0.10.0-r1", "3.97" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.10.0-r1", "0.10.0" ] }, "expected_output": [ "0.10.0", "0.10.0-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.10.0", "0.10.1_rc1" ] }, "expected_output": [ "0.10.0", "0.10.1_rc1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.10.1_rc1", "0.9.11" ] }, "expected_output": [ "0.9.11", "0.10.1_rc1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.11", "394" ] }, "expected_output": [ "0.9.11", "394" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "394", "2.31" ] }, "expected_output": [ "2.31", "394" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.31", "1.0.1" ] }, "expected_output": [ "1.0.1", "2.31" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.1" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.3" ] }, "expected_output": [ "1.0.1", "1.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.3", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "1.0.2" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "1.0.1" ] }, "expected_output": [ "1.0.1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.1" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.2.2" ] }, "expected_output": [ "1.0.1", "1.2.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.2", "2.1.10" ] }, "expected_output": [ "1.2.2", "2.1.10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.10", "1.0.1" ] }, "expected_output": [ "1.0.1", "2.1.10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.2" ] }, "expected_output": [ "1.0.1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "3.5.5" ] }, "expected_output": [ "1.0.2", "3.5.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.5.5", "1.1.1" ] }, "expected_output": [ "1.1.1", "3.5.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1", "0.9.1" ] }, "expected_output": [ "0.9.1", "1.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.1", "1.0.2" ] }, "expected_output": [ "0.9.1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "1.0.1" ] }, "expected_output": [ "1.0.1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.2" ] }, "expected_output": [ "1.0.1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "1.0.1" ] }, "expected_output": [ "1.0.1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.1" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.0.5" ] }, "expected_output": [ "1.0.1", "1.0.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.5", "0.8.5" ] }, "expected_output": [ "0.8.5", "1.0.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8.5", "0.8.6-r3" ] }, "expected_output": [ "0.8.5", "0.8.6-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8.6-r3", "2.3.17" ] }, "expected_output": [ "0.8.6-r3", "2.3.17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.17", "1.10-r5" ] }, "expected_output": [ "1.10-r5", "2.3.17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.10-r5", "1.10-r9" ] }, "expected_output": [ "1.10-r5", "1.10-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.10-r9", "2.0.2" ] }, "expected_output": [ "1.10-r9", "2.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.2", "1.1a" ] }, "expected_output": [ "1.1a", "2.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1a", "1.3a" ] }, "expected_output": [ "1.1a", "1.3a" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3a", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.3a" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "1.2.2-r1" ] }, "expected_output": [ "1.0.2", "1.2.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.2-r1", "1.0-r1" ] }, "expected_output": [ "1.0-r1", "1.2.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0-r1", "0.15.1b" ] }, "expected_output": [ "0.15.1b", "1.0-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.15.1b", "1.0.1" ] }, "expected_output": [ "0.15.1b", "1.0.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.06-r1" ] }, "expected_output": [ "1.0.1", "1.06-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.06-r1", "1.06-r2" ] }, "expected_output": [ "1.06-r1", "1.06-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.06-r2", "0.15.1b-r2" ] }, "expected_output": [ "0.15.1b-r2", "1.06-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.15.1b-r2", "0.15.1b" ] }, "expected_output": [ "0.15.1b", "0.15.1b-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.15.1b", "2.5.7" ] }, "expected_output": [ "0.15.1b", "2.5.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.5.7", "1.1.2.1-r1" ] }, "expected_output": [ "1.1.2.1-r1", "2.5.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.2.1-r1", "0.0.31" ] }, "expected_output": [ "0.0.31", "1.1.2.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.0.31", "0.0.50" ] }, "expected_output": [ "0.0.31", "0.0.50" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.0.50", "0.0.16" ] }, "expected_output": [ "0.0.16", "0.0.50" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.0.16", "0.0.25" ] }, "expected_output": [ "0.0.16", "0.0.25" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.0.25", "0.17" ] }, "expected_output": [ "0.0.25", "0.17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.17", "0.5.0" ] }, "expected_output": [ "0.5.0", "0.17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.5.0", "1.1.2" ] }, "expected_output": [ "0.5.0", "1.1.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.2", "1.1.3" ] }, "expected_output": [ "1.1.2", "1.1.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.3", "1.1.20" ] }, "expected_output": [ "1.1.3", "1.1.20" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.20", "0.9.4" ] }, "expected_output": [ "0.9.4", "1.1.20" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.4", "0.9.5" ] }, "expected_output": [ "0.9.4", "0.9.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.5", "6.3" ] }, "expected_output": [ "0.9.5", "6.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.3", "6.6" ] }, "expected_output": [ "6.3", "6.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.6", "6.3" ] }, "expected_output": [ "6.3", "6.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.3", "6.6" ] }, "expected_output": [ "6.3", "6.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.6", "1.2.12-r1" ] }, "expected_output": [ "1.2.12-r1", "6.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.12-r1", "1.2.13" ] }, "expected_output": [ "1.2.12-r1", "1.2.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.13", "1.2.14" ] }, "expected_output": [ "1.2.13", "1.2.14" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.14", "1.2.15" ] }, "expected_output": [ "1.2.14", "1.2.15" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.15", "8.0.12" ] }, "expected_output": [ "1.2.15", "8.0.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.0.12", "8.0.9" ] }, "expected_output": [ "8.0.9", "8.0.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.0.9", "1.2.3-r1" ] }, "expected_output": [ "1.2.3-r1", "8.0.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.3-r1", "1.2.4-r1" ] }, "expected_output": [ "1.2.3-r1", "1.2.4-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.4-r1", "0.1" ] }, "expected_output": [ "0.1", "1.2.4-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1", "0.3.5" ] }, "expected_output": [ "0.1", "0.3.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3.5", "1.5.22" ] }, "expected_output": [ "0.3.5", "1.5.22" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.5.22", "0.1.11" ] }, "expected_output": [ "0.1.11", "1.5.22" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.11", "0.1.12" ] }, "expected_output": [ "0.1.11", "0.1.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.12", "1.1.4.1" ] }, "expected_output": [ "0.1.12", "1.1.4.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.4.1", "1.1.0" ] }, "expected_output": [ "1.1.0", "1.1.4.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "1.1.2" ] }, "expected_output": [ "1.1.0", "1.1.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.2", "1.0.3" ] }, "expected_output": [ "1.0.3", "1.1.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.3", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "2.6.26" ] }, "expected_output": [ "1.0.2", "2.6.26" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.26", "2.6.27" ] }, "expected_output": [ "2.6.26", "2.6.27" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.27", "1.1.17" ] }, "expected_output": [ "1.1.17", "2.6.27" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.17", "1.4.11" ] }, "expected_output": [ "1.1.17", "1.4.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4.11", "22.7-r1" ] }, "expected_output": [ "1.4.11", "22.7-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "22.7-r1", "22.7.3-r1" ] }, "expected_output": [ "22.7-r1", "22.7.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "22.7.3-r1", "22.7" ] }, "expected_output": [ "22.7", "22.7.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "22.7", "2.1_pre20" ] }, "expected_output": [ "2.1_pre20", "22.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1_pre20", "2.1_pre26" ] }, "expected_output": [ "2.1_pre20", "2.1_pre26" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1_pre26", "0.2.3-r2" ] }, "expected_output": [ "0.2.3-r2", "2.1_pre26" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.3-r2", "0.2.2" ] }, "expected_output": [ "0.2.2", "0.2.3-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.2", "2.10.0" ] }, "expected_output": [ "0.2.2", "2.10.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.10.0", "2.10.1" ] }, "expected_output": [ "2.10.0", "2.10.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.77", "0.17" ] }, "expected_output": [ "0.17", "4.77" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.17", "5.1.1-r1" ] }, "expected_output": [ "0.17", "5.1.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.1.1-r1", "5.1.1-r2" ] }, "expected_output": [ "5.1.1-r1", "5.1.1-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.1.1-r2", "5.1.1" ] }, "expected_output": [ "5.1.1", "5.1.1-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.1.1", "1.2" ] }, "expected_output": [ "1.2", "5.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2", "5.1" ] }, "expected_output": [ "1.2", "5.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.1", "2.02.06" ] }, "expected_output": [ "2.02.06", "5.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.02.06", "2.02.10" ] }, "expected_output": [ "2.02.06", "2.02.10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.02.10", "2.8.5-r3" ] }, "expected_output": [ "2.02.10", "2.8.5-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.5-r3", "2.8.6-r1" ] }, "expected_output": [ "2.8.5-r3", "2.8.6-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.6-r1", "2.8.6-r2" ] }, "expected_output": [ "2.8.6-r1", "2.8.6-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.6-r2", "2.02-r1" ] }, "expected_output": [ "2.02-r1", "2.8.6-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.02-r1", "1.5.0-r1" ] }, "expected_output": [ "1.5.0-r1", "2.02-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.5.0-r1", "1.5.0" ] }, "expected_output": [ "1.5.0", "1.5.0-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.5.0", "0.9.2" ] }, "expected_output": [ "0.9.2", "1.5.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.2", "8.1.2.20040524-r1" ] }, "expected_output": [ "0.9.2", "8.1.2.20040524-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.1.2.20040524-r1", "8.1.2.20050715-r1" ] }, "expected_output": [ "8.1.2.20040524-r1", "8.1.2.20050715-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.1.2.20050715-r1", "20030215" ] }, "expected_output": [ "8.1.2.20050715-r1", "20030215" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20030215", "3.80-r4" ] }, "expected_output": [ "3.80-r4", "20030215" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.80-r4", "3.81" ] }, "expected_output": [ "3.80-r4", "3.81" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.81", "1.6d" ] }, "expected_output": [ "1.6d", "3.81" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6d", "1.2.07.8" ] }, "expected_output": [ "1.2.07.8", "1.6d" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.07.8", "1.2.12.04" ] }, "expected_output": [ "1.2.07.8", "1.2.12.04" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.12.04", "1.2.12.05" ] }, "expected_output": [ "1.2.12.04", "1.2.12.05" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.12.05", "1.3.3" ] }, "expected_output": [ "1.2.12.05", "1.3.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.3", "2.6.4" ] }, "expected_output": [ "1.3.3", "2.6.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.4", "2.5.2" ] }, "expected_output": [ "2.5.2", "2.6.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.5.2", "2.6.1" ] }, "expected_output": [ "2.5.2", "2.6.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.1", "2.6" ] }, "expected_output": [ "2.6", "2.6.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6", "6.5.1-r1" ] }, "expected_output": [ "2.6", "6.5.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.5.1-r1", "1.1.35-r1" ] }, "expected_output": [ "1.1.35-r1", "6.5.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.35-r1", "1.1.35-r2" ] }, "expected_output": [ "1.1.35-r1", "1.1.35-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.35-r2", "0.9.2" ] }, "expected_output": [ "0.9.2", "1.1.35-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.2", "1.07-r1" ] }, "expected_output": [ "0.9.2", "1.07-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.07-r1", "1.07.5" ] }, "expected_output": [ "1.07-r1", "1.07.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.07.5", "1.07" ] }, "expected_output": [ "1.07", "1.07.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.07", "1.19" ] }, "expected_output": [ "1.07", "1.19" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.19", "2.1-r2" ] }, "expected_output": [ "1.19", "2.1-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1-r2", "2.2" ] }, "expected_output": [ "2.1-r2", "2.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.2", "1.0.4" ] }, "expected_output": [ "1.0.4", "2.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.4", "20060811" ] }, "expected_output": [ "1.0.4", "20060811" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20060811", "20061003" ] }, "expected_output": [ "20060811", "20061003" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20061003", "0.1_pre20060810" ] }, "expected_output": [ "0.1_pre20060810", "20061003" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1_pre20060810", "0.1_pre20060817" ] }, "expected_output": [ "0.1_pre20060810", "0.1_pre20060817" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1_pre20060817", "1.0.3" ] }, "expected_output": [ "0.1_pre20060817", "1.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.3", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "1.0.1" ] }, "expected_output": [ "1.0.1", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "3.2.2-r1" ] }, "expected_output": [ "1.0.1", "3.2.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.2-r1", "3.2.2-r2" ] }, "expected_output": [ "3.2.2-r1", "3.2.2-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.2-r2", "3.3.17" ] }, "expected_output": [ "3.2.2-r2", "3.3.17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.3.17", "0.59s-r11" ] }, "expected_output": [ "0.59s-r11", "3.3.17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.59s-r11", "0.65" ] }, "expected_output": [ "0.59s-r11", "0.65" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.65", "0.2.10-r2" ] }, "expected_output": [ "0.2.10-r2", "0.65" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.10-r2", "2.01" ] }, "expected_output": [ "0.2.10-r2", "2.01" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.01", "3.9.10" ] }, "expected_output": [ "2.01", "3.9.10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.9.10", "1.2.18" ] }, "expected_output": [ "1.2.18", "3.9.10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.18", "1.5.11-r2" ] }, "expected_output": [ "1.2.18", "1.5.11-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.5.11-r2", "1.5.13-r1" ] }, "expected_output": [ "1.5.11-r2", "1.5.13-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.5.13-r1", "1.3.12-r1" ] }, "expected_output": [ "1.3.12-r1", "1.5.13-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.12-r1", "2.0.1" ] }, "expected_output": [ "1.3.12-r1", "2.0.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.1", "2.0.2" ] }, "expected_output": [ "2.0.1", "2.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.2", "2.0.3" ] }, "expected_output": [ "2.0.2", "2.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.3", "0.2.0" ] }, "expected_output": [ "0.2.0", "2.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.0", "5.5-r2" ] }, "expected_output": [ "0.2.0", "5.5-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.5-r2", "5.5-r3" ] }, "expected_output": [ "5.5-r2", "5.5-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.5-r3", "0.25.3" ] }, "expected_output": [ "0.25.3", "5.5-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.25.3", "0.26.1-r1" ] }, "expected_output": [ "0.25.3", "0.26.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.26.1-r1", "5.2.1.2-r1" ] }, "expected_output": [ "0.26.1-r1", "5.2.1.2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.2.1.2-r1", "5.4" ] }, "expected_output": [ "5.2.1.2-r1", "5.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.4", "1.60-r11" ] }, "expected_output": [ "1.60-r11", "5.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.60-r11", "1.60-r12" ] }, "expected_output": [ "1.60-r11", "1.60-r12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.60-r12", "110-r8" ] }, "expected_output": [ "1.60-r12", "110-r8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "110-r8", "0.17-r2" ] }, "expected_output": [ "0.17-r2", "110-r8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.17-r2", "1.05-r4" ] }, "expected_output": [ "0.17-r2", "1.05-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.05-r4", "5.28.0" ] }, "expected_output": [ "1.05-r4", "5.28.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.28.0", "0.51.6-r1" ] }, "expected_output": [ "0.51.6-r1", "5.28.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.51.6-r1", "1.0.6-r6" ] }, "expected_output": [ "0.51.6-r1", "1.0.6-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.6-r6", "0.8.3" ] }, "expected_output": [ "0.8.3", "1.0.6-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8.3", "1.42" ] }, "expected_output": [ "0.8.3", "1.42" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.42", "20030719" ] }, "expected_output": [ "1.42", "20030719" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20030719", "4.01" ] }, "expected_output": [ "4.01", "20030719" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.01", "4.20" ] }, "expected_output": [ "4.01", "4.20" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.20", "0.20070118" ] }, "expected_output": [ "0.20070118", "4.20" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.20070118", "0.20070207_rc1" ] }, "expected_output": [ "0.20070118", "0.20070207_rc1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.20070207_rc1", "1.0" ] }, "expected_output": [ "0.20070207_rc1", "1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0", "1.13.0" ] }, "expected_output": [ "1.0", "1.13.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.13.0", "1.13.1" ] }, "expected_output": [ "1.13.0", "1.13.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.13.1", "0.21" ] }, "expected_output": [ "0.21", "1.13.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.21", "0.3.7-r3" ] }, "expected_output": [ "0.3.7-r3", "0.21" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3.7-r3", "0.4.10" ] }, "expected_output": [ "0.3.7-r3", "0.4.10" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.4.10", "0.5.0" ] }, "expected_output": [ "0.4.10", "0.5.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.5.0", "0.5.5" ] }, "expected_output": [ "0.5.0", "0.5.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.5.5", "0.5.7" ] }, "expected_output": [ "0.5.5", "0.5.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.5.7", "0.6.11-r1" ] }, "expected_output": [ "0.5.7", "0.6.11-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6.11-r1", "2.3.30-r2" ] }, "expected_output": [ "0.6.11-r1", "2.3.30-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.30-r2", "3.7_p1" ] }, "expected_output": [ "2.3.30-r2", "3.7_p1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.7_p1", "1.3" ] }, "expected_output": [ "1.3", "3.7_p1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3", "0.10.1" ] }, "expected_output": [ "0.10.1", "1.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.10.1", "4.3_p2-r1" ] }, "expected_output": [ "0.10.1", "4.3_p2-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.3_p2-r1", "4.3_p2-r5" ] }, "expected_output": [ "4.3_p2-r1", "4.3_p2-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.3_p2-r5", "4.4_p1-r6" ] }, "expected_output": [ "4.3_p2-r5", "4.4_p1-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.4_p1-r6", "4.5_p1-r1" ] }, "expected_output": [ "4.4_p1-r6", "4.5_p1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.5_p1-r1", "4.5_p1" ] }, "expected_output": [ "4.5_p1", "4.5_p1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.5_p1", "4.5_p1-r1" ] }, "expected_output": [ "4.5_p1", "4.5_p1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.5_p1-r1", "4.5_p1" ] }, "expected_output": [ "4.5_p1", "4.5_p1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.5_p1", "0.9.8c-r1" ] }, "expected_output": [ "0.9.8c-r1", "4.5_p1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.8c-r1", "0.9.8d" ] }, "expected_output": [ "0.9.8c-r1", "0.9.8d" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.8d", "2.4.4" ] }, "expected_output": [ "0.9.8d", "2.4.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.4", "2.4.7" ] }, "expected_output": [ "2.4.4", "2.4.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.7", "2.0.6" ] }, "expected_output": [ "2.0.6", "2.4.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "2.0.6", "2.0.6" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.0.6", "0.78-r3" ] }, "expected_output": [ "0.78-r3", "2.0.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.78-r3", "0.3.2" ] }, "expected_output": [ "0.3.2", "0.78-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3.2", "1.7.1-r1" ] }, "expected_output": [ "0.3.2", "1.7.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.7.1-r1", "2.5.9" ] }, "expected_output": [ "1.7.1-r1", "2.5.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.5.9", "0.1.13" ] }, "expected_output": [ "0.1.13", "2.5.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.13", "0.1.15" ] }, "expected_output": [ "0.1.13", "0.1.15" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.15", "0.4" ] }, "expected_output": [ "0.1.15", "0.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.4", "0.9.6" ] }, "expected_output": [ "0.4", "0.9.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.6", "2.2.0-r1" ] }, "expected_output": [ "0.9.6", "2.2.0-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.2.0-r1", "2.2.3-r2" ] }, "expected_output": [ "2.2.0-r1", "2.2.3-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.1-r1", "5.8.8-r2" ] }, "expected_output": [ "1.3.1-r1", "5.8.8-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.8.8-r2", "5.1.6-r4" ] }, "expected_output": [ "5.1.6-r4", "5.8.8-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.1.6-r4", "5.1.6-r6" ] }, "expected_output": [ "5.1.6-r4", "5.1.6-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.1.6-r6", "5.2.1-r3" ] }, "expected_output": [ "5.1.6-r6", "5.2.1-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.2.1-r3", "0.11.3" ] }, "expected_output": [ "0.11.3", "5.2.1-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "0.11.3", "0.11.3" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.11.3", "1.10.7" ] }, "expected_output": [ "0.11.3", "1.10.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.10.7", "1.7-r1" ] }, "expected_output": [ "1.7-r1", "1.10.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.7-r1", "0.1.20" ] }, "expected_output": [ "0.1.20", "1.7-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.20", "0.1.23" ] }, "expected_output": [ "0.1.20", "0.1.23" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.23", "5b-r9" ] }, "expected_output": [ "0.1.23", "5b-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5b-r9", "2.2.10" ] }, "expected_output": [ "2.2.10", "5b-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.2.10", "2.3.6" ] }, "expected_output": [ "2.2.10", "2.3.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3.6", "8.0.12" ] }, "expected_output": [ "2.3.6", "8.0.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.0.12", "2.4.3-r16" ] }, "expected_output": [ "2.4.3-r16", "8.0.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.3-r16", "2.4.4-r4" ] }, "expected_output": [ "2.4.3-r16", "2.4.4-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.4-r4", "3.0.3-r5" ] }, "expected_output": [ "2.4.4-r4", "3.0.3-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.0.3-r5", "3.0.6" ] }, "expected_output": [ "3.0.3-r5", "3.0.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.0.6", "3.2.6" ] }, "expected_output": [ "3.0.6", "3.2.6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.6", "3.2.7" ] }, "expected_output": [ "3.2.6", "3.2.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.7", "0.3.1_rc8" ] }, "expected_output": [ "0.3.1_rc8", "3.2.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3.1_rc8", "22.2" ] }, "expected_output": [ "0.3.1_rc8", "22.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "22.2", "22.3" ] }, "expected_output": [ "22.2", "22.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "22.3", "1.2.2" ] }, "expected_output": [ "1.2.2", "22.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.2", "2.04" ] }, "expected_output": [ "1.2.2", "2.04" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.04", "2.4.3-r1" ] }, "expected_output": [ "2.04", "2.4.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.3-r1", "2.4.3-r4" ] }, "expected_output": [ "2.4.3-r1", "2.4.3-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.3-r4", "0.98.6-r1" ] }, "expected_output": [ "0.98.6-r1", "2.4.3-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.98.6-r1", "5.7-r2" ] }, "expected_output": [ "0.98.6-r1", "5.7-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.7-r2", "5.7-r3" ] }, "expected_output": [ "5.7-r2", "5.7-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.7-r3", "5.1_p4" ] }, "expected_output": [ "5.1_p4", "5.7-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.1_p4", "1.0.5" ] }, "expected_output": [ "1.0.5", "5.1_p4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.5", "3.6.19-r1" ] }, "expected_output": [ "1.0.5", "3.6.19-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.6.19-r1", "3.6.19" ] }, "expected_output": [ "3.6.19", "3.6.19-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.6.19", "1.0.1" ] }, "expected_output": [ "1.0.1", "3.6.19" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "3.8" ] }, "expected_output": [ "1.0.1", "3.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.8", "0.2.3" ] }, "expected_output": [ "0.2.3", "3.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.3", "1.2.15-r3" ] }, "expected_output": [ "0.2.3", "1.2.15-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.15-r3", "1.2.6-r1" ] }, "expected_output": [ "1.2.6-r1", "1.2.15-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.6-r1", "2.6.8-r2" ] }, "expected_output": [ "1.2.6-r1", "2.6.8-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.8-r2", "2.6.9-r1" ] }, "expected_output": [ "2.6.8-r2", "2.6.9-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.9-r1", "1.7" ] }, "expected_output": [ "1.7", "2.6.9-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.7", "1.7b" ] }, "expected_output": [ "1.7", "1.7b" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.7b", "1.8.4-r3" ] }, "expected_output": [ "1.7b", "1.8.4-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.8.4-r3", "1.8.5" ] }, "expected_output": [ "1.8.4-r3", "1.8.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.8.5", "1.8.5_p2" ] }, "expected_output": [ "1.8.5", "1.8.5_p2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.8.5_p2", "1.1.3" ] }, "expected_output": [ "1.1.3", "1.8.5_p2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.3", "3.0.22-r3" ] }, "expected_output": [ "1.1.3", "3.0.22-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.0.22-r3", "3.0.24" ] }, "expected_output": [ "3.0.22-r3", "3.0.24" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "3.0.24", "3.0.24" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "3.0.24", "3.0.24" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.0.24", "4.0.2-r5" ] }, "expected_output": [ "3.0.24", "4.0.2-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.0.2-r5", "4.0.3" ] }, "expected_output": [ "4.0.2-r5", "4.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.0.3", "0.98" ] }, "expected_output": [ "0.98", "4.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.98", "1.00" ] }, "expected_output": [ "0.98", "1.00" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.00", "4.1.4-r1" ] }, "expected_output": [ "1.00", "4.1.4-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1.4-r1", "4.1.5" ] }, "expected_output": [ "4.1.4-r1", "4.1.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1.5", "2.3" ] }, "expected_output": [ "2.3", "4.1.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.3", "2.17-r3" ] }, "expected_output": [ "2.3", "2.17-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.17-r3", "0.1.7" ] }, "expected_output": [ "0.1.7", "2.17-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.7", "1.11" ] }, "expected_output": [ "0.1.7", "1.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.11", "4.2.1-r11" ] }, "expected_output": [ "1.11", "4.2.1-r11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.2.1-r11", "3.2.3" ] }, "expected_output": [ "3.2.3", "4.2.1-r11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.3", "3.2.4" ] }, "expected_output": [ "3.2.3", "3.2.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.4", "3.2.8" ] }, "expected_output": [ "3.2.4", "3.2.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.8", "3.2.9" ] }, "expected_output": [ "3.2.8", "3.2.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.9", "3.2.3" ] }, "expected_output": [ "3.2.3", "3.2.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.3", "3.2.4" ] }, "expected_output": [ "3.2.3", "3.2.4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.4", "3.2.8" ] }, "expected_output": [ "3.2.4", "3.2.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.8", "3.2.9" ] }, "expected_output": [ "3.2.8", "3.2.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.2.9", "1.4.9-r2" ] }, "expected_output": [ "1.4.9-r2", "3.2.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4.9-r2", "2.9.11_pre20051101-r2" ] }, "expected_output": [ "1.4.9-r2", "2.9.11_pre20051101-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.9.11_pre20051101-r2", "2.9.11_pre20051101-r3" ] }, "expected_output": [ "2.9.11_pre20051101-r2", "2.9.11_pre20051101-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.9.11_pre20051101-r3", "2.9.11_pre20051101" ] }, "expected_output": [ "2.9.11_pre20051101", "2.9.11_pre20051101-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.9.11_pre20051101", "2.9.11_pre20061021-r1" ] }, "expected_output": [ "2.9.11_pre20051101", "2.9.11_pre20061021-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.9.11_pre20061021-r1", "2.9.11_pre20061021-r2" ] }, "expected_output": [ "2.9.11_pre20061021-r1", "2.9.11_pre20061021-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.9.11_pre20061021-r2", "5.36-r1" ] }, "expected_output": [ "2.9.11_pre20061021-r2", "5.36-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.36-r1", "1.0.1" ] }, "expected_output": [ "1.0.1", "5.36-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "7.0-r2" ] }, "expected_output": [ "1.0.1", "7.0-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "7.0-r2", "2.4.5" ] }, "expected_output": [ "2.4.5", "7.0-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.4.5", "2.6.1.2" ] }, "expected_output": [ "2.4.5", "2.6.1.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.1.2", "2.6.1.3-r1" ] }, "expected_output": [ "2.6.1.2", "2.6.1.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.1.3-r1", "2.6.1.3" ] }, "expected_output": [ "2.6.1.3", "2.6.1.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.1.3", "2.6.1.3-r1" ] }, "expected_output": [ "2.6.1.3", "2.6.1.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.1.3-r1", "12.17.9" ] }, "expected_output": [ "2.6.1.3-r1", "12.17.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "12.17.9", "1.1.12" ] }, "expected_output": [ "1.1.12", "12.17.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.12", "1.1.7" ] }, "expected_output": [ "1.1.7", "1.1.12" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.7", "2.5.14" ] }, "expected_output": [ "1.1.7", "2.5.14" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.5.14", "2.6.6-r1" ] }, "expected_output": [ "2.5.14", "2.6.6-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.6-r1", "2.6.7" ] }, "expected_output": [ "2.6.6-r1", "2.6.7" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.7", "2.6.9-r1" ] }, "expected_output": [ "2.6.7", "2.6.9-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.9-r1", "2.6.9" ] }, "expected_output": [ "2.6.9", "2.6.9-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.6.9", "1.39" ] }, "expected_output": [ "1.39", "2.6.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.39", "0.9" ] }, "expected_output": [ "0.9", "1.39" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9", "2.61-r2" ] }, "expected_output": [ "0.9", "2.61-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.61-r2", "4.5.14" ] }, "expected_output": [ "2.61-r2", "4.5.14" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.5.14", "4.09-r1" ] }, "expected_output": [ "4.09-r1", "4.5.14" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.09-r1", "1.3.1" ] }, "expected_output": [ "1.3.1", "4.09-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.1", "1.3.2-r3" ] }, "expected_output": [ "1.3.1", "1.3.2-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.2-r3", "1.6.8_p12-r1" ] }, "expected_output": [ "1.3.2-r3", "1.6.8_p12-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6.8_p12-r1", "1.6.8_p9-r2" ] }, "expected_output": [ "1.6.8_p9-r2", "1.6.8_p12-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6.8_p9-r2", "1.3.0-r1" ] }, "expected_output": [ "1.3.0-r1", "1.6.8_p9-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3.0-r1", "3.11" ] }, "expected_output": [ "1.3.0-r1", "3.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.11", "3.20" ] }, "expected_output": [ "3.11", "3.20" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.20", "1.6.11-r1" ] }, "expected_output": [ "1.6.11-r1", "3.20" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6.11-r1", "1.6.9" ] }, "expected_output": [ "1.6.9", "1.6.11-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6.9", "5.0.5-r2" ] }, "expected_output": [ "1.6.9", "5.0.5-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.0.5-r2", "2.86-r5" ] }, "expected_output": [ "2.86-r5", "5.0.5-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.86-r5", "2.86-r6" ] }, "expected_output": [ "2.86-r5", "2.86-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.86-r6", "1.15.1-r1" ] }, "expected_output": [ "1.15.1-r1", "2.86-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.15.1-r1", "8.4.9" ] }, "expected_output": [ "1.15.1-r1", "8.4.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "8.4.9", "7.6-r8" ] }, "expected_output": [ "7.6-r8", "8.4.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "7.6-r8", "3.9.4-r2" ] }, "expected_output": [ "3.9.4-r2", "7.6-r8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.9.4-r2", "3.9.4-r3" ] }, "expected_output": [ "3.9.4-r2", "3.9.4-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.9.4-r3", "3.9.5-r2" ] }, "expected_output": [ "3.9.4-r3", "3.9.5-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "3.9.5-r2", "1.1.9" ] }, "expected_output": [ "1.1.9", "3.9.5-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.9", "1.0.6" ] }, "expected_output": [ "1.0.6", "1.1.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.6", "5.9" ] }, "expected_output": [ "1.0.6", "5.9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.9", "6.5" ] }, "expected_output": [ "5.9", "6.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.5", "0.40-r1" ] }, "expected_output": [ "0.40-r1", "6.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.40-r1", "2.25b-r5" ] }, "expected_output": [ "0.40-r1", "2.25b-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.25b-r5", "2.25b-r6" ] }, "expected_output": [ "2.25b-r5", "2.25b-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.25b-r6", "1.0.4" ] }, "expected_output": [ "1.0.4", "2.25b-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.4", "1.0.5" ] }, "expected_output": [ "1.0.4", "1.0.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.5", "1.4_p12-r2" ] }, "expected_output": [ "1.0.5", "1.4_p12-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4_p12-r2", "1.4_p12-r5" ] }, "expected_output": [ "1.4_p12-r2", "1.4_p12-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4_p12-r5", "1.1" ] }, "expected_output": [ "1.1", "1.4_p12-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1", "0.2.0-r1" ] }, "expected_output": [ "0.2.0-r1", "1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.0-r1", "0.2.1" ] }, "expected_output": [ "0.2.0-r1", "0.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.1", "0.9.28-r1" ] }, "expected_output": [ "0.2.1", "0.9.28-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.28-r1", "0.9.28-r2" ] }, "expected_output": [ "0.9.28-r1", "0.9.28-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.28-r2", "0.9.28.1" ] }, "expected_output": [ "0.9.28-r2", "0.9.28.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.28.1", "0.9.28" ] }, "expected_output": [ "0.9.28", "0.9.28.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.28", "0.9.28.1" ] }, "expected_output": [ "0.9.28", "0.9.28.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "103", "104-r11" ] }, "expected_output": [ "103", "104-r11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "104-r11", "104-r9" ] }, "expected_output": [ "104-r9", "104-r11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "104-r9", "1.23-r1" ] }, "expected_output": [ "1.23-r1", "104-r9" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.23-r1", "1.23" ] }, "expected_output": [ "1.23", "1.23-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.23", "1.23-r1" ] }, "expected_output": [ "1.23", "1.23-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.23-r1", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.23-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "5.52-r1" ] }, "expected_output": [ "1.0.2", "5.52-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "5.52-r1", "1.2.5_rc2" ] }, "expected_output": [ "1.2.5_rc2", "5.52-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.5_rc2", "0.1" ] }, "expected_output": [ "0.1", "1.2.5_rc2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1", "0.71-r1" ] }, "expected_output": [ "0.1", "0.71-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.71-r1", "20040406-r1" ] }, "expected_output": [ "0.71-r1", "20040406-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "20040406-r1", "2.12r-r4" ] }, "expected_output": [ "2.12r-r4", "20040406-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.12r-r4", "2.12r-r5" ] }, "expected_output": [ "2.12r-r4", "2.12r-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.12r-r5", "0.0.7" ] }, "expected_output": [ "0.0.7", "2.12r-r5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.0.7", "1.0.3" ] }, "expected_output": [ "0.0.7", "1.0.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.3", "1.8" ] }, "expected_output": [ "1.0.3", "1.8" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.8", "7.0.17" ] }, "expected_output": [ "1.8", "7.0.17" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "7.0.17", "7.0.174" ] }, "expected_output": [ "7.0.17", "7.0.174" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "7.0.174", "7.0.17" ] }, "expected_output": [ "7.0.17", "7.0.174" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "7.0.17", "7.0.174" ] }, "expected_output": [ "7.0.17", "7.0.174" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "7.0.174", "1.0.1" ] }, "expected_output": [ "1.0.1", "7.0.174" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.1.1-r3" ] }, "expected_output": [ "1.0.1", "1.1.1-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1-r3", "0.3.4_pre20061029" ] }, "expected_output": [ "0.3.4_pre20061029", "1.1.1-r3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3.4_pre20061029", "0.4.0" ] }, "expected_output": [ "0.3.4_pre20061029", "0.4.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.4.0", "0.1.2" ] }, "expected_output": [ "0.1.2", "0.4.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.2", "1.10.2" ] }, "expected_output": [ "0.1.2", "1.10.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.10.2", "2.16" ] }, "expected_output": [ "1.10.2", "2.16" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.16", "28" ] }, "expected_output": [ "2.16", "28" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "28", "0.99.4" ] }, "expected_output": [ "0.99.4", "28" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.99.4", "1.13" ] }, "expected_output": [ "0.99.4", "1.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.13", "1.0.1" ] }, "expected_output": [ "1.0.1", "1.13" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.1.2-r2" ] }, "expected_output": [ "1.0.1", "1.1.2-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.2-r2", "1.1.0" ] }, "expected_output": [ "1.1.0", "1.1.2-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "1.1.1" ] }, "expected_output": [ "1.1.0", "1.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.1.1", "1.1.1" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1", "0.6.0" ] }, "expected_output": [ "0.6.0", "1.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.6.0", "6.6.3" ] }, "expected_output": [ "0.6.0", "6.6.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "6.6.3", "1.1.1" ] }, "expected_output": [ "1.1.1", "6.6.3" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1", "1.1.0" ] }, "expected_output": [ "1.1.0", "1.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "1.1.0" ] }, "expected_output": true }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "0.2.0" ] }, "expected_output": [ "0.2.0", "1.1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.0", "0.3.0" ] }, "expected_output": [ "0.2.0", "0.3.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.3.0", "1.1.1" ] }, "expected_output": [ "0.3.0", "1.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1", "1.2.0" ] }, "expected_output": [ "1.1.1", "1.2.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.0", "1.1.0" ] }, "expected_output": [ "1.1.0", "1.2.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "1.6.5" ] }, "expected_output": [ "1.1.0", "1.6.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.6.5", "1.1.0" ] }, "expected_output": [ "1.1.0", "1.6.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "1.4.2" ] }, "expected_output": [ "1.1.0", "1.4.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4.2", "1.1.1" ] }, "expected_output": [ "1.1.1", "1.4.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1", "2.8.1" ] }, "expected_output": [ "1.1.1", "2.8.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.8.1", "1.2.0" ] }, "expected_output": [ "1.2.0", "2.8.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.0", "4.1.0" ] }, "expected_output": [ "1.2.0", "4.1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1.0", "0.4.1" ] }, "expected_output": [ "0.4.1", "4.1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.4.1", "1.9.1" ] }, "expected_output": [ "0.4.1", "1.9.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.9.1", "2.1.1" ] }, "expected_output": [ "1.9.1", "2.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.1.1", "1.4.1" ] }, "expected_output": [ "1.4.1", "2.1.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.4.1", "0.9.1-r1" ] }, "expected_output": [ "0.9.1-r1", "1.4.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.9.1-r1", "0.8.1" ] }, "expected_output": [ "0.8.1", "0.9.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8.1", "1.2.1-r1" ] }, "expected_output": [ "0.8.1", "1.2.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.1-r1", "1.1.0" ] }, "expected_output": [ "1.1.0", "1.2.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "1.2.1" ] }, "expected_output": [ "1.1.0", "1.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.1", "1.1.0" ] }, "expected_output": [ "1.1.0", "1.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "0.1.1" ] }, "expected_output": [ "0.1.1", "1.1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.1", "1.2.1" ] }, "expected_output": [ "0.1.1", "1.2.1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.1", "4.1.0" ] }, "expected_output": [ "1.2.1", "4.1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.1.0", "0.2.1-r1" ] }, "expected_output": [ "0.2.1-r1", "4.1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.2.1-r1", "1.1.0" ] }, "expected_output": [ "0.2.1-r1", "1.1.0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.0", "2.7.11" ] }, "expected_output": [ "1.1.0", "2.7.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.7.11", "1.0.2-r6" ] }, "expected_output": [ "1.0.2-r6", "2.7.11" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2-r6", "1.0.2" ] }, "expected_output": [ "1.0.2", "1.0.2-r6" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.2", "0.8" ] }, "expected_output": [ "0.8", "1.0.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.8", "1.1.1-r4" ] }, "expected_output": [ "0.8", "1.1.1-r4" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.1.1-r4", "222" ] }, "expected_output": [ "1.1.1-r4", "222" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "222", "1.0.1" ] }, "expected_output": [ "1.0.1", "222" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.1", "1.2.12-r1" ] }, "expected_output": [ "1.0.1", "1.2.12-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.12-r1", "1.2.8" ] }, "expected_output": [ "1.2.8", "1.2.12-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.8", "1.2.9.1-r1" ] }, "expected_output": [ "1.2.8", "1.2.9.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.9.1-r1", "1.2.9.1" ] }, "expected_output": [ "1.2.9.1", "1.2.9.1-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.9.1", "2.31-r1" ] }, "expected_output": [ "1.2.9.1", "2.31-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.31-r1", "2.31" ] }, "expected_output": [ "2.31", "2.31-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "2.31", "1.2.3-r1" ] }, "expected_output": [ "1.2.3-r1", "2.31" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.3-r1", "1.2.3" ] }, "expected_output": [ "1.2.3", "1.2.3-r1" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.2.3", "4.2.5" ] }, "expected_output": [ "1.2.3", "4.2.5" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "4.2.5", "4.3.2-r2" ] }, "expected_output": [ "4.2.5", "4.3.2-r2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3-r0", "1.3.1-r0" ] }, "expected_output": [ "1.3-r0", "1.3.1-r0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.3_pre1-r1", "1.3.2" ] }, "expected_output": [ "1.3_pre1-r1", "1.3.2" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0_p10-r0", "1.0_p9-r0" ] }, "expected_output": [ "1.0_p9-r0", "1.0_p10-r0" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "0.1.0_alpha_pre2", "0.1.0_alpha" ] }, "expected_output": [ "0.1.0_alpha_pre2", "0.1.0_alpha" ] }, { "description": "Comparison test for ALpine version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "apk", "versions": [ "1.0.0_pre20191002222144-r0", "1.0.0_pre20210530193627-r0" ] }, "expected_output": [ "1.0.0_pre20191002222144-r0", "1.0.0_pre20210530193627-r0" ] } ] } URI-PackageURL-2.26/t/vers/nuget_range_from_native_test.json0000644000175000017500000000061015264504421023065 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native NuGet range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "[1.0.0, 2.0.0)", "scheme": "nuget" }, "expected_output": "vers:nuget/>=1.0.0|<2.0.0" } ] } URI-PackageURL-2.26/t/vers/pypi_range_containment_test.json0000644000175000017500000000552615264504421022745 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/<=1.3.0|3.0.0", "version": "1.0.0" }, "expected_output": true }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/>0.0.2", "version": "0.0.3" }, "expected_output": true }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/<0.0.2", "version": "0.0.0.1" }, "expected_output": true }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/>=1.0.0|<=2.0.0", "version": "1.5" }, "expected_output": true }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/>=3.0.0|2.0.3", "version": "2.0.3" }, "expected_output": true }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/>=1.0.0|<=2.0.0", "version": "2.0.3" }, "expected_output": false }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/>=1.0.0|<=2.0.0", "version": "0.0.9" }, "expected_output": false }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/>=3.0.0|!=2.0.3", "version": "2.0.3" }, "expected_output": false }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/<=1.0.0|>=2.0.0", "version": "1.5" }, "expected_output": false }, { "description": "Test version containment for PyPI VERS range.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:pypi/0.0.2|0.0.6|>=3.0.0|0.0.1|0.0.4|0.0.5|0.0.3", "version": "2.0.3" }, "expected_output": false } ] } URI-PackageURL-2.26/t/vers/npm_range_containment_test.json0000644000175000017500000000056215264504421022551 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Test version containment for npm range with `*` operator.", "test_group": "recommended", "test_type": "containment", "input": { "vers": "vers:npm/*", "version": "1.0.0" }, "expected_output": true } ] } URI-PackageURL-2.26/t/vers/nuget_version_cmp_test.json0000644000175000017500000002511515264504421021733 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.0.0" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA", "1.0.0-beta" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA+AA", "1.0.0-beta+aa" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA.X.y.5.77.0+AA", "1.0.0-beta.x.y.5.77.0+aa" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.0.0+beta" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0", "1.0.0.0" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0+test", "1.0.0.0" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0.1-1.2.A", "1.0.0.1-1.2.A" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.01", "1.0.1.0" ] }, "expected_output": true }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "0.0.0", "1.0.0" ] }, "expected_output": [ "0.0.0", "1.0.0" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.1.0" ] }, "expected_output": [ "1.0.0", "1.1.0" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.0.1" ] }, "expected_output": [ "1.0.0", "1.0.1" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.999.9999", "2.1.1" ] }, "expected_output": [ "1.999.9999", "2.1.1" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA", "1.0.0-beta2" ] }, "expected_output": [ "1.0.0-beta", "1.0.0-beta2" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0+aa", "1.0.0-beta+AA" ] }, "expected_output": [ "1.0.0-beta+AA", "1.0.0+aa" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA", "1.0.0-beta.1+AA" ] }, "expected_output": [ "1.0.0-beta", "1.0.0-beta.1+AA" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA.X.y.5.77.0+AA", "1.0.0-beta.x.y.5.79.0+aa" ] }, "expected_output": [ "1.0.0-beta.x.y.5.77.0+AA", "1.0.0-beta.x.y.5.79.0+aa" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA.X.y.5.79.0+AA", "1.0.0-beta.x.y.5.790.0+abc" ] }, "expected_output": [ "1.0.0-beta.x.y.5.79.0+AA", "1.0.0-beta.x.y.5.790.0+abc" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.0.0.1" ] }, "expected_output": [ "1.0.0", "1.0.0.1" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0.1-alpha", "1.0.0.1-pre" ] }, "expected_output": [ "1.0.0.1-alpha", "1.0.0.1-pre" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-pre", "1.0.0.1-alpha" ] }, "expected_output": [ "1.0.0-pre", "1.0.0.1-alpha" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.0.0.1-alpha" ] }, "expected_output": [ "1.0.0", "1.0.0.1-alpha" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "nuget", "versions": [ "0.9.9.1", "1.0.0" ] }, "expected_output": [ "0.9.9.1", "1.0.0" ] }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0", "1.0.0.1" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0+test", "1.0.0.1" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0.1-1.2.A", "1.0.0.1-1.2.a.A+A" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.01", "1.0.1.2" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "0.0.0", "1.0.0" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.1.0" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0", "1.0.1" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA", "1.0.0-beta2" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0+AA", "1.0.0-beta+aa" ] }, "expected_output": false }, { "description": "Comparison test for NuGet version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "nuget", "versions": [ "1.0.0-BETA.X.y.5.77.0+AA", "1.0.0-beta.x.y.5.79.0+aa" ] }, "expected_output": false } ] } URI-PackageURL-2.26/t/vers/test-schema.md0000644000175000017500000000645615264504421017021 0ustar peppepeppe--- id: test-schema title: VERS test schema sidebar_label: Test schema hide_table_of_contents: true --- # VERS test schema The VERS Test Schema is a [JSON Schema](https://json-schema.org/) that provides the structure for tools to conform to the VERS specification for tool functions such as: - Build a VERS string from a native ecosystem data source; - Merge an array of VERS strings into a canonical VERS string; - Parse a VERS string to determine if a version is contained within a range; - Validate a VERS string, The structure of test cases used in VERS test files is defined in a JSON schema. The current VERS Test Schema is [vers-test.schema-0.2.json](https://github.com/package-url/vers-spec/blob/main/schemas/vers-test.schema-0.2.json). The VERS Test Schema v0.2 implements [JSON Schema version "Draft 2020-12"](https://json-schema.org/draft/2020-12). ## VERS Test Schema v0.2 changes The VERS test schema was updated to version 0.2 on August 4, 2026. This update included an automated update to all of the VERS test suite files at: `vers-spec/tests/`. A summary of these changes is: ### Test groups **Change**: Renamed - 'base' to 'required' - 'advanced' to 'recommended' This change removes the ambiguity of the **test group** names from the v0.1 VERS test schema by using names that map to Ecma conformance terminology. ### Test messages **Change**: Renamed **expected_failure_reason** to **expected_message** The terminology of the version 0.1 VERS test schema did not provide a way to provide a test case message for conditions other than failure. Some use cases are: - When an **input** contains an unregistered VERS **type**. It is important to document that a VERS **type** is not registered because this means that the VERS **type** is effectively unknown across tools and databases that implement VERS. - If a test case normalizes test case **input**, then a tool should report a message documenting the change. ### Test types **Change**: Renamed **test type** 'roundtrip' to 'validate'. The general meaning of a "roundtrip" test was to confirm that a VERS tool can parse a canonical VERS into its components and then build a canonical VERS from those components. These functions are also known as deserialization and serialization. The former 'roundtrip' **test type** did not provide much value because the input and output are required to be the same - a VERS tool can easily test this "roundtrip" behavior without a test case. There is a high degree of similarity between the 'parse' and 'validate' **test types** in terms of the functions a VERS tool performs. The key difference is that the **expected output** from a 'parse' test case is an object composed of decoded VERS components and the **expected output** from a 'validate' test case is a VERS string. The 'validate' **test type** does not require the input VERS string to be in canonical form. ## VERS Test Schema v0.1 The VERS Test Schema v0.1 is available at: https://packageurl.org/schemas/vers-test.schema-0.1.json. There is also an Interactive HTML `↗` presentation of the v0.1 VERS Test Schema. The original VERS test suite files for the v0.1 VERS Test Schema are available under the [vers-spec v1.0.2 release](https://github.com/package-url/vers-spec/releases/tag/v1.0.2). URI-PackageURL-2.26/t/vers/vers_canonical_parse_test.json0000644000175000017500000001461615264504421022371 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Canonical parse succeeds for an already normalised VERS.", "test_group": "required", "test_type": "parse", "input": "vers:npm/>=1.0.0|<2.0.0", "expected_output": { "type": "npm", "constraints": [ [ ">=", "1.0.0" ], [ "<", "2.0.0" ] ] } }, { "description": "Parsing fails when ASCII whitespace is present.", "test_group": "required", "test_type": "parse", "input": "vers:npm/>=1.0.0| <2.0.0", "expected_failure": true, "expected_message": "non-canonical VERS: whitespace is not permitted" }, { "description": "Parsing fails when the constraints component is empty.", "test_group": "required", "test_type": "parse", "input": "vers:npm/", "expected_failure": true, "expected_message": "non-canonical VERS: constraints must not be empty" }, { "description": "Parsing fails when constraints start with a pipe.", "test_group": "required", "test_type": "parse", "input": "vers:npm/|>=1.0.0|<2.0.0", "expected_failure": true, "expected_message": "non-canonical VERS: leading pipe is not permitted" }, { "description": "Parsing fails when constraints end with a pipe.", "test_group": "required", "test_type": "parse", "input": "vers:npm/>=1.0.0|<2.0.0|", "expected_failure": true, "expected_message": "non-canonical VERS: trailing pipe is not permitted" }, { "description": "Parsing fails when constraints contain consecutive pipes.", "test_group": "required", "test_type": "parse", "input": "vers:npm/>=1.0.0||<2.0.0", "expected_failure": true, "expected_message": "non-canonical VERS: consecutive pipes are not permitted" }, { "description": "Parsing fails when constraints are not in canonical order.", "test_group": "required", "test_type": "parse", "input": "vers:npm/>=2.0.0|<1.0.0", "expected_failure": true, "expected_message": "non-canonical VERS: constraints are not sorted by version" }, { "description": "Parsing assigns the implicit equality comparator to a bare version.", "test_group": "required", "test_type": "parse", "input": "vers:npm/1.0.0", "expected_output": { "type": "npm", "constraints": [ [ "=", "1.0.0" ] ] } }, { "description": "Parsing fails when explicit equality comparator '=' is used.", "test_group": "required", "test_type": "parse", "input": "vers:npm/=1.0.0", "expected_failure": true, "expected_message": "non-canonical VERS: explicit equality comparator is not permitted" }, { "description": "Parsing fails when double equality prefix '==' is used.", "test_group": "required", "test_type": "parse", "input": "vers:npm/==1.0.0", "expected_failure": true, "expected_message": "non-canonical VERS: explicit equality comparator is not permitted" }, { "description": "Parsing decodes canonical percent-encoding once for versions.", "test_group": "required", "test_type": "parse", "input": "vers:npm/1.0%252F0", "expected_output": { "type": "npm", "constraints": [ [ "=", "1.0%2F0" ] ] } }, { "description": "Parsing accepts percent-encoded SPACE in a version.", "test_group": "required", "test_type": "parse", "input": "vers:lexicographic/1%202", "expected_output": { "type": "lexicographic", "constraints": [ [ "=", "1 2" ] ] } }, { "description": "Parsing fails when TAB is percent-encoded in a version.", "test_group": "required", "test_type": "parse", "input": "vers:lexicographic/1%092", "expected_failure": true, "expected_message": "non-canonical VERS: whitespace is not permitted" }, { "description": "Parsing fails when literal ASCII whitespace occurs in a version.", "test_group": "required", "test_type": "parse", "input": "vers:lexicographic/1 2", "expected_failure": true, "expected_message": "non-canonical VERS: whitespace is not permitted" }, { "description": "Validation recommends percent-encoding SPACE in a version.", "test_group": "recommended", "test_type": "validate", "input": "vers:lexicographic/1 2", "expected_output": "vers:lexicographic/1%202" }, { "description": "Parsing fails when version percent-encoding is invalid.", "test_group": "required", "test_type": "parse", "input": "vers:npm/1.0%2G0", "expected_failure": true, "expected_message": "non-canonical VERS: invalid percent-encoding in version" }, { "description": "Parsing fails for datetime when lowercase t and z are used.", "test_group": "required", "test_type": "parse", "input": "vers:datetime/2024-01-01t00:00:00z", "expected_failure": true, "expected_message": "non-canonical VERS: datetime must use uppercase T and Z" }, { "description": "Parsing fails for datetime when time colons are percent-encoded.", "test_group": "required", "test_type": "parse", "input": "vers:datetime/2024-01-01T00%3A00%3A00Z", "expected_failure": true, "expected_message": "non-canonical VERS: datetime time colons must be unencoded" }, { "description": "Parsing fails for datetime when percent-encoding is invalid.", "test_group": "required", "test_type": "parse", "input": "vers:datetime/2024-01-01T00:00:00%ZZ", "expected_failure": true, "expected_message": "non-canonical VERS: invalid percent-encoding in version" }, { "description": "Parsing fails for datetime when percent-encoded triplets use non-canonical hex case.", "test_group": "required", "test_type": "parse", "input": "vers:datetime/2024-01-01T00%3a00%3a00Z", "expected_failure": true, "expected_message": "non-canonical VERS: percent-encoding in version is not canonical" } ] } URI-PackageURL-2.26/t/vers/openssl_range_from_native_test.json0000644000175000017500000000457315264504421023442 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native openssl range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "3.0.0, 1.0.1b", "scheme": "openssl" }, "expected_output": "vers:openssl/1.0.1b|3.0.0" }, { "description": "Construct VERS range from native openssl range.", "test_group": "required", "test_type": "from_native", "input": { "native_range": "0.9.8j", "scheme": "openssl" }, "expected_output": "vers:openssl/0.9.8j" }, { "description": "Construct VERS range from native openssl range.", "test_group": "required", "test_type": "from_native", "input": { "native_range": "3.0.1", "scheme": "openssl" }, "expected_output": "vers:openssl/3.0.1" }, { "description": "Construct VERS range from native openssl range.", "test_group": "required", "test_type": "from_native", "input": { "native_range": "1.1.1ak", "scheme": "openssl" }, "expected_output": "vers:openssl/1.1.1ak" }, { "description": "Construct VERS range from native openssl range.", "test_group": "required", "test_type": "from_native", "input": { "native_range": "1.1.0", "scheme": "openssl" }, "expected_output": "vers:openssl/1.1.0" }, { "description": "Construct VERS range from native openssl range.", "test_group": "required", "test_type": "from_native", "input": { "native_range": "3.0.2", "scheme": "openssl" }, "expected_output": "vers:openssl/3.0.2" }, { "description": "Construct VERS range from native openssl range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "3.0.1, 0.9.7a", "scheme": "openssl" }, "expected_output": "vers:openssl/0.9.7a|3.0.1" }, { "description": "Construct VERS range from native openssl range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "1.0.2ck, 3.1.2", "scheme": "openssl" }, "expected_output": "vers:openssl/1.0.2ck|3.1.2" } ] } URI-PackageURL-2.26/t/vers/npm_range_from_native_test.json0000644000175000017500000042126515264504421022552 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=4.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.0 <=4.0.4", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.0|<=4.0.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<0.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=99.999.99999", "scheme": "npm" }, "expected_output": "vers:npm/<=99.999.99999" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.11.2", "scheme": "npm" }, "expected_output": "vers:npm/>=2.11.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.11.2", "scheme": "npm" }, "expected_output": "vers:npm/<2.11.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.6.2", "scheme": "npm" }, "expected_output": "vers:npm/<=0.6.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.9.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.9.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.8.4", "scheme": "npm" }, "expected_output": "vers:npm/<=0.8.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.6.9", "scheme": "npm" }, "expected_output": "vers:npm/>=1.6.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 1.6.8", "scheme": "npm" }, "expected_output": "vers:npm/<=1.6.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.9.2", "scheme": "npm" }, "expected_output": "vers:npm/<=3.9.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=9.1.6", "scheme": "npm" }, "expected_output": "vers:npm/>=9.1.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=9.1.5", "scheme": "npm" }, "expected_output": "vers:npm/<=9.1.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.5.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.8.10", "scheme": "npm" }, "expected_output": "vers:npm/>=1.8.10" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.8.10", "scheme": "npm" }, "expected_output": "vers:npm/<1.8.10" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.4.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 16.1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=16.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 15.0.0 <= 16.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=15.0.0|<=16.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">0.12.7", "scheme": "npm" }, "expected_output": "vers:npm/>0.12.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.12.7", "scheme": "npm" }, "expected_output": "vers:npm/<=0.12.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "*", "scheme": "npm" }, "expected_output": "vers:npm/*" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.1.5", "scheme": "npm" }, "expected_output": "vers:npm/>=2.1.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "2.1.4", "scheme": "npm" }, "expected_output": "vers:npm/2.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 6.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=6.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "< 6.1.0", "scheme": "npm" }, "expected_output": "vers:npm/<6.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.4.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 3.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 2.1.3", "scheme": "npm" }, "expected_output": "vers:npm/<=2.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.5", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.4.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.4.0", "scheme": "npm" }, "expected_output": "vers:npm/<3.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.2", "scheme": "npm" }, "expected_output": "vers:npm/>=3.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 2.0.1 <3.0.2", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.1|<3.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.0.2", "scheme": "npm" }, "expected_output": "vers:npm/<=2.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<99.999.9999", "scheme": "npm" }, "expected_output": "vers:npm/<99.999.9999" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.0.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 1.0.3", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.5.2 || >=1.4.11 <1.5.0 || >=1.3.2 <1.4.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.3.2|<1.4.0|>=1.4.11|<1.5.0|>=1.5.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.3.0 <1.3.2 || >=1.4.0 <1.4.11 || >=1.5.0 <1.5.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.3.0|<1.3.2|>=1.4.0|<1.4.11|>=1.5.0|<1.5.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.1.3", "scheme": "npm" }, "expected_output": "vers:npm/>=2.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.1.2", "scheme": "npm" }, "expected_output": "vers:npm/<=2.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.2.0", "scheme": "npm" }, "expected_output": "vers:npm/<=3.2.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.7.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.7.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.6.6", "scheme": "npm" }, "expected_output": "vers:npm/<=0.6.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.6", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.0.5", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<=3.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 1.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.2.3", "scheme": "npm" }, "expected_output": "vers:npm/<=0.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<3.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.15.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.15.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.4.7", "scheme": "npm" }, "expected_output": "vers:npm/>=0.4.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.4.7", "scheme": "npm" }, "expected_output": "vers:npm/<0.4.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "< 1.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<1.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.3.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.3.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.3.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.2.5", "scheme": "npm" }, "expected_output": "vers:npm/>=1.2.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.2.4", "scheme": "npm" }, "expected_output": "vers:npm/<=1.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.9.3", "scheme": "npm" }, "expected_output": "vers:npm/>=0.9.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.9.3", "scheme": "npm" }, "expected_output": "vers:npm/<0.9.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.5.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 0.3.3", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.0.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 1.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.9.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.9.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.9.1", "scheme": "npm" }, "expected_output": "vers:npm/<1.9.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.30.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.30.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=v2.0.0-alpha8", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.0-alpha8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=v2.0.0-alpha7", "scheme": "npm" }, "expected_output": "vers:npm/<=2.0.0-alpha7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.3.5", "scheme": "npm" }, "expected_output": "vers:npm/>=1.3.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.3.5", "scheme": "npm" }, "expected_output": "vers:npm/<1.3.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.6.0", "scheme": "npm" }, "expected_output": "vers:npm/>=4.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.6.0", "scheme": "npm" }, "expected_output": "vers:npm/<4.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 2.4.24", "scheme": "npm" }, "expected_output": "vers:npm/>=2.4.24" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 2.4.23", "scheme": "npm" }, "expected_output": "vers:npm/<=2.4.23" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.12.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.12.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.11.4", "scheme": "npm" }, "expected_output": "vers:npm/<=1.11.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.7", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.6", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=4.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<4.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.4.4", "scheme": "npm" }, "expected_output": "vers:npm/>=0.4.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.4.4", "scheme": "npm" }, "expected_output": "vers:npm/<0.4.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 2.3.3", "scheme": "npm" }, "expected_output": "vers:npm/>=2.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "< 2.3.3", "scheme": "npm" }, "expected_output": "vers:npm/<2.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.1", "scheme": "npm" }, "expected_output": "vers:npm/>=3.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<3.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.4.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.4.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.4.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.1", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<=2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.9.4", "scheme": "npm" }, "expected_output": "vers:npm/>=2.9.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.9.4", "scheme": "npm" }, "expected_output": "vers:npm/<2.9.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "~1.6.5 || >=1.7.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.6.5|<1.7.0|>=1.7.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.6.5 || >=1.7.0 <1.7.2", "scheme": "npm" }, "expected_output": "vers:npm/<1.6.5|>=1.7.0|<1.7.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.5.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.5.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.5.1", "scheme": "npm" }, "expected_output": "vers:npm/<=1.5.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.6", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 2.0.5", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "< 2.0.5", "scheme": "npm" }, "expected_output": "vers:npm/<2.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.3.3", "scheme": "npm" }, "expected_output": "vers:npm/>=1.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.3.3", "scheme": "npm" }, "expected_output": "vers:npm/<1.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.1.6", "scheme": "npm" }, "expected_output": "vers:npm/>=0.1.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.1.6", "scheme": "npm" }, "expected_output": "vers:npm/<0.1.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.10.3", "scheme": "npm" }, "expected_output": "vers:npm/>=1.10.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.10.2", "scheme": "npm" }, "expected_output": "vers:npm/<=1.10.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.17.5", "scheme": "npm" }, "expected_output": "vers:npm/>=4.17.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.17.5", "scheme": "npm" }, "expected_output": "vers:npm/<4.17.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.5.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.5.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.5.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.5.0", "scheme": "npm" }, "expected_output": "vers:npm/<0.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=2.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<2.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.6.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.6.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.6.1", "scheme": "npm" }, "expected_output": "vers:npm/<1.6.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<=2.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.5.1 <4.0.0 || >=4.1.3 <5.0.0 || >=5.6.1 <6.0.0 || >=6.1.2", "scheme": "npm" }, "expected_output": "vers:npm/>=3.5.1|<4.0.0|>=4.1.3|<5.0.0|>=5.6.1|<6.0.0|>=6.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.5.1 || >=4.0.0 <4.1.3 || >=5.0.0 <5.6.1 || >=6.0.0 <6.1.2", "scheme": "npm" }, "expected_output": "vers:npm/<3.5.1|>=4.0.0|<4.1.3|>=5.0.0|<5.6.1|>=6.0.0|<6.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.2", "scheme": "npm" }, "expected_output": "vers:npm/<1.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.2.3", "scheme": "npm" }, "expected_output": "vers:npm/>=0.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.2.3", "scheme": "npm" }, "expected_output": "vers:npm/<0.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.5.0 <= 3.0.0 || >=3.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.5.0|<=3.0.0|>=3.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 2.4.2 || >= 3.0.0 <=3.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<=2.4.2|>=3.0.0|<=3.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.2.1", "scheme": "npm" }, "expected_output": "vers:npm/<=0.2.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.4.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "2.1.0-M1 || 2.1.0-M2", "scheme": "npm" }, "expected_output": "vers:npm/2.1.0-M1|2.1.0-M2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.3.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.8.1", "scheme": "npm" }, "expected_output": "vers:npm/>=2.8.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.8.0", "scheme": "npm" }, "expected_output": "vers:npm/<=2.8.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.4.4", "scheme": "npm" }, "expected_output": "vers:npm/<1.4.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.2.2", "scheme": "npm" }, "expected_output": "vers:npm/>=4.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.2.2", "scheme": "npm" }, "expected_output": "vers:npm/<4.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.6.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.6.0", "scheme": "npm" }, "expected_output": "vers:npm/<2.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.3.6 || >=3.8.39 <4.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.8.39|<4.0.0|>=4.3.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.5.5 <=3.8.38 || >=4.0.0 <=4.3.5", "scheme": "npm" }, "expected_output": "vers:npm/>=3.5.5|<=3.8.38|>=4.0.0|<=4.3.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.8.4", "scheme": "npm" }, "expected_output": "vers:npm/>=0.8.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "< 0.8.4", "scheme": "npm" }, "expected_output": "vers:npm/<0.8.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.6.5 <2.0.0 || >= 2.1.7", "scheme": "npm" }, "expected_output": "vers:npm/>=1.6.5|<2.0.0|>=2.1.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.6.5 || < 2.1.7 > 2.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.6.5|>2.0.0|<2.1.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.7.0-alpha3", "scheme": "npm" }, "expected_output": "vers:npm/>=1.7.0-alpha3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 1.7.0-alpha2", "scheme": "npm" }, "expected_output": "vers:npm/<=1.7.0-alpha2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.1.11", "scheme": "npm" }, "expected_output": "vers:npm/>=3.1.11" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.1.10", "scheme": "npm" }, "expected_output": "vers:npm/<=3.1.10" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.29", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.29" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.29", "scheme": "npm" }, "expected_output": "vers:npm/<1.0.29" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.0.3", "scheme": "npm" }, "expected_output": "vers:npm/>=0.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.2", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "> 0.9.6", "scheme": "npm" }, "expected_output": "vers:npm/>0.9.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.2.0 <= 0.9.6 || ~0.8.0-pre", "scheme": "npm" }, "expected_output": "vers:npm/>=0.2.0|>=0.8.0-pre|<0.8.0|>=0.8.0|<0.8.1|<=0.9.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.2.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.2.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.21.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.21.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.20.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.20.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.2.3", "scheme": "npm" }, "expected_output": "vers:npm/>=2.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.2.3", "scheme": "npm" }, "expected_output": "vers:npm/<2.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<0.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 2.2.x", "scheme": "npm" }, "expected_output": "vers:npm/>=2.2.0|<2.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "2.0.x || 2.1.x", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.0|<2.1.0|>=2.1.0|<2.2.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.2.1", "scheme": "npm" }, "expected_output": "vers:npm/>=2.2.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.2.1", "scheme": "npm" }, "expected_output": "vers:npm/<2.2.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.0.0-rc.1", "scheme": "npm" }, "expected_output": "vers:npm/3.0.0-rc.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.4.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.3.8", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.0.6", "scheme": "npm" }, "expected_output": "vers:npm/>=0.0.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.8.1", "scheme": "npm" }, "expected_output": "vers:npm/<2.8.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.29.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.29.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=7.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=7.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=6.5.3", "scheme": "npm" }, "expected_output": "vers:npm/<=6.5.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.8.13", "scheme": "npm" }, "expected_output": "vers:npm/>=0.8.13" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.8.13", "scheme": "npm" }, "expected_output": "vers:npm/<0.8.13" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "^2.0.18 || ^3.0.16 || ^3.1.6 || ^4.0.8 || ^5.0.0-beta.5", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.18|<3.0.0|>=3.0.16|>=3.1.6|<4.0.0|<4.0.0|>=4.0.8|>=5.0.0-beta.5|<5.0.0|<6.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.18 || <3.0.16 || <3.1.6 || <4.0.8 || <5.0.0-beta.5", "scheme": "npm" }, "expected_output": "vers:npm/<2.0.18|<3.0.16|<3.1.6|<4.0.8|<5.0.0-beta.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0-beta.7 || >=2.0.8 <3.0.0-beta.1 || >=1.8.8 <2.0.0 || >=1.7.16 <1.8.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.7.16|<1.8.0|>=1.8.8|<2.0.0|>=2.0.8|<3.0.0-beta.1|>=3.0.0-beta.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.7.0 <1.7.16 || >=1.8.0 <1.8.8 || >=2.0.0 <2.0.8 || >=3.0.0-beta.1 <3.0.0-beta.7", "scheme": "npm" }, "expected_output": "vers:npm/>=1.7.0|<1.7.16|>=1.8.0|<1.8.8|>=2.0.0|<2.0.8|>=3.0.0-beta.1|<3.0.0-beta.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<1.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.2.4", "scheme": "npm" }, "expected_output": "vers:npm/>=0.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.2.4", "scheme": "npm" }, "expected_output": "vers:npm/<0.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.3.13", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.13" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "7.0.0", "scheme": "npm" }, "expected_output": "vers:npm/7.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 6.5.3", "scheme": "npm" }, "expected_output": "vers:npm/<=6.5.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=9.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=9.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<9.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<9.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<2.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.0 <=1.1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.0|<=1.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.0.6", "scheme": "npm" }, "expected_output": "vers:npm/>=0.0.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 0.0.5", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "> 0.0.1", "scheme": "npm" }, "expected_output": "vers:npm/>0.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 0.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">3.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>3.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<=3.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.78.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.78.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.3", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.4.3", "scheme": "npm" }, "expected_output": "vers:npm/<1.4.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.0.9", "scheme": "npm" }, "expected_output": "vers:npm/<=2.0.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.5.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.5.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.5.1", "scheme": "npm" }, "expected_output": "vers:npm/<0.5.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.6.6 <2.0.0 || >= 2.2.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.6.6|<2.0.0|>=2.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.6.6 || < 2.2.4 > 2.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.6.6|>2.0.0|<2.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 2.15.1 <= 3.0.0 || >= 3.8.3", "scheme": "npm" }, "expected_output": "vers:npm/>=2.15.1|<=3.0.0|>=3.8.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 2.15.0 || >= 3.0.0 <= 3.8.2", "scheme": "npm" }, "expected_output": "vers:npm/<=2.15.0|>=3.0.0|<=3.8.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.25.1", "scheme": "npm" }, "expected_output": "vers:npm/>=2.25.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.25.1", "scheme": "npm" }, "expected_output": "vers:npm/<2.25.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.2.18", "scheme": "npm" }, "expected_output": "vers:npm/>=2.2.18" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.2.17", "scheme": "npm" }, "expected_output": "vers:npm/<=2.2.17" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.0.5", "scheme": "npm" }, "expected_output": "vers:npm/<=3.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.4.1", "scheme": "npm" }, "expected_output": "vers:npm/<1.4.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=11.1.3", "scheme": "npm" }, "expected_output": "vers:npm/>=11.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<11.1.3", "scheme": "npm" }, "expected_output": "vers:npm/<11.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.11.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.11.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.11.1", "scheme": "npm" }, "expected_output": "vers:npm/<=1.11.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.3.1", "scheme": "npm" }, "expected_output": "vers:npm/>=2.3.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.3.1", "scheme": "npm" }, "expected_output": "vers:npm/<2.3.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.0 <=1.11.3 || >=1.12.3 <=2.2.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.0|<=1.11.3|>=1.12.3|<=2.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=6.4.9", "scheme": "npm" }, "expected_output": "vers:npm/>=6.4.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=6.4.8", "scheme": "npm" }, "expected_output": "vers:npm/<=6.4.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.1.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.10.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.10.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.9.1", "scheme": "npm" }, "expected_output": "vers:npm/<=0.9.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.1 || >=0.9.5 <1.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.9.5|<1.0.0|>=1.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.9.4 || 1.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.9.4|1.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.4.6", "scheme": "npm" }, "expected_output": "vers:npm/<=1.4.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.0.3 >=4.2.1", "scheme": "npm" }, "expected_output": "vers:npm/>=5.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<5.0.3 >=5.0.0 || < 4.2.1", "scheme": "npm" }, "expected_output": "vers:npm/<4.2.1|>=5.0.0|<5.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.9.74", "scheme": "npm" }, "expected_output": "vers:npm/>=0.9.74" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.9.73", "scheme": "npm" }, "expected_output": "vers:npm/<=0.9.73" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.1.3 < 4.0.0 || >=4.1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=3.1.3|<4.0.0|>=4.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "< 3.1.3 || >= 4.0.0 <4.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<3.1.3|>=4.0.0|<4.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.3.2", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.3.2", "scheme": "npm" }, "expected_output": "vers:npm/<0.3.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.x", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.0|<2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.10.4 <1.11.0 || >=1.16.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.10.4|<1.11.0|>=1.16.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.10.4 || >=1.11.0 <1.16.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.10.4|>=1.11.0|<1.16.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=6.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=6.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=6.5.2", "scheme": "npm" }, "expected_output": "vers:npm/>=6.5.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<6.5.2", "scheme": "npm" }, "expected_output": "vers:npm/<6.5.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.6.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.6.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.2.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.2.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.2.0", "scheme": "npm" }, "expected_output": "vers:npm/<2.2.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.0.15", "scheme": "npm" }, "expected_output": "vers:npm/>=0.0.15" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.0.10 <= 0.0.14", "scheme": "npm" }, "expected_output": "vers:npm/>=0.0.10|<=0.0.14" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.0.4", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.3.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.2.13", "scheme": "npm" }, "expected_output": "vers:npm/<=2.2.13" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.1.4", "scheme": "npm" }, "expected_output": "vers:npm/>=0.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.1.4", "scheme": "npm" }, "expected_output": "vers:npm/<0.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.68.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.68.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.2.6 <2.47.0 || >2.51.0 <=2.67.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.2.6|<2.47.0|>2.51.0|<=2.67.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.5", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.7", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.7", "scheme": "npm" }, "expected_output": "vers:npm/<2.0.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.7.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.7.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.6.2", "scheme": "npm" }, "expected_output": "vers:npm/<=1.6.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.3.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.3.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.3.3", "scheme": "npm" }, "expected_output": "vers:npm/<=1.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.4.2", "scheme": "npm" }, "expected_output": "vers:npm/<1.4.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.1.3", "scheme": "npm" }, "expected_output": "vers:npm/>=0.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.1.3", "scheme": "npm" }, "expected_output": "vers:npm/<0.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.38.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.38.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.37.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.37.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.26.1", "scheme": "npm" }, "expected_output": "vers:npm/>=2.26.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.26.1", "scheme": "npm" }, "expected_output": "vers:npm/<2.26.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.8.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.8.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.7.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.7.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.4.16", "scheme": "npm" }, "expected_output": "vers:npm/>=0.4.16" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.4.16", "scheme": "npm" }, "expected_output": "vers:npm/<0.4.16" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.3.1", "scheme": "npm" }, "expected_output": "vers:npm/<1.3.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.1.13", "scheme": "npm" }, "expected_output": "vers:npm/>=2.1.13" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.1.12", "scheme": "npm" }, "expected_output": "vers:npm/<=2.1.12" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.2.3", "scheme": "npm" }, "expected_output": "vers:npm/>=1.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.2.2", "scheme": "npm" }, "expected_output": "vers:npm/<=1.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.4.4", "scheme": "npm" }, "expected_output": "vers:npm/>=3.4.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.0 <=3.4.3", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.0|<=3.4.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">0.7.0", "scheme": "npm" }, "expected_output": "vers:npm/>0.7.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.10", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.10" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.9", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.0.3", "scheme": "npm" }, "expected_output": "vers:npm/<=2.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.5.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.5.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "0.5.0", "scheme": "npm" }, "expected_output": "vers:npm/0.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.4.3", "scheme": "npm" }, "expected_output": "vers:npm/>=2.4.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.4.2", "scheme": "npm" }, "expected_output": "vers:npm/<=2.4.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "> 3.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>3.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 3.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<=3.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.8", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.1.8", "scheme": "npm" }, "expected_output": "vers:npm/<1.1.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.23.6", "scheme": "npm" }, "expected_output": "vers:npm/>=3.23.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.23.6", "scheme": "npm" }, "expected_output": "vers:npm/<3.23.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.0.3 <6.0.0 || >=6.8.6", "scheme": "npm" }, "expected_output": "vers:npm/>=5.0.3|<6.0.0|>=6.8.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=6.8.5", "scheme": "npm" }, "expected_output": "vers:npm/<=6.8.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.1.3", "scheme": "npm" }, "expected_output": "vers:npm/<=0.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=6.4.1", "scheme": "npm" }, "expected_output": "vers:npm/>=6.4.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=6.4.0", "scheme": "npm" }, "expected_output": "vers:npm/<=6.4.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.2.0", "scheme": "npm" }, "expected_output": "vers:npm/<=2.2.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.24", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.24" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.20", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.20" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.3.4", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.3.3", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "=3.10.1 || >=3.10.3", "scheme": "npm" }, "expected_output": "vers:npm/3.10.1|>=3.10.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.0 <=3.9.1 || =3.10.2", "scheme": "npm" }, "expected_output": "vers:npm/>=3.0.0|<=3.9.1|3.10.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.1.2", "scheme": "npm" }, "expected_output": "vers:npm/>=0.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<=0.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.13.12", "scheme": "npm" }, "expected_output": "vers:npm/<=0.13.12" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">1.1.5", "scheme": "npm" }, "expected_output": "vers:npm/>1.1.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "^1.1.7 || >= 2.0.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.7|<2.0.0|>=2.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.0.1 || <1.1.7", "scheme": "npm" }, "expected_output": "vers:npm/<1.1.7|<2.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.0 <2.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.0|<2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.9.7 <=2.2.2", "scheme": "npm" }, "expected_output": "vers:npm/>=0.9.7|<=2.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.2.5", "scheme": "npm" }, "expected_output": "vers:npm/>=0.2.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.2.5", "scheme": "npm" }, "expected_output": "vers:npm/<0.2.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.22.1", "scheme": "npm" }, "expected_output": "vers:npm/>=3.22.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.22.1", "scheme": "npm" }, "expected_output": "vers:npm/<3.22.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.3", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.4.6 < 4.0.0|| >=4.0.5", "scheme": "npm" }, "expected_output": "vers:npm/>=3.4.6|<4.0.0|>=4.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.4.6 || > 4.0.0 <4.0.5", "scheme": "npm" }, "expected_output": "vers:npm/<3.4.6|>4.0.0|<4.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.8.7", "scheme": "npm" }, "expected_output": "vers:npm/>=1.8.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.8.7", "scheme": "npm" }, "expected_output": "vers:npm/<1.8.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.6.0", "scheme": "npm" }, "expected_output": "vers:npm/<=1.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.9.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.9.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.9.0", "scheme": "npm" }, "expected_output": "vers:npm/<3.9.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.4.3", "scheme": "npm" }, "expected_output": "vers:npm/<=1.4.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.3.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.2.4", "scheme": "npm" }, "expected_output": "vers:npm/<=2.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.5", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.1.5", "scheme": "npm" }, "expected_output": "vers:npm/<1.1.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.32", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.32" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.1.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.3", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.35.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.35.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.35.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.35.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.1.2", "scheme": "npm" }, "expected_output": "vers:npm/>=4.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.1.0 <4.1.2", "scheme": "npm" }, "expected_output": "vers:npm/>=3.1.0|<4.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.0.2", "scheme": "npm" }, "expected_output": "vers:npm/>=5.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=5.0.1", "scheme": "npm" }, "expected_output": "vers:npm/<=5.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.20.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.20.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.19.3", "scheme": "npm" }, "expected_output": "vers:npm/<=3.19.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.1.4", "scheme": "npm" }, "expected_output": "vers:npm/<1.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.2.2", "scheme": "npm" }, "expected_output": "vers:npm/>=3.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.2.2", "scheme": "npm" }, "expected_output": "vers:npm/<3.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.1.3", "scheme": "npm" }, "expected_output": "vers:npm/>=5.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<5.1.3", "scheme": "npm" }, "expected_output": "vers:npm/<5.1.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.3.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "< 0.3.0", "scheme": "npm" }, "expected_output": "vers:npm/<0.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.11 <4 || >=4.5", "scheme": "npm" }, "expected_output": "vers:npm/>=3.11.0|<4.0.0|>=4.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.11 || >= 4 <4.5", "scheme": "npm" }, "expected_output": "vers:npm/<3.11.0|>=4.0.0|<4.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.3.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.3.0", "scheme": "npm" }, "expected_output": "vers:npm/<1.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.17.19", "scheme": "npm" }, "expected_output": "vers:npm/>=4.17.19" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.17.15 <4.17.19", "scheme": "npm" }, "expected_output": "vers:npm/>=4.17.15|<4.17.19" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=6.0.5", "scheme": "npm" }, "expected_output": "vers:npm/>=6.0.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=6.0.4", "scheme": "npm" }, "expected_output": "vers:npm/<=6.0.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.14.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.14.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.0-alpha8 <=2.0.0-rc2 || >=2.0.0 <=2.13.0", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.0-alpha8|<=2.0.0-rc2|>=2.0.0|<=2.13.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.8.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.8.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.3.6", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.11.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.11.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.11.1", "scheme": "npm" }, "expected_output": "vers:npm/<0.11.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">2.3.21", "scheme": "npm" }, "expected_output": "vers:npm/>2.3.21" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "2.3.21", "scheme": "npm" }, "expected_output": "vers:npm/2.3.21" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.3.1", "scheme": "npm" }, "expected_output": "vers:npm/>=3.3.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.3.1", "scheme": "npm" }, "expected_output": "vers:npm/<3.3.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.4.6 < 2.0.0 || >= 2.0.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.6|<2.0.0|>=2.0.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 1.0.0 < 1.4.6 || 2.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.0|<1.4.6|2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.6.3", "scheme": "npm" }, "expected_output": "vers:npm/>=1.6.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.6.3", "scheme": "npm" }, "expected_output": "vers:npm/<1.6.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=11.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=11.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<11.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<11.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.1.1", "scheme": "npm" }, "expected_output": "vers:npm/<1.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.3.6", "scheme": "npm" }, "expected_output": "vers:npm/>=2.3.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.3.5", "scheme": "npm" }, "expected_output": "vers:npm/<=2.3.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.3.6", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.3.5", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 3.17.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.17.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 3.16.0", "scheme": "npm" }, "expected_output": "vers:npm/<=3.16.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.4.9", "scheme": "npm" }, "expected_output": "vers:npm/>=0.4.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.4.9", "scheme": "npm" }, "expected_output": "vers:npm/<0.4.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.17.11", "scheme": "npm" }, "expected_output": "vers:npm/>=4.17.11" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.17.11", "scheme": "npm" }, "expected_output": "vers:npm/<4.17.11" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.9.11", "scheme": "npm" }, "expected_output": "vers:npm/<=0.9.11" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.2.8", "scheme": "npm" }, "expected_output": "vers:npm/<=0.2.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.8.8", "scheme": "npm" }, "expected_output": "vers:npm/>=1.8.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.8.8", "scheme": "npm" }, "expected_output": "vers:npm/<1.8.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.9.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.9.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.7.1 <=1.8.3", "scheme": "npm" }, "expected_output": "vers:npm/>=1.7.1|<=1.8.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.4.11", "scheme": "npm" }, "expected_output": "vers:npm/>=0.4.11" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.4.10", "scheme": "npm" }, "expected_output": "vers:npm/<=0.4.10" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 0.6.1", "scheme": "npm" }, "expected_output": "vers:npm/>=0.6.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 0.6.0", "scheme": "npm" }, "expected_output": "vers:npm/<=0.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=11.1.4", "scheme": "npm" }, "expected_output": "vers:npm/>=11.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<11.1.4", "scheme": "npm" }, "expected_output": "vers:npm/<11.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=13.0.8", "scheme": "npm" }, "expected_output": "vers:npm/>=13.0.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<13.0.8", "scheme": "npm" }, "expected_output": "vers:npm/<13.0.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=5.1.2", "scheme": "npm" }, "expected_output": "vers:npm/>=5.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "5.1.1", "scheme": "npm" }, "expected_output": "vers:npm/5.1.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.1.2", "scheme": "npm" }, "expected_output": "vers:npm/<=0.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.2.4", "scheme": "npm" }, "expected_output": "vers:npm/>=1.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.2.4", "scheme": "npm" }, "expected_output": "vers:npm/<1.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.10.9", "scheme": "npm" }, "expected_output": "vers:npm/>=0.10.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.10.0 <=0.10.8", "scheme": "npm" }, "expected_output": "vers:npm/>=0.10.0|<=0.10.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=4.3.2", "scheme": "npm" }, "expected_output": "vers:npm/>=4.3.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<4.3.2", "scheme": "npm" }, "expected_output": "vers:npm/<4.3.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.0.0-rc8", "scheme": "npm" }, "expected_output": "vers:npm/>=2.0.0-rc8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.0.0-rc7", "scheme": "npm" }, "expected_output": "vers:npm/<=2.0.0-rc7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.13.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.13.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.13.1", "scheme": "npm" }, "expected_output": "vers:npm/<=1.13.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.5.0", "scheme": "npm" }, "expected_output": "vers:npm/>=3.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.5.0", "scheme": "npm" }, "expected_output": "vers:npm/<3.5.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=3.7.1 || >= 3.7.3", "scheme": "npm" }, "expected_output": "vers:npm/<=3.7.1|>=3.7.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "3.7.2", "scheme": "npm" }, "expected_output": "vers:npm/3.7.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.1.2", "scheme": "npm" }, "expected_output": "vers:npm/<0.1.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=3.0.4", "scheme": "npm" }, "expected_output": "vers:npm/>=3.0.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<3.0.4", "scheme": "npm" }, "expected_output": "vers:npm/<3.0.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.0.7", "scheme": "npm" }, "expected_output": "vers:npm/>=1.0.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.0.6", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "> 2.4.3", "scheme": "npm" }, "expected_output": "vers:npm/>2.4.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<= 2.4.3", "scheme": "npm" }, "expected_output": "vers:npm/<=2.4.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.2.3", "scheme": "npm" }, "expected_output": "vers:npm/<=1.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.0.2", "scheme": "npm" }, "expected_output": "vers:npm/<=1.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.4.2", "scheme": "npm" }, "expected_output": "vers:npm/<=1.4.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.6.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.6.0", "scheme": "npm" }, "expected_output": "vers:npm/<0.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.4", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.12.4", "scheme": "npm" }, "expected_output": "vers:npm/>=2.12.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.12.3", "scheme": "npm" }, "expected_output": "vers:npm/<=2.12.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.0.3", "scheme": "npm" }, "expected_output": "vers:npm/<0.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">1.10.8", "scheme": "npm" }, "expected_output": "vers:npm/>1.10.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.10.8", "scheme": "npm" }, "expected_output": "vers:npm/<=1.10.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.4.1", "scheme": "npm" }, "expected_output": "vers:npm/<=1.4.1" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=1.1.8", "scheme": "npm" }, "expected_output": "vers:npm/<=1.1.8" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.3.3", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.3.2", "scheme": "npm" }, "expected_output": "vers:npm/<=0.3.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.3.0", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.3.0", "scheme": "npm" }, "expected_output": "vers:npm/<0.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "~0.2.2 || >=0.3.2", "scheme": "npm" }, "expected_output": "vers:npm/>=0.2.2|<0.3.0|>=0.3.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.2.2 || >=0.3.0 <0.3.2", "scheme": "npm" }, "expected_output": "vers:npm/<0.2.2|>=0.3.0|<0.3.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 7.0.0", "scheme": "npm" }, "expected_output": "vers:npm/>=7.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">= 5.2.1 <= 6.0.0 || >=6.0.0 <= 6.0.2", "scheme": "npm" }, "expected_output": "vers:npm/>=5.2.1|<=6.0.0|>=6.0.0|<=6.0.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.4.1 <2.0.0 || >=2.17.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.4.1|<2.0.0|>=2.17.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.4.1 || >=2.0.0 <2.17.2", "scheme": "npm" }, "expected_output": "vers:npm/<1.4.1|>=2.0.0|<2.17.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.3.16", "scheme": "npm" }, "expected_output": "vers:npm/>=0.3.16" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<0.3.16", "scheme": "npm" }, "expected_output": "vers:npm/<0.3.16" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.2.2", "scheme": "npm" }, "expected_output": "vers:npm/<=0.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.2.4", "scheme": "npm" }, "expected_output": "vers:npm/<=0.2.4" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.2.5", "scheme": "npm" }, "expected_output": "vers:npm/>=2.2.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.2.5", "scheme": "npm" }, "expected_output": "vers:npm/<2.2.5" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.0.9", "scheme": "npm" }, "expected_output": "vers:npm/<=0.0.9" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=0.9.7", "scheme": "npm" }, "expected_output": "vers:npm/>=0.9.7" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=0.9.6", "scheme": "npm" }, "expected_output": "vers:npm/<=0.9.6" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=2.4.2", "scheme": "npm" }, "expected_output": "vers:npm/>=2.4.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<2.4.2", "scheme": "npm" }, "expected_output": "vers:npm/<2.4.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": ">=1.2.2", "scheme": "npm" }, "expected_output": "vers:npm/>=1.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<1.2.2", "scheme": "npm" }, "expected_output": "vers:npm/<1.2.2" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "^1.2.9", "scheme": "npm" }, "expected_output": "vers:npm/>=1.2.9|<2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "~3.8.2", "scheme": "npm" }, "expected_output": "vers:npm/>=3.8.2|<3.9.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "5.0.0 - 7.2.3", "scheme": "npm" }, "expected_output": "vers:npm/>=5.0.0|<=7.2.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "2.1 || 2.6", "scheme": "npm" }, "expected_output": "vers:npm/2.1.0|2.6.0" }, { "description": "Construct VERS range from native npm range fails for an unsatisfiable range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "1.1.2 1.2.2", "scheme": "npm" }, "expected_failure": true, "expected_message": "space-separated npm comparators are intersected: =1.1.2 and =1.2.2 match no version" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.1 >=1.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.0|<=2.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "^1.2.3-beta.1", "scheme": "npm" }, "expected_output": "vers:npm/>=1.2.3-beta.1|<2.0.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "^0.2.1-beta", "scheme": "npm" }, "expected_output": "vers:npm/>=0.2.1-beta|<0.3.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "^0.0.2-beta", "scheme": "npm" }, "expected_output": "vers:npm/>=0.0.2-beta|<0.0.3" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "2.1.0 || 2.6.0", "scheme": "npm" }, "expected_output": "vers:npm/2.1.0|2.6.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "<=2.1.0 >=1.1.0", "scheme": "npm" }, "expected_output": "vers:npm/>=1.1.0|<=2.1.0" }, { "description": "Construct VERS range from native npm range.", "test_group": "recommended", "test_type": "from_native", "input": { "native_range": "1.2.x", "scheme": "npm" }, "expected_output": "vers:npm/>=1.2.0|<1.3.0" } ] } URI-PackageURL-2.26/t/vers/datetime_version_cmp_test.json0000644000175000017500000000576515264504421022416 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Identical RFC3339 timestamps are equal.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "datetime", "versions": [ "2024-01-01T00:00:00Z", "2024-01-01T00:00:00Z" ] }, "expected_output": true }, { "description": "Different RFC3339 offsets representing the same instant are equal.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "datetime", "versions": [ "2024-01-01T00:00:00Z", "2023-12-31T19:00:00-05:00" ] }, "expected_output": true }, { "description": "Fractional seconds do not change equality when they represent the same instant.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "datetime", "versions": [ "2024-01-01T00:00:00Z", "2024-01-01T00:00:00.000Z" ] }, "expected_output": true }, { "description": "Earlier UTC timestamp sorts before a later UTC timestamp.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "datetime", "versions": [ "2024-01-01T00:00:01Z", "2024-01-01T00:00:00Z" ] }, "expected_output": [ "2024-01-01T00:00:00Z", "2024-01-01T00:00:01Z" ] }, { "description": "Ordering is based on the normalised instant, not lexical string order.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "datetime", "versions": [ "2024-01-01T00:00:00+02:00", "2023-12-31T23:00:00Z" ] }, "expected_output": [ "2024-01-01T00:00:00+02:00", "2023-12-31T23:00:00Z" ] }, { "description": "Equal wall-clock times with different offsets sort by their UTC instant.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "datetime", "versions": [ "2024-01-01T12:00:00Z", "2024-01-01T12:00:00-05:00", "2024-01-01T12:00:00+02:00" ] }, "expected_output": [ "2024-01-01T12:00:00+02:00", "2024-01-01T12:00:00Z", "2024-01-01T12:00:00-05:00" ] }, { "description": "Fractional seconds are ordered numerically within the same second.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "datetime", "versions": [ "2024-01-01T00:00:00.900Z", "2024-01-01T00:00:00.123Z", "2024-01-01T00:00:00.090Z" ] }, "expected_output": [ "2024-01-01T00:00:00.090Z", "2024-01-01T00:00:00.123Z", "2024-01-01T00:00:00.900Z" ] } ] } URI-PackageURL-2.26/t/vers/lexicographic-test.json0000644000175000017500000000565115264504421020747 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Simple ASCII ordering (uppercase < lowercase)", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "A", "a" ] }, "expected_output": [ "A", "a" ] }, { "description": "Prefix ordering: shorter prefix sorts first", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "aa", "a" ] }, "expected_output": [ "a", "aa" ] }, { "description": "Composed vs decomposed (no normalisation): 'é' vs 'é' (e + combining acute)", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "é", "e\u0301" ] }, "expected_output": [ "e\u0301", "é" ] }, { "description": "Composed vs decomposed: 'Å' vs 'Å' (A + combining ring)", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "Å", "A\u030A" ] }, "expected_output": [ "A\u030A", "Å" ] }, { "description": "Multi-byte first-byte tie: 'ä' (U+00E4) vs 'é' (U+00E9) — same first UTF-8 byte, compare next byte", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "é", "ä" ] }, "expected_output": [ "ä", "é" ] }, { "description": "Non-ASCII vs ASCII: emoji sorts after ASCII characters (first UTF-8 byte > ASCII)", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "z", "😀" ] }, "expected_output": [ "z", "😀" ] }, { "description": "German sharp s vs 'ss' (no normalisation)", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "ß", "ss" ] }, "expected_output": [ "ss", "ß" ] }, { "description": "Different multi-byte leading bytes: U+20AC (Euro) vs U+00E4 ('ä')", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "lexicographic", "versions": [ "€", "ä" ] }, "expected_output": [ "ä", "€" ] } ] } URI-PackageURL-2.26/t/vers/alpm_version_cmp_test.json0000644000175000017500000003316315264504421021544 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.1", "1.5.0" ] }, "expected_output": [ "1.5.0", "1.5.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.1", "1.5" ] }, "expected_output": [ "1.5", "1.5.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.0-1", "1.5.0-2" ] }, "expected_output": [ "1.5.0-1", "1.5.0-2" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.0-1", "1.5.1-1" ] }, "expected_output": [ "1.5.0-1", "1.5.1-1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.0-2", "1.5.1-1" ] }, "expected_output": [ "1.5.0-2", "1.5.1-1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.a", "1.5" ] }, "expected_output": [ "1.5", "1.5.a" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.b", "1.5.a" ] }, "expected_output": [ "1.5.a", "1.5.b" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5.1", "1.5.b" ] }, "expected_output": [ "1.5.b", "1.5.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "0:1.0", "0:1.1" ] }, "expected_output": [ "0:1.0", "0:1.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.0", "0:1.0" ] }, "expected_output": [ "0:1.0", "1:1.0" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.0", "0:1.1" ] }, "expected_output": [ "0:1.1", "1:1.0" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.0", "2:1.1" ] }, "expected_output": [ "1:1.0", "2:1.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.0", "0:1.0-1" ] }, "expected_output": [ "0:1.0-1", "1:1.0" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.0-1", "0:1.1-1" ] }, "expected_output": [ "0:1.1-1", "1:1.0-1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "0:1.0", "1.1" ] }, "expected_output": [ "0:1.0", "1.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "0:1.1", "1.0" ] }, "expected_output": [ "1.0", "0:1.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.0", "1.0" ] }, "expected_output": [ "1.0", "1:1.0" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.0", "1.1" ] }, "expected_output": [ "1.1", "1:1.0" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1:1.1", "1.1" ] }, "expected_output": [ "1.1", "1:1.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5-1", "1.5.b" ] }, "expected_output": [ "1.5-1", "1.5.b" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5-1", "1.5.1-1" ] }, "expected_output": [ "1.5-1", "1.5.1-1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5-2", "1.5.1-1" ] }, "expected_output": [ "1.5-2", "1.5.1-1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5-2", "1.5.1-2" ] }, "expected_output": [ "1.5-2", "1.5.1-2" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.0-1", "1.1" ] }, "expected_output": [ "1.0-1", "1.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.1-1", "1.0" ] }, "expected_output": [ "1.0", "1.1-1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5b-1", "1.5-1" ] }, "expected_output": [ "1.5b-1", "1.5-1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5b", "1.5" ] }, "expected_output": [ "1.5b", "1.5" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5b-1", "1.5" ] }, "expected_output": [ "1.5b-1", "1.5" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.5b", "1.5.1" ] }, "expected_output": [ "1.5b", "1.5.1" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.0a", "1.0alpha" ] }, "expected_output": [ "1.0a", "1.0alpha" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.0alpha", "1.0b" ] }, "expected_output": [ "1.0alpha", "1.0b" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.0b", "1.0beta" ] }, "expected_output": [ "1.0b", "1.0beta" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.0beta", "1.0rc" ] }, "expected_output": [ "1.0beta", "1.0rc" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "comparison", "input": { "input_scheme": "alpm", "versions": [ "1.0rc", "1.0" ] }, "expected_output": [ "1.0rc", "1.0" ] }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "1.5.0", "1.5.0" ] }, "expected_output": true }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "0:1.0", "0:1.0" ] }, "expected_output": true }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "1.5.0-1", "1.5.0-1" ] }, "expected_output": true }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "0:1.0", "1.0" ] }, "expected_output": true }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "1.5.b-1", "1.5.b" ] }, "expected_output": true }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "1.5", "1.5-1" ] }, "expected_output": true }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "1.5-1", "1.5" ] }, "expected_output": true }, { "description": "Comparison test for Arch Linux version.", "test_group": "required", "test_type": "equality", "input": { "input_scheme": "alpm", "versions": [ "1.1-1", "1.1" ] }, "expected_output": true } ] } URI-PackageURL-2.26/t/vers/pypi_range_validate_test.json0000644000175000017500000001111315264504421022204 0ustar peppepeppe{ "$schema": "https://packageurl.org/schemas/vers-test.schema-0.2.json", "tests": [ { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>0.0.2", "expected_output": "vers:pypi/>0.0.2" }, { "description": "Validate test for PyPI VERS range.", "test_group": "recommended", "test_type": "validate", "input": "vers:pypi/0.0.2|0.0.6|0.0.0|0.0.1|0.0.4|0.0.5|0.0.3", "expected_output": "vers:pypi/0.0.0|0.0.1|0.0.2|0.0.3|0.0.4|0.0.5|0.0.6" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>0.0.0|>=0.0.1|0.0.2|<0.0.3|0.0.4|<0.0.5|>=0.0.6", "expected_output": "vers:pypi/>0.0.0|>=0.0.1|0.0.2|<0.0.3|0.0.4|<0.0.5|>=0.0.6" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>0.0.0|>=0.0.1|>=0.0.1|0.0.2|0.0.3|0.0.4|<0.0.5|<=0.0.6|!=0.7|8.0|>12|<15.3", "expected_output": "vers:pypi/>0.0.0|>=0.0.1|>=0.0.1|0.0.2|0.0.3|0.0.4|<0.0.5|<=0.0.6|!=0.7|8.0|>12|<15.3" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>0.0.0|>=0.0.1|0.0.2|0.0.3|0.0.4|<0.0.5|>=0.0.6|!=0.8", "expected_output": "vers:pypi/>0.0.0|>=0.0.1|0.0.2|0.0.3|0.0.4|<0.0.5|>=0.0.6|!=0.8" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>0.0.1", "expected_output": "vers:pypi/>0.0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>=0.0.1", "expected_output": "vers:pypi/>=0.0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/<0.0.1", "expected_output": "vers:pypi/<0.0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/<=0.0.1", "expected_output": "vers:pypi/<=0.0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/0.0.1", "expected_output": "vers:pypi/0.0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/!=0.0.1", "expected_output": "vers:pypi/!=0.0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/*", "expected_output": "vers:pypi/*" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>0.0.1|<0.1", "expected_output": "vers:pypi/>0.0.1|<0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/>=0.0.1|<0.1", "expected_output": "vers:pypi/>=0.0.1|<0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/<0.0.1|>0.1", "expected_output": "vers:pypi/<0.0.1|>0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/<=0.0.1|>0.1", "expected_output": "vers:pypi/<=0.0.1|>0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/0.0.1|>0.1", "expected_output": "vers:pypi/0.0.1|>0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "required", "test_type": "validate", "input": "vers:pypi/!=0.0.1|>0.1", "expected_output": "vers:pypi/!=0.0.1|>0.1" }, { "description": "Validate test for PyPI VERS range.", "test_group": "recommended", "test_type": "validate", "input": "vers:pypi/0.0.2|0.0.6|>=0.0.0|0.0.1|0.0.4|0.0.5|0.0.3", "expected_output": "vers:pypi/>=0.0.0|0.0.1|0.0.2|0.0.3|0.0.4|0.0.5|0.0.6" } ] } URI-PackageURL-2.26/README.md0000644000175000017500000001322215264504421014304 0ustar peppepeppe[![Release](https://img.shields.io/github/release/giterlizzi/perl-URI-PackageURL.svg)](https://github.com/giterlizzi/perl-URI-PackageURL/releases) [![Actions Status](https://github.com/giterlizzi/perl-URI-PackageURL/workflows/linux/badge.svg)](https://github.com/giterlizzi/perl-URI-PackageURL/actions) [![License](https://img.shields.io/github/license/giterlizzi/perl-URI-PackageURL.svg)](https://github.com/giterlizzi/perl-URI-PackageURL) [![Starts](https://img.shields.io/github/stars/giterlizzi/perl-URI-PackageURL.svg)](https://github.com/giterlizzi/perl-URI-PackageURL) [![Forks](https://img.shields.io/github/forks/giterlizzi/perl-URI-PackageURL.svg)](https://github.com/giterlizzi/perl-URI-PackageURL) [![Issues](https://img.shields.io/github/issues/giterlizzi/perl-URI-PackageURL.svg)](https://github.com/giterlizzi/perl-URI-PackageURL/issues) [![Coverage Status](https://coveralls.io/repos/github/giterlizzi/perl-URI-PackageURL/badge.svg)](https://coveralls.io/github/giterlizzi/perl-URI-PackageURL) # URI-PackageURL - Perl extension for PURL (Package URL) and VERS (Version Range) ## Synopsis ### PURL ```perl use URI::PackageURL; # OO-interface # Encode components in PURL string $purl = URI::PackageURL->new( type => 'cpan', name => 'URI-PackageURL', version => '2.26' ); say $purl; # pkg:cpan/URI-PackageURL@2.26 # Parse a PURL string $purl = URI::PackageURL->from_string('pkg:cpan/URI-PackageURL@2.26'); # use setter methods $purl = URI::PackageURL->new(type => 'cpan', name => 'URI-PackageURL'); say $purl; # pkg:cpan/URI-PackageURL say $purl->version; # undef $purl->version('2.26'); say $purl; # pkg:cpan/URI-PackageURL@2.26 say $purl->version; # 2.26 # exported functions $purl = decode_purl('pkg:cpan/URI-PackageURL@2.26'); say $purl->type; # cpan $purl_string = encode_purl(type => 'cpan', name => 'URI-PackageURL', version => '2.26'); say $purl_string; # pkg:cpan/URI-PackageURL@2.26 if (! is_purl('https://packageurl.org/')) { die "Invalid PURL string"; } # uses the legacy CPAN PURL type, to be used only for compatibility (will be removed in the future) $ENV{PURL_LEGACY_CPAN_TYPE} = 1; URI::PackageURL->new(type => 'cpan', name => 'URI::PackageURL'); # alias $purl = PURL->new( type => 'cpan', name => 'URI-PackageURL', version => '2.26' ); $purl = PURL->from_string('pkg:cpan/URI-PackageURL@2.26'); # clone $cloned = $purl->clone; $cloned->version('1.00'); say $cloned; # pkg:cpan/URI-PackageURL@1.00 say $purl; # pkg:cpan/URI-PackageURL@2.26 ``` ### VERS ```perl use URI::VersionRange; # OO-interface $vers = URI::VersionRange->new( scheme => 'cpan', constraints => ['>2.00'] ); say $vers; # vers:cpan/>2.00 if ($vers->contains('2.10')) { say "The version is in range"; } # Parse "vers" string $vers = URI::VersionRange->from_string('vers:cpan/>2.00|<2.26'); # exported functions $vers = decode_vers('vers:cpan/>2.00|<2.26'); say $vers->scheme; # cpan $vers_string = encode_vers(scheme => 'cpan', constraints => ['>2.00']); say $vers_string; # vers:cpan/>2.00 if (! is_vers('3.14')) { die "Invalid VERS string"; } # alias $vers = VERS->new( scheme => 'cpan', constraints => ['>2.00'] ); $vers = VERS->from_string('vers:cpan/>2.00|<2.26'); ``` ## Command Line ### purl-tool a CLI for URI::PackageURL module Inspect and export "purl" string in various formats (JSON, YAML, Data::Dumper, ENV): ```console $ purl-tool pkg:cpan/URI-PackageURL@2.26 --json | jq { "name": "URI-PackageURL", "namespace": null, "qualifiers": {}, "scheme": "pkg", "subpath": null, "type": "cpan", "version": "2.26" } ``` Download package using "purl" string: ```console $ wget $(purl-tool pkg:cpan/URI-PackageURL@2.26?author=GDT --download-url) ``` Use "purl" string in your shell-scripts: ```bash #!bash set -e PURL="pkg:cpan/URI-PackageURL@2.26?author=GDT" eval $(purl-tool "$PURL" --env) echo "Download $PURL_NAME $PURL_VERSION" wget $PURL_DOWNLOAD_URL echo "Build and install module $PURL_NAME $PURL_VERSION" tar xvf $PURL_NAME-$PURL_VERSION.tar.gz cd $PURL_NAME-$PURL_VERSION perl Makefile.PL make && make install ``` Create on-the-fly a "purl" string: ```console $ purl-tool --type cpan \ --name URI-PackageURL \ --version 2.26 ``` Validate a PURL string: ```bash if purl-tool "$PURL_STRING" --validate -q; then echo "PURL string is valid" else echo "PURL string is not valid" fi ``` Display information about provided PURL type (allowed components, repository, examples, etc.): ```console $ purl-tool --info rpm ``` Display all known PURL types: ```console $ purl-tool --list ``` ### vers-tool a CLI for URI::VersionRange module Decode a "vers" string: ```console $ vers-tool "vers:cpan/1.00|>=2.00|<5.00" | jq ``` Check if a version is contained within a range: ```console $ vers-tool "vers:cpan/1.00|>=2.00|<5.00" --contains "2.20" ``` Humanize "vers": ```console $ vers-tool "vers:cpan/1.00|>=2.00|<5.00" --human-readable cpan - equal 1.00 - greater than or equal 2.00 - less than 5.00 ``` ## Install Using Makefile.PL: To install `URI-PackageURL` distribution, run the following commands. perl Makefile.PL make make test make install Using App::cpanminus: cpanm URI::PackageURL ## Documentation - `perldoc URI::PackageURL` - `perldoc URI::VersionRange` - https://metacpan.org/release/URI-PackageURL - Specification: https://github.com/package-url/purl-spec - Official Website: https://packageurl.org/ - TC54 - Software and system transparency: https://tc54.org - ECMA-427 - Package-URL (PURL) specification: https://ecma-international.org/publications-and-standards/standards/ecma-427 ## Copyright - Copyright 2022-2026 © Giuseppe Di Terlizzi URI-PackageURL-2.26/META.json0000644000175000017500000000300115264504726014450 0ustar peppepeppe{ "abstract" : "Perl extension for PURL (Package URL)", "author" : [ "Giuseppe Di Terlizzi " ], "dynamic_config" : 1, "generated_by" : "ExtUtils::MakeMaker version 7.78, CPAN::Meta::Converter version 2.150013", "license" : [ "artistic_2" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "URI-PackageURL", "no_index" : { "directory" : [ "t", "inc" ] }, "prereqs" : { "build" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : { "JSON::PP" : "0", "List::Util" : "0", "perl" : "5.010" } }, "test" : { "requires" : { "CPAN::DistnameInfo" : "0", "JSON::PP" : "0", "Test::More" : "0" } } }, "release_status" : "stable", "resources" : { "bugtracker" : { "web" : "https://github.com/giterlizzi/perl-URI-PackageURL/issues" }, "repository" : { "type" : "git", "url" : "git://github.com/giterlizzi/perl-URI-PackageURL", "web" : "https://github.com/giterlizzi/perl-URI-PackageURL" } }, "version" : "2.26", "x_purl" : "pkg:cpan/URI-PackageURL", "x_serialization_backend" : "JSON::PP version 4.16" } URI-PackageURL-2.26/Changes0000644000175000017500000001632215264504421014324 0ustar peppepeppeChange history for URI-PackageURL 2.26 2026-10-16 - PURL: Improved component validation and percent-encoding - PURL: Added UTF-8 support (RFC 3629) in components, "purl-tool" input and output - PURL: Added "is_purl" utility and validation flag (enabled by default) in "URI::PackageURL->from_string" and "decode_purl" - PURL: Reduced execution time by ~39% for "URI::PackageURL::Type" - PURL: FIX "0" value lost in namespace, name, version, qualifiers and subpath - PURL: FIX "clone" and qualifiers modified by "new" and "to_string" - PURL: FIX missing "URI::VersionRange" import ("vers" qualifier) - PURL: FIX "URI::PackageURL::Type->validate" default "pkg" scheme' - VERS: FIX code injection via "scheme" in "URI::VersionRange::Version->load" (removed string eval) - VERS: FIX "vers:none/*" contained all versions (vers-spec: no versions) - VERS: Added "is_vers" utility and "scheme" validation (aligned to vers-spec "type") - VERS: Added "semver", "npm", "intdot", "lexicographic" and "datetime" scheme comparators - VERS: The scheme comparator class is now used by "contains", "to_string" (sort), "version_compare" and "from_native" (if implemented) - VERS: Improved scheme comparator class loading ("." and "-" in scheme, croak on load errors) - VERS: FIX percent-encoding (vers-spec canonical form, decoded exactly once) and added UTF-8 support - VERS: FIX constraint parser (croak on empty version) - VERS: FIX "alpm" and "pypi" schemes compared as SemVer - VERS: FIX "vers-tool --contains" fallback comparator warning - VERS: FIX npm/semver native range intersection (eg. ">=5.0.3 >=4.2.1" --> "vers:npm/>=5.0.3") and croak on unsatisfiable ranges - VERS: Improved "pypi" and "generic" schema and "gem" native range - Synced PURL and VERS spec and tests, switched to "purl-test.schema-0.2.json" - Improved tests ("parse" vers-spec tests, experimental PURL examples) and disabled "legacy" PURL test suite 2.25 2026-01-26 - Added missing import (@gregoa patch applied from Debian Perl Group - liburi-packageurl-perl) - giterlizzi/perl-URI-PackageURL#22 - Updated documentations - FIX MANIFEST 2.24 2026-01-25 - Imported all PURL type definition files from https://package-url/purl-spec - Added "URI::PackageURL::Type" helper class for normalize components, validation and load the using PURL type definition schema file, generate repository or download URLs and more - Added "validate" param in "URI::PackageURL->new" - Added "--validate" option to "purl-tool(1)" for check if the provided PURL string is valid using the exit code ("0" - valid, "1" not valid) - Added "--info TYPE" option to "purl-tool(1)" for display information about provided PURL type (allowed components, repository, examples, etc.) - Improved man pages for "purl-tool(1)" and "vers-tool(1)" - Added PURL test cases from https://github.com/package-url/purl-spec (package-url/purl-spec#514) - Added VERS test cases from https://github.com/package-url/vers-spec (package-url/vers-spec#28) - Improved 'name' and 'namespace' parsing (package-url/purl-spec#582 - package-url/purl-spec#583) - FIX NPM PURL string parser - Writes some debug messages when checksums are not formatted correctly and if there are unknown qualifiers. - Added "URI::VersionRange->from_native" method - Added "PURL" and "VERS" package alias for "URI::PackageURL" and "URI::VersionRange" - Sync with PURL v1.0.0 spec - Sync with VERS main spec 2.23 2025-07-11 - Updated CPAN PURL type spec - Added PURL_LEGACY_CPAN_TYPE env - Added "to_hash" helper - Use "checksum" qualifier as singular (giterlizzi/perl-URI-PackageURL#15) - Added getter/setter methods for PURL components (giterlizzi/perl-URI-PackageURL#16) - Improved the support of "vers" qualifier (giterlizzi/perl-URI-PackageURL#17) - Improved encoding - Added support for "vers:none/*" and "vers:all/*" in "URI::VersionRange" - Improved version comparator class loader in "URI::VersionRange" - Updated tests - Synced "test-suite-data.json" from "package-url/purl-spec" 2.22 2024-12-16 - Improved parsing of non-canonical PURL (package-url/purl-spec#363) - Improved "URI::VersionRange->constraint_contains" - Updated "maven" repository URL - FIX typo in documentation - Synced "test-suite-data.json" from "package-url/purl-spec" 2.21 2024-07-24 - Use RFC 2119 terms for CPAN purl type specification (sjn) - Added "swid" purl type support - Moved normalization and validation check in "URI::PackageURL::Util" - Dropped support for "version_prefix" qualifier for "github", "gitlab" and "bitbucket" PURL types in "purl_to_urls" util (pombredanne via giterlizzi/perl-URI-PackageURL#14) 2.20 2024-05-13 - Added support for the official "cpan" PURL type specification (giterlizzi/perl-URI-PackageURL#8) - Added "Version Range" (vers) support (giterlizzi/perl-URI-PackageURL#12) - Added "URI::VersionRange::Version::cpan" version comparator for "cpan" scheme - Added "vers-tool(1)" - FIX Apply percent-encoding in "subpath" in "to_string" method 2.11 2024-04-19 - Improved the cpan PURL type to be compatible with the 'PURL-TYPES' specification (giterlizzi/perl-URI-PackageURL#8 - https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst) - Added "luarocks" PURL type support - Improved test suite (giterlizzi/perl-URI-PackageURL#11) - Renamed CLI package in "URI::PackageURL::App" - Changed JSON module pre-requisite to "JSON::PP" to be compatible with CPAN Toolchain (giterlizzi/perl-URI-PackageURL#12) 2.04 2023-11-16 - Added "docker", "bitbuket", "golang" support to "URI::PackageURL::Util::purl_to_urls" - Added new options for create canonical purl string using "purl-tool(1)" (giterlizzi/perl-URI-PackageURL#9) - Added sample scripts - Removed empty "qualifier" keys in "URI::PackageURL->from_string" 2.03 2023-11-09 - Improved validation during encode and decode "purl" string - Fixed CPAN repository URL - FIX Qualifiers are case sensitive (giterlizzi/perl-URI-PackageURL#4) - FIX PURLs containing multiple namespaces segments parse incorrectly (giterlizzi/perl-URI-PackageURL#5) - FIX Incorrect parsing of PURLs that begin with "pkg:/" (giterlizzi/perl-URI-PackageURL#6) - Improved "t/99-official-purl-test-suite.t" test 2.02 2023-09-22 - Added core "JSON" module prerequisite in Makefile.PL (#4) 2.01 2023-09-17 - Added "repository_url" qualifier support for "cpan" PURL type 2.00 2023-06-13 - Added "purl-tool(1)" (giterlizzi/perl-URI-PackageURL#3) - Added "URI::PackageURL::Util::purl_to_urls" helper - Fixed name qualifier for "cpan" (giterlizzi/perl-URI-PackageURL#2) - Fixed some little issues 1.10 2022-08-01 - Fixed "namespace vs name" (RT#143917) - Fixed substitution warning when "version" component is not provided in URI::PackageURL->from_string 1.02 2022-07-31 - Fixed decode when "namespace" component is "undef" 1.01 2022-07-26 - Fixed documentation and test prerequisite (JSON::PP) 1.00 2022-07-25 - First release of URI::PackageURL URI-PackageURL-2.26/LICENSE0000644000175000017500000002141314267754747014057 0ustar peppepeppe The Artistic License 2.0 Copyright (c) 2000-2006, The Perl Foundation. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software. You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement. Definitions "Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package. "Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures. "You" and "your" means any person who would like to copy, distribute, or modify the Package. "Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version. "Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization. "Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees. "Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder. "Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder. "Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future. "Source" form means the source code, documentation source, and configuration files for the Package. "Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form. Permission for Use and Modification Without Distribution (1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version. Permissions for Redistribution of the Standard Version (2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package. (3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License. Distribution of Modified Versions of the Package as Source (4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following: (a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version. (b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version. (c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under (i) the Original License or (ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed. Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source (5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license. (6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version. Aggregating or Linking the Package (7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation. (8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package. Items That are Not Considered Part of a Modified Version (9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license. General Provisions (10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. (11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. (12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. (13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. URI-PackageURL-2.26/sync-purl-spec.sh0000644000175000017500000000112015264504421016237 0ustar peppepeppe#!/bin/bash # sync-purl-spec - Sync the PURL specs # # (C) 2025-2026, Giuseppe Di Terlizzi cd $(dirname $0) ; CWD=$(pwd) GIT_REF=heads/main #GIT_REF=tags/v1.0.0 PURL_ARCHIVE_URL="https://github.com/package-url/purl-spec/archive/refs/$GIT_REF.zip" PURL_ARCHIVE_FILE=$(mktemp) rm -rf $CWD/lib/URI/PackageURL/types/* mkdir -p $CWD/lib/URI/PackageURL/types/ wget -O $PURL_ARCHIVE_FILE $PURL_ARCHIVE_URL unzip -j $PURL_ARCHIVE_FILE 'purl-spec-*/types/*-definition.json' -d $CWD/lib/URI/PackageURL/types rm $PURL_ARCHIVE_FILE # Update manifest make manifest URI-PackageURL-2.26/lib/0000755000175000017500000000000015264504726013603 5ustar peppepeppeURI-PackageURL-2.26/lib/URI/0000755000175000017500000000000015264504726014242 5ustar peppepeppeURI-PackageURL-2.26/lib/URI/VersionRange.pm0000644000175000017500000004064415264504421017202 0ustar peppepeppepackage URI::VersionRange; use feature ':5.10'; use strict; use utf8; use warnings; use Carp (); use List::Util qw(first); use Exporter qw(import); use URI::VersionRange::Constraint; use URI::VersionRange::Util qw(native_range_to_vers); use URI::VersionRange::Version; use constant DEBUG => $ENV{VERS_DEBUG}; use constant TRUE => !!1; use constant FALSE => !!0; use overload '""' => 'to_string', fallback => 1; BEGIN { *VERS:: = *URI::VersionRange:: } our $VERSION = '2.26'; our @EXPORT = qw(encode_vers decode_vers is_vers); my $VERS_SCHEME_REGEXP = qr{[a-z][a-z0-9\.\-]*}; my $VERS_REGEXP = qr{^vers:$VERS_SCHEME_REGEXP/.+}; sub is_vers { ($_[0] =~ /$VERS_REGEXP/) ? 1 : undef } sub new { my ($class, %params) = @_; my $scheme = delete $params{scheme} or Carp::croak "Invalid Version Range: 'scheme' is required"; my $constraints = delete $params{constraints} or Carp::croak "Invalid Version Range: 'constraints' is required"; my @constraints = (); foreach my $constraint (@{$constraints}) { if (ref($constraint) ne 'URI::VersionRange::Constraint') { $constraint = URI::VersionRange::Constraint->from_string($constraint); } push @constraints, $constraint; } $scheme = lc $scheme; Carp::croak "Invalid Version Range: invalid scheme '$scheme'" unless $scheme =~ /\A$VERS_SCHEME_REGEXP\z/; my $scheme_class = URI::VersionRange::Version->load($scheme); my $self = {scheme => $scheme, constraints => \@constraints, scheme_class => $scheme_class}; return bless $self, $class; } sub scheme { shift->{scheme} } sub constraints { shift->{constraints} } sub encode_vers { __PACKAGE__->new(@_)->to_string } sub decode_vers { __PACKAGE__->from_string(shift) } sub from_native { my ($class, %params) = @_; my $scheme = delete $params{scheme} or Carp::croak "Invalid Version Range: 'scheme' is required"; my $range = delete $params{range} or Carp::croak "Invalid Version Range: 'range' is required"; $scheme = lc $scheme; Carp::croak "Invalid Version Range: invalid scheme '$scheme'" unless $scheme =~ /\A$VERS_SCHEME_REGEXP\z/; my $version_class = URI::VersionRange::Version->load($scheme); my $vers = $version_class->can('from_native') ? $version_class->from_native($range, $scheme) : native_range_to_vers($scheme, $range); return $class->from_string($vers); } sub from_string { my ($class, $string) = @_; utf8::encode($string); unless (is_vers($string)) { Carp::croak 'Malformed Version Range string'; } if ($string =~ /^vers\:(none|all)\// && $string !~ /^vers\:(none|all)\/\*$/) { Carp::croak 'Malformed Version Range string'; } my %params = (); # - Remove all spaces and tabs. # - Start from left, and split once on colon ":". # - The left hand side is the URI-scheme that must be lowercase. # Tools must validate that the URI-scheme value is vers. # - The right hand side is the specifier. $string =~ s/(\n|\t)+//g; my @s1 = split(':', $string, 2); # - Split the specifier from left once on a slash "/". # - The left hand side is the that must be lowercase. Tools # should validate that the is a known scheme. # - The right hand side is a list of one or more constraints. Tools must validate # that this constraints string is not empty ignoring spaces. my @s2 = split('/', $s1[1]); $params{scheme} = lc $s2[0]; # - If the constraints string is equal to "", the ```` # is "". Parsing is done and no further processing is needed for this vers. # A tool should report an error if there are extra characters beyond "*". # - Strip leading and trailing pipes "|" from the constraints string. # - Split the constraints on pipe "|". The result is a list of . # Consecutive pipes must be treated as one and leading and trailing pipes ignored. $s2[1] =~ s/(^\|)|(\|$)//g; my @s3 = split(/\|/, $s2[1]); $params{constraints} = []; # - For each : # - Determine if the starts with one of the two comparators: # - If it starts with ">=", then the comparator is ">=". # - If it starts with "<=", then the comparator is "<=". # - If it starts with "!=", then the comparator is "!=". # - If it starts with "<", then the comparator is "<". # - If it starts with ">", then the comparator is ">". # - Remove the comparator from string start. The remaining string is the version. # - Otherwise the version is the full string (which implies an equality comparator of "=") # - Tools should validate and report an error if the version is empty. # - If the version contains a percent "%" character, apply URL quoting rules to unquote this string. # - Append the parsed (comparator, version) to the constraints list. foreach (@s3) { push @{$params{constraints}}, URI::VersionRange::Constraint->from_string($_); } if (DEBUG) { say STDERR "-- S1: @s1"; say STDERR "-- S2: @s2"; say STDERR "-- S3: @s3"; } return $class->new(%params); } sub to_string { my $self = shift; my $class = $self->{scheme_class}; my @constraints = sort { $class->new($a->version) <=> $class->new($b->version) } @{$self->constraints}; return join '', 'vers:', $self->scheme, '/', join('|', @constraints); } sub constraint_contains { my ($self, $constraint, $version) = @_; # "vers:none/*" is a range containing no versions (vers-spec) return FALSE if $self->scheme eq 'none'; # "vers:scheme/*" is range containing all versions (vers-spec) return TRUE if $constraint->comparator eq '*'; my $version_class = $self->{scheme_class}; my $v1 = $version_class->new($version); my $v2 = $version_class->new($constraint->version); return ($v1 == $v2) if ($constraint->comparator eq '='); return ($v1 != $v2) if ($constraint->comparator eq '!='); return ($v1 <= $v2) if ($constraint->comparator eq '<='); return ($v1 >= $v2) if ($constraint->comparator eq '>='); return ($v1 < $v2) if ($constraint->comparator eq '<'); return ($v1 > $v2) if ($constraint->comparator eq '>'); return FALSE; } sub contains { my ($self, $version) = @_; my @first = (); my @second = (); my $version_class = $self->{scheme_class}; my $tested = $version_class->new($version); if (scalar @{$self->constraints} == 1) { return $self->constraint_contains($self->constraints->[0], $version); } foreach my $constraint (@{$self->constraints}) { # If the "tested version" is equal to the any of the constraint version # where the constraint comparator is for equality (any of "=", "<=", or ">=") # then the "tested version" is in the range. Check is finished. return TRUE if ((first { $constraint->comparator eq $_ } ('=', '<=', '>=')) && ($tested == $version_class->new($constraint->version))); # If the "tested version" is equal to the any of the constraint version # where the constraint comparator is "=!" then the "tested version" is NOT # in the range. Check is finished. return FALSE if ($constraint->comparator eq '!=' && ($tested == $version_class->new($constraint->version))); # Split the constraint list in two sub lists: # a first list where the comparator is "=" or "!=" # a second list where the comparator is neither "=" nor "!=" push @first, $constraint if ((first { $constraint->comparator eq $_ } ('=', '!='))); push @second, $constraint if (!(first { $constraint->comparator eq $_ } ('=', '!='))); } return FALSE unless @second; if (scalar @second == 1) { return $self->constraint_contains($second[0], $version); } # Iterate over the current and next contiguous constraints pairs (aka. pairwise) # in the second list. # For each current and next constraint: my $is_first_iteration = TRUE; my $current_constraint = undef; my $next_constraint = undef; foreach (_pairwise(@second)) { ($current_constraint, $next_constraint) = @{$_}; DEBUG and say STDERR sprintf '-- Current constraint --> %s', $current_constraint; DEBUG and say STDERR sprintf '-- Next constraint --> %s', $next_constraint; # If this is the first iteration and current comparator is "<" or <=" and # the "tested version" is less than the current version then the "tested # version" is IN the range. Check is finished. if ($is_first_iteration) { return TRUE if ((first { $current_constraint->comparator eq $_ } ('<=', '<')) && ($tested < $version_class->new($current_constraint->version))); $is_first_iteration = FALSE; } # If current comparator is ">" or >=" and next comparator is "<" or <=" # and the "tested version" is greater than the current version and the # "tested version" is less than the next version then the "tested version" # is IN the range. Check is finished. if ( (first { $current_constraint->comparator eq $_ } ('>', '>=')) && (first { $next_constraint->comparator eq $_ } ('<', '<=')) && ($tested > $version_class->new($current_constraint->version)) && ($tested < $version_class->new($next_constraint->version))) { return TRUE; } # If current comparator is "<" or <=" and next comparator is ">" or >=" # then these versions are out the range. Continue to the next iteration. elsif ((first { $current_constraint->comparator eq $_ } ('<', '<=')) && (first { $next_constraint->comparator eq $_ } ('>', '>='))) { next; } } # If this is the last iteration and next comparator is ">" or >=" and the # "tested version" is greater than the next version then the "tested version" # is IN the range. Check is finished. return TRUE if ((first { $next_constraint->comparator eq $_ } ('>', '>=')) && ($tested > $version_class->new($next_constraint->version))); return FALSE; } sub to_hash { return {scheme => $_[0]->scheme, constraints => $_[0]->constraints}; } sub TO_JSON { shift->to_hash } sub _pairwise { my @out = (); for (my $i = 0; $i < scalar @_; $i++) { push @out, [$_[$i], $_[$i + 1]] if $_[$i + 1]; } return @out; } 1; __END__ =encoding utf-8 =head1 NAME URI::VersionRange - Perl extension for VERS (Version Range Specifier) =head1 SYNOPSIS use URI::VersionRange; # OO-interface $vers = URI::VersionRange->new( scheme => 'cpan', constraints => ['>2.00'] ); say $vers; # vers:cpan/>2.00 if ($vers->contains('2.10')) { say "The version is in range"; } # Parse "vers" string $vers = URI::VersionRange->from_string('vers:cpan/>2.00|<2.25'); # exported functions $vers = decode_vers('vers:cpan/>2.00|<2.25'); say $vers->scheme; # cpan $vers_string = encode_vers(scheme => 'cpan', constraints => ['>2.00']); say $vers_string; # vers:cpan/>2.00 if (! is_vers('3.14')) { die "Invalid VERS string"; } # alias $vers = VERS->new( scheme => 'cpan', constraints => ['>2.00'] ); $vers = VERS->from_string('vers:cpan/>2.00|<2.25'); =head1 DESCRIPTION A version range specifier (VERS) is a URI string using the C URI-scheme with this syntax: vers:/||... C is the URI-scheme and is an acronym for "VErsion Range Specifier". The pipe "|" is used as a simple separator between C. Each C in this pipe-separated list contains a comparator and a version: This list of C are signposts in the version timeline of a package that specify version intervals. A C satisfies a version range specifier if it is contained within any of the intervals defined by these C. L L =head2 FUNCTIONAL INTERFACE They are exported by default: =head3 B $vers_string = encode_vers(%params); Converts the given C components to "vers" string. Croaks on error. This function call is functionally identical to: $vers_string = URI::VersionRange->new(%params)->to_string; =head3 B $vers = decode_vers($vers_string); Converts the given "vers" string to L object. Croaks on error. This function call is functionally identical to: $vers = URI::VersionRange->from_string($vers_string); =head3 B if (! is_vers('3.14')) { die "Invalid VERS string"; } Check if the given string is a valid VERS string. =head2 OBJECT-ORIENTED INTERFACE =head3 B $vers = URI::VersionRange->new( scheme => STRING, constraints => ARRAY ) $vers = VERS->new( scheme => STRING, constraints => ARRAY ) Create new L instance using provided VERS components (scheme, constraints). =head3 B $vers->scheme By convention the versioning scheme should be the same as the L package C for a given package ecosystem. =head3 B $vers->constraints C is ARRAY of L object. =head3 B $vers->contains($version) Check if a version is contained within a range my $vers = URI::VersionRange->from_string('vers:cpan/>2.00|<2.25'); if ($vers->contains('2.10')) { say "The version is in range"; } See L. =head3 B $vers->constraint_contains( $constraint, $version ) Check if a version is contained within a specific constraint. See L. =head3 B $vers->to_hash Turn VERS components into a hash reference. =head3 B $vers->to_string Stringify VERS components. =head3 B $vers->TO_JSON Helper method for JSON modules (L, L, L, L, etc). use Mojo::JSON qw(encode_json); say encode_json($vers); # { # "constraints": [ # { # "comparator": ">", # "version": "2.00" # }, # { # "comparator": "<", # "version": "2.25" # } # ], # "scheme": "cpan" # } =head3 B $vers = URI::VersionRange->from_string($vers_string); $vers = VERS->from_string($vers_string); Converts the given "vers" string to VERS components and return L instance. Croaks on error. =head3 B $vers = URI::VersionRange->from_native( scheme => STRING, range => STRING ); $vers = VERS->from_native( scheme => STRING, range => STRING ); Converts the specified native range string using C and return L instance. Croaks on error. $vers = URI::VersionRange->from_native(scheme => 'npm', range => '~1.6.5 || >=1.7.2'); say $vers; # vers:npm/>=1.6.5|<1.7.0|>=1.7.2 Supported native range scheme: =over =item conan =item gem =item nginx =item npm =item nuget =item raku =item semver =back For other schemes, C will attempt to convert th range string to a VERS string, but this may not work perfectly. If the scheme class implements C, it will be used for th (see L). =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/giterlizzi/perl-URI-PackageURL.git =head1 AUTHOR =over =item * Giuseppe Di Terlizzi =back =head1 LICENSE AND COPYRIGHT This software is copyright (c) 2022-2026 by Giuseppe Di Terlizzi. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut URI-PackageURL-2.26/lib/URI/PackageURL.pm0000644000175000017500000005000715264504421016510 0ustar peppepeppepackage URI::PackageURL; use feature ':5.10'; use strict; use utf8; use warnings; use Carp (); use Exporter qw(import); use URI::PackageURL::Type; use URI::PackageURL::Util qw(purl_to_urls); use URI::VersionRange (); BEGIN { *PURL:: = *URI::PackageURL:: } use constant DEBUG => $ENV{PURL_DEBUG}; use overload '""' => 'to_string', fallback => 1; our $VERSION = '2.26'; our @EXPORT = qw(encode_purl decode_purl is_purl); my $PURL_TYPE_REGEXP = qr{[a-z][a-z0-9\.\-]*}; my $PURL_REGEXP = qr{^pkg:(([/]{1,})?)([A-Za-z][A-Za-z0-9\.\-]*)([/]{1,}).+}; sub new { my ($class, %params) = @_; my $type = delete $params{type}; my $namespace = delete $params{namespace}; my $name = delete $params{name} or Carp::croak "Invalid PURL: 'name' component is required"; my $version = delete $params{version}; my $qualifiers = delete $params{qualifiers} // {}; my $subpath = delete $params{subpath}; Carp::croak "Invalid PURL: 'type' component is required" unless defined $type && length $type; Carp::croak "Invalid PURL: invalid 'type' component '$type'" unless lc($type) =~ /\A$PURL_TYPE_REGEXP\z/; my $validate = delete $params{validate} // 1; my %components = ( scheme => 'pkg', # The scheme is a constant with the value "pkg". type => $type, namespace => $namespace, name => $name, version => $version, qualifiers => $qualifiers, subpath => $subpath, ); my $definition = URI::PackageURL::Type->new($type); $definition->validate(%components) if $validate; my $self = {components => \%{$definition->normalize(%components)}, definition => $definition}; return bless $self, $class; } sub definition { shift->{definition} } sub scheme {'pkg'} # The scheme is a constant with the value "pkg". sub type { shift->_component('type', @_) } sub namespace { shift->_component('namespace', @_) } sub name { shift->_component('name', @_) } sub version { shift->_component('version', @_) } sub qualifiers { shift->_component('qualifiers', @_) } sub subpath { shift->_component('subpath', @_) } sub encode_purl { __PACKAGE__->new(@_)->to_string } sub decode_purl { __PACKAGE__->from_string(@_) } sub is_purl { ($_[0] =~ /$PURL_REGEXP/) ? 1 : undef } sub clone { my $self = shift; return ref($self)->new(%{$self->to_hash}, validate => 0); } sub to_urls { purl_to_urls(shift) } sub download_url { shift->to_urls->{download} } sub repository_url { shift->to_urls->{repository} } sub from_string { my ($class, $string, %options) = @_; utf8::encode($string); DEBUG and say STDERR "-- INPUT: $string"; DEBUG and say STDERR "-- REGEXP: $PURL_REGEXP"; # Strip slash / after scheme while ($string =~ m{^pkg:/}) { $string =~ s{^pkg:/}{pkg:}; } unless (is_purl($string)) { Carp::croak 'Malformed PURL string'; } my %components = (); # Split the purl string once from right on '#' # The left side is the 'remainder' # Strip the right side from leading and trailing '/' # Split this on '/' # Discard any empty string segment from that split # Discard any '.' or '..' segment from that split # Percent-decode each segment # UTF-8-decode each segment if needed in your programming language # Join segments back with a '/' # This is the 'subpath' my @s1 = split(/#([^#]+)$/, $string); if (defined $s1[1]) { $s1[1] =~ s/(^\/|\/$)//; my @subpath = map { _percent_decode($_) } grep { $_ ne '' && $_ ne '.' && $_ ne '..' } split /\//, $s1[1]; $components{subpath} = join '/', @subpath; } # Split the 'remainder' once from right on '?' # The left side is the 'remainder' # The right side is the 'qualifiers' string # Split the 'qualifiers' on '&'. Each part is a 'key=value' pair # For each pair, split the 'key=value' once from left on '=': # The 'key' is the lowercase left side # The 'value' is the percent-decoded right side # UTF-8-decode the value if needed in your programming language # Discard any key/value pairs where the value is empty # If the 'key' is 'checksum', split the 'value' on ',' to create a list of checksum # This list of key/value is the 'qualifiers' object my @s2 = split(/\?([^\?]+)$/, $s1[0]); if (defined $s2[1]) { my @qualifiers = split('&', $s2[1]); foreach my $qualifier (@qualifiers) { my ($key, $value) = ($qualifier =~ /^([^=]+)(?:=(.*))?$/); # Discard any key/value pairs where the value is empty next unless defined $value && length $value; $value = _percent_decode($value); if ($key eq 'checksums' || $key eq 'checksum') { Carp::carp "Detected 'checksums' qualifier. Use 'checksum' qualifier instead." if ($key eq 'checksums'); $value = [split(',', $value)]; } if ($key eq 'vers') { $value = URI::VersionRange->from_string($value); } $components{qualifiers}->{$key} = $value; } } # Split the 'remainder' once from left on ':' # The left side lowercased is the 'scheme' # The right side is the 'remainder' my @s3 = split(':', $s2[0], 2); Carp::croak 'Invalid PURL: Missing "scheme"' unless $s3[0]; Carp::croak 'Invalid PURL' unless $s3[1]; $components{scheme} = lc $s3[0]; # Strip all leading '/' characters (e.g., '/', '//', '///' and so on) from the 'remainder' # Split this once from left on '/' # The left side lowercased is the 'type' # The right side is the 'remainder' while ($s3[1] =~ m|^//|) { $s3[1] =~ s|^//|/|; } $s3[1] =~ s|^/||; # Strip leading '/' character my @s4 = split('/', $s3[1], 2); $components{type} = lc $s4[0]; Carp::croak 'Invalid PURL: Invalid "type"' if $components{type} !~ /\A$PURL_TYPE_REGEXP\z/; Carp::croak 'Invalid PURL' unless $s4[1]; # Split the 'remainder' once from right on '@' # The left side is the 'remainder' # Percent-decode the right side. This is the 'version'. # UTF-8-decode the 'version' if needed in your programming language # This is the 'version' my @s5 = split(/@([^@]+)$/, $s4[1]); # NPM purl MAY have a namespace starting with "@" # so we need to handle this case separately if ($components{type} eq 'npm' and $s4[1] =~ /^@/ and $s4[1] !~ /@.*@/) { @s5 = ($s4[1]); } $components{version} = _percent_decode($s5[1]) if (defined $s5[1]); # Strip all trailing '/' characters (e.g., '/', '//', '///' and so on) from the 'remainder' # The left side is the 'remainder' # Percent-decode the right side. This is the 'name' # UTF-8-decode this 'name' if needed in your programming language # Apply type-specific normalization to the 'name' if needed # This is the 'name' while ($s5[0] =~ m|//$|) { $s5[0] =~ s|//$|/|; } $s5[0] =~ s|/$||; # Strip trailing '/' character my @s6 = split('/', $s5[0], -1); $components{name} = _percent_decode(pop @s6); Carp::croak 'Invalid PURL: Missing "name"' unless defined $components{name} && length $components{name}; # Split the 'remainder' on '/' # Discard any empty segment from that split # Percent-decode each segment # UTF-8-decode the each segment if needed in your programming language # Apply type-specific normalization to each segment if needed # Join segments back with a '/' # This is the 'namespace' if (@s6) { $components{namespace} = join '/', map { _percent_decode($_) } @s6; } if (DEBUG) { say STDERR "-- S1: @s1"; say STDERR "-- S2: @s2"; say STDERR "-- S3: @s3"; say STDERR "-- S4: @s4"; say STDERR "-- S5: @s5"; say STDERR "-- S6: @s6"; } return $class->new(%components, validate => ($options{validate} // 1)); } sub to_string { my $self = shift; my @purl = ('pkg', ':', $self->type, '/'); # Namespace if (defined $self->namespace && length $self->namespace) { my @ns = map { _percent_encode($_) } split(/\//, $self->namespace); push @purl, (join('/', @ns), '/'); } # Name push @purl, _percent_encode($self->name, '^A-Za-z0-9\-._~:\/'); # Default percent encoding + excluding slash # Version push @purl, ('@', _percent_encode($self->version)) if (defined $self->version && length $self->version); # Qualifiers if ($self->qualifiers) { my %qualifiers = %{$self->qualifiers}; # TODO: Legacy 'checksums' qualifier will be dropped in the future foreach (qw[checksum checksums]) { if (defined $qualifiers{$_} && ref $qualifiers{$_} eq 'ARRAY') { $qualifiers{$_} = join ',', @{$qualifiers{$_}}; } } if (defined $qualifiers{vers} && ref $qualifiers{vers} eq 'URI::VersionRange') { $qualifiers{vers} = $qualifiers{vers}->to_string; } my @qualifiers = map { sprintf('%s=%s', lc $_, _percent_encode($qualifiers{$_})) } grep { defined $qualifiers{$_} && length $qualifiers{$_} } sort keys %qualifiers; push @purl, ('?', join('&', @qualifiers)) if (@qualifiers); } # Subpath if (defined $self->subpath && length $self->subpath) { my @subpath = map { _percent_encode($_) } grep { length $_ && $_ ne '.' && $_ ne '..' } split '/', $self->subpath; push @purl, ('#', join('/', @subpath)); } return join '', @purl; } sub to_hash { my %hash = map { $_ => $_[0]->{components}->{$_} } qw[scheme type name version namespace qualifiers subpath]; return \%hash; } sub TO_JSON { shift->to_hash } sub _component { my ($self, $component, $value) = @_; if (@_ == 3) { $self->{components}->{$component} = $value; } return $self->{components}->{$component}; } sub _percent_encode { my ($string, $pattern) = @_; $pattern //= '^A-Za-z0-9\-._~:' unless $pattern; utf8::encode($string); $string =~ s/([$pattern])/sprintf '%%%02X', ord $1/ge; return $string; } sub _percent_decode { my $string = shift; return unless defined $string; $string =~ s/%([0-9a-fA-F]{2})/chr hex $1/ge; Carp::croak 'Invalid PURL: invalid UTF-8 encoding' unless utf8::decode($string); return $string; } 1; __END__ =encoding utf-8 =head1 NAME URI::PackageURL - Perl extension for PURL (Package URL) =head1 SYNOPSIS use URI::PackageURL; # OO-interface # Encode components in PURL string $purl = URI::PackageURL->new( type => 'cpan', name => 'URI-PackageURL', version => '2.26' ); say $purl; # pkg:cpan/URI-PackageURL@2.26 # Parse a PURL string $purl = URI::PackageURL->from_string('pkg:cpan/URI-PackageURL@2.26'); # use setter methods $purl = URI::PackageURL->new(type => 'cpan', name => 'URI-PackageURL'); say $purl; # pkg:cpan/URI-PackageURL say $purl->version; # undef $purl->version('2.26'); say $purl; # pkg:cpan/URI-PackageURL@2.26 say $purl->version; # 2.26 # exported functions $purl = decode_purl('pkg:cpan/URI-PackageURL@2.26'); say $purl->type; # cpan $purl_string = encode_purl(type => 'cpan', name => 'URI-PackageURL', version => '2.26'); say $purl_string; # pkg:cpan/URI-PackageURL@2.26 if (! is_purl('https://packageurl.org/')) { die "Invalid PURL string"; } # uses the legacy CPAN PURL type, to be used only for compatibility (will be removed in the future) $ENV{PURL_LEGACY_CPAN_TYPE} = 1; URI::PackageURL->new(type => 'cpan', name => 'URI::PackageURL'); # alias $purl = PURL->new( type => 'cpan', name => 'URI-PackageURL', version => '2.26' ); $purl = PURL->from_string('pkg:cpan/URI-PackageURL'); # clone $cloned = $purl->clone; $cloned->version('1.00'); say $cloned; # pkg:cpan/URI-PackageURL@1.00 say $purl; # pkg:cpan/URI-PackageURL@2.26 =head1 DESCRIPTION This module converts PURL components to PURL string and vice versa. A PURL (Package URL) is a URL string used to identify and locate a software package in a mostly universal and uniform way across programing languages, package managers, packaging conventions, tools, APIs and databases. L L L L A purl is a URL composed of seven components: scheme:type/namespace/name@version?qualifiers#subpath Components are separated by a specific character for unambiguous parsing. The definition for each components is: =over 2 =item * "scheme": this is the URL scheme with the constant value of "pkg". One of the primary reason for this single scheme is to facilitate the future official registration of the "pkg" scheme for package URLs. Required. =item * "type": the package "type" or package "protocol" such as cpan, maven, npm, nuget, gem, pypi, etc. Required. =item * "namespace": some name prefix such as a Maven groupid, a Docker image owner, a GitHub user or organization. Optional and type-specific. =item * "name": the name of the package. Required. =item * "version": the version of the package. Optional. =item * "qualifiers": extra qualifying data for a package such as an OS, architecture, a distro, etc. Optional and type-specific. =item * "subpath": extra subpath within a package, relative to the package root. Optional. =back =head2 CPAN PURL TYPE C is an official PURL type (L). pkg:cpan//@?# =head3 Namespace The C is the CPAN author/publisher ID (CPANID) and is optional. When present, it represents the CPAN author/publisher ID (CPANID) and MUST be uppercase. It is appropriate to use C for compatibility with existing CPAN purl producers/consumers or when a workflow explicitly requires author-scoped identifiers. For new identifiers, the C qualifier is the preferred way to specify the author/publisher. When C is omitted, author scoping via C MAY be ambiguous because a distribution can change maintainers over time. =head3 Name The C is the distribution name and is case sensitive. A distribution name MUST NOT contain the string C<::>. =head3 Version The C is the distribution version. =head3 Qualifiers Optional qualifiers may include: =over =item * C: CPAN author/publisher ID (CPANID) =item * C: Repository-relative path (not a URL) to the distribution archive or directory, typically under 'authors/id/...' =item * C: CPAN/MetaCPAN/BackPAN/DarkPAN repository base URL (default is https://www.cpan.org) =item * C: URL of package or distribution =item * C: extra URL for a package version control system =item * C: file extension (default is tar.gz) =back =head3 Repository The default repository URL is C. =head3 Examples pkg:cpan/perl@5.42 pkg:cpan/DBI@1.646 pkg:cpan/SBOM-CycloneDX pkg:cpan/URI-PackageURL?author=GDT pkg:cpan/libwww-perl@6.76?author=OALDERS pkg:cpan/DateTime@1.55?author=DROLSKY&repository_url=backpan.perl.org pkg:cpan/Term-Gnuplot@0.90380906?distpath=authors%2Fid%2FI%2FIL%2FILYAZ%2Fmodules%2FTerm-Gnuplot-0.90380906.zip pkg:cpan/DROLSKY/DateTime@1.55 pkg:cpan/GDT/URI-PackageURL pkg:cpan/OALDERS/libwww-perl@6.76 =head3 Legacy CPAN PURL type Add C environment variable for use the legacy CPAN PURL type. B: This is only to be used for compatibility purposes (it will be removed in the future). =head2 FUNCTIONAL INTERFACE They are exported by default: =head3 B $purl_string = encode_purl(%purl_components) Converts the given PURL components to PURL string. Croaks on error. This function call is functionally identical to: $purl_string = URI::PackageURL->new(%purl_components)->to_string; =head3 B $purl = decode_purl($purl_string) Converts the given PURL string to a URI::PackageURL object. Croaks on error. This function call is functionally identical to: $purl = URI::PackageURL->from_string($purl_string); =head3 B if (! is_purl('https://packageurl.org/')) { die "Invalid PURL string"; } Check if the given string is a valid PURL string. =head2 OBJECT-ORIENTED INTERFACE =head3 B $purl = URI::PackageURL->new(%components) $purl = PURL->new(%components) Create new L instance using provided PURL components (type, name, version, etc). Disable PURL-type validation: $purl = URI::PackageURL->new(validate => 0, ...); Allowed parameters: =over =item * C, Enable/Disable PURL-type validation (default: C<1>). =item * C, PURL "type" component. =item * C, PURL "namespace" component. =item * C, PURL "name" component. =item * C, PURL "version" component. =item * C, PURL "qualifiers" component (default: C<{}>). =item * C, PURL "subpath" component. =back =head3 B The scheme is a constant with the value "pkg". =head3 B The package "type" or package "protocol" such as cpan, maven, npm, nuget, gem, pypi, etc. =head3 B Some name prefix such as a Maven groupid, a Docker image owner, a GitHub user or organization. Optional and type-specific. =head3 B The "name" of the package. =head3 B The "version" of the package. =head3 B Extra qualifying data for a package such as an OS, architecture, a distro, etc. =head3 B Extra subpath within a package, relative to the package root. =head3 B Stringify Package URL components. =head3 B Return B and/or B URLs. =head3 B Return B URL. See C in L. =head3 B Return B URL. See C in L. =head3 B Turn PURL components into a hash reference. =head3 B Return L instance. =head3 B Clone PURL object. $cloned = $purl->clone; $cloned->version('1.00'); say $cloned; # pkg:cpan/URI-PackageURL@1.00 say $purl; # pkg:cpan/URI-PackageURL@2.26 =head3 B Helper method for JSON modules (L, L, L, L, L, etc). use Mojo::JSON qw(encode_json); say encode_json($purl); # { # "name" : "URI-PackageURL", # "namespace" : null, # "qualifiers" : {}, # "scheme" : "pkg", # "subpath" : null, # "type" : "cpan", # "version" : "2.26" # } =head3 B $purl = URI::PackageURL->from_string($purl_string); $purl = PURL->from_string($purl_string); Converts the given PURL string to PURL components and return L instance. Croaks on error. =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/giterlizzi/perl-URI-PackageURL.git =head1 AUTHOR =over =item * Giuseppe Di Terlizzi =back =head1 LICENSE AND COPYRIGHT This software is copyright (c) 2022-2026 by Giuseppe Di Terlizzi. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut URI-PackageURL-2.26/lib/URI/VersionRange/0000755000175000017500000000000015264504726016644 5ustar peppepeppeURI-PackageURL-2.26/lib/URI/VersionRange/Version.pm0000644000175000017500000002134515264504421020624 0ustar peppepeppepackage URI::VersionRange::Version; use feature ':5.10'; use strict; use utf8; use warnings; use Carp (); use URI::VersionRange::Util qw(generic_version_compare); use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); use constant DEBUG => $ENV{VERS_DEBUG}; our $VERSION = '2.26'; sub load { my ($class, $scheme) = @_; $scheme = lc($scheme // ''); my @CLASSES = (); (my $name = $scheme) =~ tr/.-/__/; if (($name) = $name =~ /\A([a-z][a-z0-9_]*)\z/) { push @CLASSES, "URI::VersionRange::Scheme::$name"; # Scheme specific push @CLASSES, "URI::VersionRange::Version::$name"; # Scheme specific (legacy naming convention) } push @CLASSES, 'URI::VersionRange::Scheme::generic'; # Fallback push @CLASSES, 'URI::VersionRange::Version::generic'; # Fallback foreach my $version_class (@CLASSES) { if ($version_class->can('new') or _require_class($version_class)) { DEBUG and say STDERR "-- Loaded '$version_class' class"; return $version_class; } } return $class; } sub _require_class { my $version_class = shift; (my $file = "$version_class.pm") =~ s{::}{/}g; return 1 if eval { require $file; 1 }; Carp::croak "Failed to load '$version_class' comparator class: $@" if $@ !~ /^Can't locate \Q$file\E in \@INC/; return; } sub new { my $class = shift; bless [@_], $class } sub scheme { return (split(/\:\:/, shift, 4))[3]; } sub compare { my ($left, $right) = @_; return generic_version_compare($left->[0], $right->[0]); } # CPAN package # hide from pause URI::VersionRange::Scheme::cpan { use parent 'URI::VersionRange::Version'; use version(); use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return (version->parse($left->[0]) <=> version->parse($right->[0])); } } # SemVer package # hide from pause URI::VersionRange::Scheme::semver { use parent 'URI::VersionRange::Version'; use URI::VersionRange::Util qw(semver_version_compare); use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return semver_version_compare($left->[0], $right->[0]); } } # NPM package # hide from pause URI::VersionRange::Scheme::npm { use parent -norequire, 'URI::VersionRange::Scheme::semver'; } # intdot package # hide from pause URI::VersionRange::Scheme::intdot { use parent 'URI::VersionRange::Version'; use URI::VersionRange::Util qw(intdot_version_compare); use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return intdot_version_compare($left->[0], $right->[0]); } } # lexicographic package # hide from pause URI::VersionRange::Scheme::lexicographic { use parent 'URI::VersionRange::Version'; use URI::VersionRange::Util qw(lexicographic_version_compare); use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return lexicographic_version_compare($left->[0], $right->[0]); } } # datetime package # hide from pause URI::VersionRange::Scheme::datetime { use parent 'URI::VersionRange::Version'; use URI::VersionRange::Util qw(datetime_version_compare); use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return datetime_version_compare($left->[0], $right->[0]); } } 1; __END__ =encoding utf-8 =head1 NAME URI::VersionRange::Version - Version scheme helper class =head1 SYNOPSIS package URI::VersionRange::Scheme::generic { use Version::libversion::XS qw(version_compare2); use parent 'URI::VersionRange::Version'; use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return version_compare2($left->[0], $right->[0]); } } my $vers = URI::VersionRange->from_string('vers:generic/>v1.00|!=v2.10|<=v3.00'); if ($vers->contains('v2.50')) { # do stuff } =head1 DESCRIPTION This is a base class for the version scheme helper. The version comparator is provided by the scheme class (see L) and it's used by L for C and for sorting the constraints in C. =head2 BUNDLED SCHEME COMPARATORS =over 2 =item * C - L module =item * C - Semantic Versioning 2.0.0 (L) =item * C - Same as C =item * C - RFC 3339 timestamp (leap second C<60> is not supported) =item * C - Integers separated by dots (eg. C<10.234.5.12>) =item * C - Byte-wise comparison of the UTF-8 encoded versions =back For all other schemes the generic comparator is used (see C in L). =head2 OBJECT-ORIENTED INTERFACE =head3 B $v = URI::VersionRange::Version->new( $value ) Create new B instance using provided version C. =head3 B $v->compare Compare the version =head3 B $vers_string = $class->from_native( $native_range, $scheme ) Convert the native range of the scheme into a VERS string (optional). If implemented in the scheme class, this method is used by C<< URI::VersionRange->from_native >> instead of C (see L). =head3 B $class = URI::VersionRange::Version->load( $scheme ) Load scheme class. The class name is built using the C, replacing period C<.> and dash C<-> with underscore C<_> (eg. C --> C). This method will attempt to load the classes in this order: =over 2 =item * C<< URI::VersionRange::Scheme:: >> =item * C<< URI::VersionRange::Version:: >> (legacy naming convention) =item * C (fallback) =item * C (fallback) =back If no class is found, the generic comparator of L will be used. Croaks if the scheme class exists but fails to load (eg. syntax error or missing dependency). =head2 HOW TO CREATE A NEW SCHEME COMPARATOR CLASS =over 2 =item * Create a new package using the naming convention C<< URI::VersionRange::Scheme:: >> by extending L (period C<.> and dash C<-> in the scheme must be replaced with underscore C<_>). =item * Implements the C subroutine with the algorithm required by the C. C<$left> and C<$right> arguments of C are C and have as their first element the value of the version to be compared. =item * L C<< '<=>' >> and C operators using C subroutine (MANDATORY) =item * Implement the C subroutine to convert the native range of the scheme into a VERS string (optional) =back This is an example that implements a comparator for the C fallback scheme using L module: package URI::VersionRange::Scheme::generic { use Version::libversion::XS qw(version_compare2); use parent 'URI::VersionRange::Version'; use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return version_compare2($left->[0], $right->[0]); } } This is an another example for the C scheme using L module: package URI::VersionRange::Scheme::rpm { use RPM4; use parent 'URI::VersionRange::Version'; use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return rpmvercmp($left->[0], $right->[0]); } } =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/giterlizzi/perl-URI-PackageURL.git =head1 AUTHOR =over =item * Giuseppe Di Terlizzi =back =head1 LICENSE AND COPYRIGHT This software is copyright (c) 2022-2026 by Giuseppe Di Terlizzi. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut URI-PackageURL-2.26/lib/URI/VersionRange/Util.pm0000644000175000017500000005244015264504421020114 0ustar peppepeppepackage URI::VersionRange::Util; use feature ':5.10'; use strict; use utf8; use warnings; use Time::Local; use Exporter qw(import); use Carp (); our $VERSION = '2.26'; our @EXPORT = qw( parse_semver normalize_semver is_semver native_range_to_vers version_compare semver_version_compare generic_version_compare intdot_version_compare datetime_version_compare lexicographic_version_compare ); # SemVer (https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string) my $SEMVER_REGEXP = qr{(?x) ^ (?P0|[1-9]\d*) \. (?P0|[1-9]\d*) \. (?P0|[1-9]\d*) (?:-(?P(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))? (?:\+(?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))? $ }; # RFC 3339 date-time (https://www.rfc-editor.org/rfc/rfc3339#section-5.6) my $RFC3339_REGEXP = qr{(?x) ^ (?P[0-9]{4}) - (?P[0-9]{2}) - (?P[0-9]{2}) # full-date [Tt] (?P[0-9]{2}) : (?P[0-9]{2}) : (?P[0-9]{2}) # partial-time (?: \. (?P[0-9]+) )? # time-secfrac (?: # time-offset (?P[Zz]) | (?P[+-]) (?P[0-9]{2}) : (?P[0-9]{2}) ) $ }; sub native_range_to_vers { my ($scheme, $range) = @_; my %TYPES = ( conan => \&_conan_native_range, gem => \&_gem_native_range, nginx => \&_nginx_native_range, npm => \&_semver_native_range, nuget => \&_nuget_native_range, raku => \&_raku_native_range, semver => \&_semver_native_range, ); if (defined $TYPES{$scheme}) { return sprintf 'vers:%s/%s', $scheme, $TYPES{$scheme}->($range); } my @parts = split /\,/, $range; map {s{\s+}{}g} @parts; return sprintf 'vers:%s/%s', $scheme, join '|', sort @parts; } sub _nginx_native_range { my $native = shift; $native =~ s/\s+//g; my @plus = (); my @others = (); my @p = split /,/, $native; foreach my $part (@p) { next unless length $part; # "1.0.0-1.0.1" if ($part =~ /^(.*?)-(.*)$/) { my $min = normalize_semver($1); my $max = normalize_semver($2); push @others, ">=$min|<=$max"; next; } # "1.0.1+" if ($part =~ /^\s*(.*?)\+\s*$/) { my $version = normalize_semver($1); push @plus, $version if defined $version; next; } if (my $v = normalize_semver($part)) { push @others, $v; next; } push @others, $part; } if (@plus) { my %seen = (); # Remove duplicates and sort @plus = sort { my $A = parse_semver($a); my $B = parse_semver($b); $A->{major} <=> $B->{major} || $A->{minor} <=> $B->{minor} || $A->{patch} <=> $B->{patch} } grep { !$seen{$_}++ } @plus; # One "+" if (@plus == 1) { my $semver = parse_semver($plus[0]); my $upper = join('.', $semver->{major}, $semver->{minor} + 1, 0); return join('|', (">=$plus[0]", "<$upper", @others)); } my @parts = (">=$plus[0]"); # Skip first plus for (my $i = 1; $i < @plus; $i++) { push @parts, "<$plus[$i]", ">=$plus[$i]"; } return join('|', @parts, @others); } return join('|', grep {$_} @others); } sub _nuget_native_range { my $native = shift; # https://learn.microsoft.com/en-us/nuget/concepts/package-versioning # Notation Applied rule Description # 1.0 x ≥ 1.0 Minimum version, inclusive # [1.0,) x ≥ 1.0 Minimum version, inclusive # (1.0,) x > 1.0 Minimum version, exclusive # [1.0] x == 1.0 Exact version match # (,1.0] x ≤ 1.0 Maximum version, inclusive # (,1.0) x < 1.0 Maximum version, exclusive # [1.0,2.0] 1.0 ≤ x ≤ 2.0 Exact range, inclusive # (1.0,2.0) 1.0 < x < 2.0 Exact range, exclusive # [1.0,2.0) 1.0 ≤ x < 2.0 Mixed inclusive minimum and exclusive maximum version # (1.0) invalid invalid my @parts = map { /^\((.*)\)$/ ? Carp::croak 'Invalid nuget version range' # (1.0) : /^\($/ ? '>0.0' # ( : /^\)$/ ? '' # ) : /^\[(.*)\]$/ ? $1 # [1.0] : /^\[(.*)/ ? ">=$1" # [1.0 : /(.*)\]$/ ? "<=$1" # 1.0] : /^\((.*)/ ? ">$1" # (1.0 : /(.*)\)$/ ? "<$1" # 1.0) : $_ # 1.0 } grep {$_} split /\,/, $native; return join('|', grep {$_} @parts); } sub _semver_native_range { my $native = shift; $native =~ s/^(.*)\s\-\s(.*)$/>= $1 <= $2/g; # TODO $native =~ s/(>\=|<\=|>|<)\s+/$1/g; my @constraints = (); # "||" separates the ranges (union) and whitespace separates the comparators (intersection) foreach my $range (split /\|\|/, $native) { my @parts = grep {$_} split /\s+/, $range; my @comparators = map { split /\|/ } map { _semver_native_comparator($_) } @parts; # Intersect the comparators (eg. ">=5.0.3 >=4.2.1" --> ">=5.0.3") push @constraints, (@parts > 1) ? _semver_intersect(@comparators) : @comparators; } return join '|', @constraints; } sub _semver_native_comparator { my $part = shift; $part =~ s{v(\d+)}{$1}; $part =~ s{^=}{}; $part =~ s/^\s+|\s+$//g; # Wildcards (1.x or 2.0.x) if (my @wildcards = _semver_wildcards('>=', $part)) { return @wildcards; } # Tilde operator if ($part =~ /^(~)(.*)/) { return _tilde_operator('semver', $2); } # Caret operator if ($part =~ /^(\^)(.*)/) { return _caret_operator('semver', $2); } # Operators if ($part =~ /(>\=|<\=|>|<)(.*)/) { my ($operator, $version) = ($1, $2); # Wildcards (1.x or 2.0.x) if (my @wildcards = _semver_wildcards($operator, $version)) { return @wildcards; } $version = normalize_semver($version); if ($version and is_semver($version)) { return join('', $operator, $version); } } if ($part ne '*') { my $version = normalize_semver($part); if ($version and is_semver($version)) { return $version; } } return $part; } sub _semver_intersect { my @comparators = @_; my ($lower, $upper, $equal); foreach my $comparator (@comparators) { my ($operator, $version) = $comparator =~ /^(>=|<=|>|<)?(.*)$/; # Skip the intersection for non-SemVer versions (eg. "*") return @comparators unless is_semver($version); if (!$operator) { if ($equal && semver_version_compare($equal, $version) != 0) { Carp::croak "Invalid Version Range: '$equal' and '$version' match no version"; } $equal = $version; next; } # Keep the highest lower bound (">" wins over ">=" for the same version) if ($operator =~ /^>/) { my $cmp = $lower ? semver_version_compare($version, $lower->[1]) : 1; $lower = [$operator, $version] if ($cmp > 0 || ($cmp == 0 && $operator eq '>')); next; } # Keep the lowest upper bound ("<" wins over "<=" for the same version) my $cmp = $upper ? semver_version_compare($version, $upper->[1]) : -1; $upper = [$operator, $version] if ($cmp < 0 || ($cmp == 0 && $operator eq '<')); } my @bounds = grep {$_} $lower, $upper; if ($lower && $upper) { my $cmp = semver_version_compare($lower->[1], $upper->[1]); if ($cmp > 0 || ($cmp == 0 && ($lower->[0] eq '>' || $upper->[0] eq '<'))) { Carp::croak sprintf "Invalid Version Range: '%s' and '%s' match no version", map { join '', @{$_} } @bounds; } } if ($equal) { foreach my $bound (@bounds) { my ($operator, $version) = @{$bound}; my $cmp = semver_version_compare($equal, $version); my %match = ('>=' => $cmp >= 0, '>' => $cmp > 0, '<=' => $cmp <= 0, '<' => $cmp < 0); unless ($match{$operator}) { Carp::croak "Invalid Version Range: '$equal' and '$operator$version' match no version"; } } return ($equal); } return map { join '', @{$_} } @bounds; } sub _conan_native_range { my $native = shift; my @p = grep {$_} split /(?:\s+|\|\|)/, $native; my @parts = (); foreach my $part (@p) { $part =~ s{^=}{}g; $part =~ s{\-$}{}g; $part =~ s{\,}{}g; if ($part =~ /^(\*|\*\-)$/) { push @parts, '>=0.0.0'; next; } if ($part =~ /^(~)(.*)/) { push @parts, _tilde_operator('conan', $2); next; } if ($part =~ /^(\^)(.*)/) { push @parts, _caret_operator('conan', $2); next; } push @parts, $part; } return join '|', @parts; } sub _raku_native_range { my $native = shift; my @parts = map { /(.*)\+$/ ? ">=$1" # 1.0+ : /^(\d+)\.\*/ ? ">=$1" # 1.* : /^(\d+)\.(\d+)\.\*/ ? ">=$1.0" # 1.0.* : $_ # 1.0 } grep {$_} split /\,/, $native; return join('|', grep {$_} @parts); } sub _gem_native_range { # Convert GEM version spec to VERS range my $native = shift; $native =~ s/\s+//g; # Specification From ... To (exclusive) # ">= 3.0" 3.0 ... ∞ # "~> 3.0" 3.0 ... 4.0 # "~> 3.0.0" 3.0.0 ... 3.1 # "~> 3.5" 3.5 ... 4.0 # "~> 3.5.0" 3.5.0 ... 3.6 # "~> 3" 3.0 ... 4.0 my @parts = grep {length} split /,/, $native; my @constraints = (); foreach my $part (@parts) { if ($part =~ /^(~>)(.*)/) { push @constraints, _tilde_operator('gem', $2); next; } push @constraints, $part; } return join('|', @constraints); } sub _semver_wildcards { my ($operator, $term) = @_; $term =~ s/\s+//g; # >= major.x if ($operator eq '>=' && $term =~ /^(\d+)\.x(?:\.x)?$/) { my $major = $1; return (">=$major.0.0", '<' . ($major + 1) . ".0.0"); } # >= major.minor.x if ($operator eq '>=' && $term =~ /^(\d+)\.(\d+)\.x$/) { my ($major, $minor) = ($1, $2); return (">=$major.$minor.0", "<$major." . ($minor + 1) . ".0"); } return (); } sub _tilde_operator { my ($scheme, $version) = @_; $version =~ s/\s+//; my $semver = parse_semver($version); my $has_prerelease = defined($semver->{prerelease}) && ($semver->{prerelease} ne ''); my ($major, $minor, $patch) = @{$semver}{qw[major minor patch]}; if ($has_prerelease && defined $patch) { my $lower = join('.', $major, $minor, $patch); my $upper = join('.', $major, $minor, $patch + 1); return join '|', ">=$version", "<$lower", ">=$lower", "<$upper"; } my ($upper_major, $upper_minor, $upper_patch) = ($major, $minor, $patch); if ($patch > 0) { ($upper_minor, $upper_patch) = ($minor + 1, 0); } elsif ($minor > 0) { ($upper_minor, $upper_patch) = ($minor + 1, 0); } else { ($upper_major, $upper_minor, $upper_patch) = ($major + 1, 0, 0); } my @upper = ($upper_major, $upper_minor, $upper_patch); SWITCH: for ($scheme) { if (/gem/) { pop @upper; last SWITCH; } if (/conan/) { # strip trailing zeros pop @upper while @upper && $upper[-1] == 0; $upper[-1] .= '-'; last SWITCH; } } # >= min and < max version return join '|', ">=$version", sprintf('<%s', join('.', @upper)); } sub _caret_operator { my ($scheme, $version) = @_; $version =~ s/\s+//; my $semver = parse_semver($version); my ($major, $minor, $patch) = @{$semver}{qw[major minor patch]}; my ($upper_major, $upper_minor, $upper_patch) = ($major, $minor, $patch); if ($major > 0) { ($upper_major, $upper_minor, $upper_patch) = ($major + 1, 0, 0); } elsif ($minor > 0) { ($upper_minor, $upper_patch) = ($minor + 1, 0); } else { $upper_patch = $patch + 1; } my @upper = ($upper_major, $upper_minor, $upper_patch); SWITCH: for ($scheme) { if (/conan/) { # strip trailing zeros pop @upper while @upper && $upper[-1] == 0; $upper[-1] .= '-'; last SWITCH; } } # >= min and < max version return join '|', ">=$version", sprintf('<%s', join('.', @upper)); } sub is_semver { ($_[0] =~ /$SEMVER_REGEXP/) ? 1 : 0; } sub parse_semver { my $version = shift; # FIX semver (1 --> 1.0.0 or 1.0 -> 1.0.0) my @parts = split /\./, $version; $version = join '.', (@parts, 0, 0) if (@parts == 1); $version = join '.', (@parts, 0) if (@parts == 2); my %semver = (major => 0, minor => 0, patch => 0, prerelease => undef, buildmetadata => undef); if ($version =~ /$SEMVER_REGEXP/) { %semver = map { $_ => $+{$_} } qw[major minor patch prerelease buildmetadata]; } return wantarray ? %semver : \%semver; } sub normalize_semver { return unless $_[0]; return hash_to_semver(parse_semver($_[0])); } sub hash_to_semver { my %hash = (major => 0, minor => 0, patch => 0, prerelease => undef, buildmetadata => undef, @_); my $semver = join '.', $hash{major}, $hash{minor}, $hash{patch}; $semver .= '-' . $hash{prerelease} if $hash{prerelease}; $semver .= '+' . $hash{buildmetadata} if $hash{buildmetadata}; return $semver; } sub version_compare { my ($scheme, $left, $right) = @_; require URI::VersionRange::Version; my $version_class = URI::VersionRange::Version->load($scheme); return $version_class->new($left) <=> $version_class->new($right); } # SemVer compare sub semver_version_compare { return 0 if $_[0] eq $_[1]; my $a = parse_semver($_[0]); my $b = parse_semver($_[1]); my $major_cmp = $a->{major} <=> $b->{major}; return $major_cmp if $major_cmp != 0; my $minor_cmp = $a->{minor} <=> $b->{minor}; return $minor_cmp if $minor_cmp != 0; my $patch_cmp = $a->{patch} <=> $b->{patch}; return $patch_cmp if $patch_cmp != 0; return -1 if defined $a->{prerelease} && !defined $b->{prerelease}; return 1 if !defined $a->{prerelease} && defined $b->{prerelease}; return 0 if !defined $a->{prerelease} && !defined $b->{prerelease}; if (defined $a->{prerelease} && defined $b->{prerelease}) { my @pre_a = split(/\./, $a->{prerelease}); my @pre_b = split(/\./, $b->{prerelease}); my $min = @pre_a < @pre_b ? scalar(@pre_a) : scalar(@pre_b); for my $i (0 .. $min - 1) { my $pre_cmp = _cmp_prerelease($pre_a[$i], $pre_b[$i]); return $pre_cmp if $pre_cmp != 0; } return @pre_a <=> @pre_b; } return 0; } sub _cmp_prerelease { my ($a, $b) = @_; if ($a =~ /^\d+$/ && $b =~ /^\d+$/) { return $a <=> $b; } if ($a =~ /^\d+$/ || $b =~ /^\d+$/) { return $a =~ /^\d+$/ ? -1 : 1; } return $a cmp $b; } # Optimized version of Sort::Version sub generic_version_compare { my ($a, $b) = @_; $a =~ s/^[vV]//; $b =~ s/^[vV]//; return 0 if $a eq $b; my @A = ($a =~ /([-.]|\d+|[^-.\d]+)/g); my @B = ($b =~ /([-.]|\d+|[^-.\d]+)/g); my ($A, $B); while (@A and @B) { $A = shift @A; $B = shift @B; return -1 if $A eq '-' && $B ne '-'; return 1 if $B eq '-' && $A ne '-'; return -1 if $A eq '.' && $B ne '.'; return 1 if $B eq '.' && $A ne '.'; next if $A eq '-' && $B eq '-'; next if $A eq '.' && $B eq '.'; if ($A =~ /^\d+$/ and $B =~ /^\d+$/) { my $num_cmp = ($A =~ /^0/ || $B =~ /^0/) ? ($A cmp $B) : ($A <=> $B); return $num_cmp if $num_cmp; } else { my $str_cmp = uc($A) cmp uc($B); return $str_cmp; } } return @A <=> @B; } # intdot compare sub intdot_version_compare { my ($a, $b) = @_; ($a) = ($a // '') =~ /^([0-9.]*)/; ($b) = ($b // '') =~ /^([0-9.]*)/; my @A = split /\./, $a; my @B = split /\./, $b; s/^0+// for @A; s/^0+// for @B; my $max = @A > @B ? scalar @A : scalar @B; for my $i (0 .. $max - 1) { my $a_part = $A[$i] || 0; my $b_part = $B[$i] || 0; my $cmp = ($a_part <=> $b_part); return $cmp if $cmp; } return 0; } # datetime compare sub datetime_version_compare { my ($a, $b) = @_; my ($a_epoch, $a_fraction) = _datetime_to_epoch($a); my ($b_epoch, $b_fraction) = _datetime_to_epoch($b); return ($a_epoch <=> $b_epoch) || ($a_fraction cmp $b_fraction); } sub _datetime_to_epoch { my $datetime = shift // ''; Carp::croak "Invalid datetime version '$datetime'" unless $datetime =~ $RFC3339_REGEXP; my %dt = %+; Carp::croak "Invalid datetime version '$datetime' (time-offset out of range)" if (defined $dt{offset_hour} && ($dt{offset_hour} > 23 || $dt{offset_minute} > 59)); my $epoch = eval { timegm($dt{second}, $dt{minute}, $dt{hour}, $dt{day}, $dt{month} - 1, $dt{year}) }; Carp::croak "Invalid datetime version '$datetime'" unless defined $epoch; if (defined $dt{offset_hour}) { my $offset = ($dt{offset_hour} * 60 + $dt{offset_minute}) * 60; $epoch -= $offset if ($dt{offset_sign} eq '+'); $epoch += $offset if ($dt{offset_sign} eq '-'); } my $fraction = $dt{fraction} // '000'; $fraction .= '0' x (9 - length $fraction); # nanoseconds return ($epoch, $fraction); } # lexicographic compare sub lexicographic_version_compare { my ($a, $b) = @_; utf8::encode($a); utf8::encode($b); return $a cmp $b; } 1; __END__ =encoding utf-8 =head1 NAME URI::VersionRange::Util - Utility for URI::VersionRange =head1 SYNOPSIS use URI::VersionRange::Util qw(native_range_to_vers); $vers = native_range_to_vers('npm', '~1.6.5 || >=1.7.2'); # vers:npm/>=1.6.5|<1.7.0|>=1.7.2 =head1 DESCRIPTION URL::VersionRange::Util is the utility package for URL::VersionRange. =over =item $string = native_range_to_vers($scheme, $native_range) Converts the specified native range string and returns the corresponding VERS string. $vers = native_range_to_vers('npm', '~1.6.5 || >=1.7.2'); # vers:npm/>=1.6.5|<1.7.0|>=1.7.2 Supported native range scheme: =over =item conan =item gem =item nginx =item npm =item nuget =item raku =item semver =back For other schemes, C will attempt to convert the native range string to a VERS string, but this may not work perfectly. =back =head2 Version compare utility =over =item $int = version_compare($scheme, $a, $b) Compare two versions using the scheme comparator class (see L). =item $int = generic_version_compare($a, $b) Generic comparison (split on numeric and alphabetic segments). =item $int = semver_version_compare($a, $b) Semantic Versioning 2.0.0 comparison (L). =item $int = datetime_version_compare($a, $b) RFC 3339 timestamp comparison based on the UTC instant (eg. C<2024-01-01T00:00:00Z == 2023-12-31T19:00:00-05:00>). Fractional seconds are supported up to 9 digits. Croaks on invalid timestamp. =item $int = intdot_version_compare($a, $b) Integers separated by dots (eg. C<10.234.5.12>). Leading zeros are ignored, a missing segment is equivalent to a zero segment and the interpretation stops at the first character that is not a digit or a dot. =item $int = lexicographic_version_compare($a, $b) Byte-wise comparison of the UTF-8 encoded versions, without normalisation. =back =head2 Semver utility =over =item $string = hash_to_semver(%hash) =item $bool = is_semver($string) =item $string = normalize_semver($string) =item %hash = parse_semver($string) =back =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/giterlizzi/perl-URI-PackageURL.git =head1 AUTHOR =over =item * Giuseppe Di Terlizzi =back =head1 LICENSE AND COPYRIGHT This software is copyright (c) 2022-2026 by Giuseppe Di Terlizzi. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut URI-PackageURL-2.26/lib/URI/VersionRange/Constraint.pm0000644000175000017500000001510415264504421021317 0ustar peppepeppepackage URI::VersionRange::Constraint; use feature ':5.10'; use strict; use utf8; use warnings; use Carp (); use Exporter qw(import); use overload '""' => 'to_string', fallback => 1; use URI::VersionRange::Version; our $VERSION = '2.26'; our %COMPARATOR = ( '=' => 'equal', '<' => 'less than', '<=' => 'less than or equal', '>' => 'greater than', '>=' => 'greater than or equal', ); my $PERCENT_ENCODE_REGEX = qr{[><=!*|% \x80-\xFF]}; sub new { my ($class, %params) = @_; my $comparator = delete $params{comparator} // '='; my $version = delete $params{version}; my $self = {comparator => $comparator, version => $version}; return bless $self, $class; } sub version { shift->{version} } sub comparator { shift->{comparator} } sub from_string { my ($class, $string) = @_; Carp::croak 'Invalid constraint: empty version' unless defined $string && length $string; # - For each : # - Determine if the starts with one of the two comparators: # - If it starts with ">=", then the comparator is ">=". # - If it starts with "<=", then the comparator is "<=". # - If it starts with "!=", then the comparator is "!=". # - If it starts with "<", then the comparator is "<". # - If it starts with ">", then the comparator is ">". # - Remove the comparator from string start. The remaining string is the version. # - Otherwise the version is the full string (which implies an equality comparator of "=") # - Tools should validate and report an error if the version is empty. # - If the version contains a percent "%" character, apply URL quoting rules to unquote this string. if ($string =~ /^(>=|<=|!=|<|>|=)(.*)/) { my ($comparator, $version) = ($1, $2); $version =~ s/^\s+//; Carp::croak 'Invalid constraint: empty version' unless length $version; return $class->new(comparator => $comparator, version => _percent_decode($version)); } return $class->new(comparator => '*') if ($string eq '*'); $string =~ s/^\s+//; return $class->new(comparator => '=', version => _percent_decode($string)); } sub to_string { my $self = shift; return '*' if $self->comparator eq '*'; return _percent_encode($self->version) if $self->comparator eq '='; return join '', $self->comparator, _percent_encode($self->version); } sub to_human_string { sprintf '%s %s', $COMPARATOR{$_[0]->comparator}, $_[0]->version } sub TO_JSON { {version => $_[0]->version, comparator => $_[0]->comparator} } sub _percent_encode { my $string = shift; utf8::encode($string); $string =~ s/($PERCENT_ENCODE_REGEX)/sprintf '%%%02X', ord $1/ge; return $string; } sub _percent_decode { my $string = shift; return $string unless $string =~ /%/; Carp::croak "Invalid percent-encoding in version '$string'" if $string =~ /%(?![0-9A-F]{2})/; my $version = $string; $version =~ s/%([0-9A-F]{2})/chr hex $1/ge; Carp::croak "Invalid UTF-8 encoding in version '$string'" unless utf8::decode($version); Carp::croak "Non-canonical percent-encoding in version '$string'" if _percent_encode($version) ne $string; return $version; } 1; __END__ =encoding utf-8 =head1 NAME URI::VersionRange::Constraint - Version Constraint for Version Range Specification =head1 SYNOPSIS use URI::VersionRange::Constraint; # OO-interface $constraint = URI::VersionRange::Constraint->new( comparator => '>', version => '2.00' ); say $constraint; # >2.00 # Parse "vers" string $constraint = URI::VersionRange::Constraint->from_string('>2.00'); =head1 DESCRIPTION A version range specifier (aka. "vers") is a URI string using the C URI-scheme with this syntax: vers:/||... C is the URI-scheme and is an acronym for "VErsion Range Specifier". The pipe "|" is used as a simple separator between C. Each C in this pipe-separated list contains a comparator and a version: This list of C are signposts in the version timeline of a package that specify version intervals. A C satisfies a version range specifier if it is contained within any of the intervals defined by these C. L =head2 OBJECT-ORIENTED INTERFACE =head3 B $constraint = URI::VersionRange::Constraint->new( comparator => STRING, version => STRING ) Create new B instance. =head3 B $constraint->comparator Return the comparator. =head3 B $constraint->version Return the version string. =head3 B $constraint->to_string Stringify C components. The version is percent-encoded using the vers-spec canonical form (only C<< > >>, C<< < >>, C<=>, C, C<*>, C<|>, C<%> and space characters are encoded). =head3 B $constraint->to_human_string Convert the constraint into human-readable format. $constraint = URI::VersionRange::Constraint->new( comparator => '>=', version => '2.10' ); say $constraint->to_human_string; # greater than or equal 2.10 =head3 B $constraint->TO_JSON Helper method for JSON modules (L, L, L, L, etc). use Mojo::JSON qw(encode_json); say encode_json($constraint); # {"comparator":">","version":"2.00"} =head3 B $constraint = URI::VersionRange::Constraint->from_string($constraint_string); Converts the given "constraint" string to L object. Croaks on error. =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/giterlizzi/perl-URI-PackageURL.git =head1 AUTHOR =over =item * Giuseppe Di Terlizzi =back =head1 LICENSE AND COPYRIGHT This software is copyright (c) 2022-2026 by Giuseppe Di Terlizzi. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut URI-PackageURL-2.26/lib/URI/VersionRange/App.pm0000644000175000017500000000665215264504421017723 0ustar peppepeppepackage URI::VersionRange::App; use feature ':5.10'; use strict; use warnings; use utf8; use Getopt::Long qw(GetOptionsFromArray :config gnu_compat); use Pod::Usage qw(pod2usage); use Carp (); use JSON::PP (); use Data::Dumper (); use URI::VersionRange (); our $VERSION = '2.26'; sub cli_error { my ($error) = @_; $error =~ s/ at .* line \d+.*//; print STDERR "ERROR: $error\n"; } sub run { my ($class, @args) = @_; # UTF-8 encoded command line arguments utf8::decode($_) for @args; my %options = (format => 'json'); GetOptionsFromArray( \@args, \%options, qw( help man v contains=s null|0 format=s json human-readable|h ) ) or pod2usage(-verbose => 0); pod2usage(-exitstatus => 0, -verbose => 2) if defined $options{man}; pod2usage(-exitstatus => 0, -verbose => 0) if defined $options{help}; if (defined $options{v}) { (my $progname = $0) =~ s/.*\///; say <<"VERSION"; $progname version $URI::VersionRange::VERSION Copyright 2022-2026, Giuseppe Di Terlizzi This program is part of the "URI-PackageURL" distribution and is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Complete documentation for $progname can be found using 'man $progname' or on the internet at . VERSION return 0; } my ($vers_string) = @args; pod2usage(-verbose => 1) if !$vers_string; $options{format} = 'json' if defined $options{json}; $options{format} = 'human-readable' if defined $options{'human-readable'}; my $vers = eval { URI::VersionRange->from_string($vers_string) }; if ($@) { cli_error($@); return 1; } if (defined $options{contains}) { my $vers_comparator_class = join '::', 'URI::VersionRange::Version', $vers->scheme; if (URI::VersionRange::Version->load($vers->scheme) eq 'URI::VersionRange::Version') { say STDERR 'WARNING: Loaded the fallback scheme class comparator.'; say STDERR ' The comparison may not work correctly!'; } my $res = eval { $vers->contains($options{contains}) }; if ($@) { cli_error($@); return 1; } say STDERR $res ? 'true' : 'false'; return !$res; } if ($options{format} eq 'json') { print JSON::PP->new->canonical->pretty(1)->convert_blessed(1)->encode($vers); return 0; } if ($options{format} eq 'human-readable') { say $vers->scheme; say "- " . $_->to_human_string for (@{$vers->constraints}); return 0; } } 1; __END__ =encoding utf-8 =head1 NAME URI::VersionRange::App - URI::VersionRange (vers) Command Line Interface =head1 SYNOPSIS use URI::VersionRange::App qw(run); run(\@ARGV); =head1 DESCRIPTION URI::VersionRange::App "Command Line Interface" helper module for C. =over =item URI::VersionRange->run(@args) Execute the command =item cli_error($error) Clean error =back =head1 AUTHOR L =head1 COPYRIGHT AND LICENSE Copyright © 2022-2026 L You may use and distribute this module according to the same terms that Perl is distributed under. =cut URI-PackageURL-2.26/lib/URI/PackageURL/0000755000175000017500000000000015264504726016160 5ustar peppepeppeURI-PackageURL-2.26/lib/URI/PackageURL/types/0000755000175000017500000000000015264504726017324 5ustar peppepeppeURI-PackageURL-2.26/lib/URI/PackageURL/types/otp-definition.json0000644000175000017500000000660615264504421023147 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/otp-definition.json", "type": "otp", "type_name": "BEAM/OTP Application", "description": "BEAM/OTP applications written in Elixir, Erlang, Gleam and other BEAM languages", "note": "- If the component was fetched from a Hex repository, prefer a ``hex`` purl\n because Hex provides a global, collision-free namespace that uniquely ties\n the version to the published source.\n- There is no default package repository. When the application can be\n fetched from a known location, add a general qualifier such as\n `repository_url`, `download_url` or `vcs_url`.", "repository": { "use_repository": false }, "namespace_definition": { "requirement": "prohibited", "note": "The component is unused and shall be empty" }, "name_definition": { "case_sensitive": false, "native_name": "name", "note": "The OTP application name from the `.app` file; it is case-insensitive and shall be lower-cased.", "requirement": "required" }, "version_definition": { "native_name": "version", "note": "The OTP application version (the `vsn` attribute).", "requirement": "optional" }, "subpath_definition": { "case_sensitive": false, "native_name": "May be added to reference a specific file or directory inside the OTP application.", "requirement": "optional" }, "qualifiers_definition": [ { "key": "repository_url", "requirement": "optional", "native_name": "Repository URL", "description": "The canonical origin of the OTP application source. This qualifier is optional, but it should be included whenever the origin is known, and should point to a trusted source repository." }, { "key": "platform", "requirement": "optional", "native_name": "platform", "description": "The target operating system for native code (e.g. ``linux``, ``darwin``, ``freebsd``, ``sunos``, ``win32``; case-insensitive)." }, { "key": "arch", "requirement": "optional", "native_name": "arch", "description": "The arch is the qualifiers key for a package architecture." } ], "examples": [ "pkg:otp/erts@10.6.3?platform=linux&arch=amd64&repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git", "pkg:otp/stdlib@3.11.2?repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git", "pkg:otp/crypto@4.6.4?platform=darwin&arch=x86_64&repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git", "pkg:otp/elixir@1.10.0?repository_url=https:%2F%2Fgithub.com%2Felixir-lang%2Felixir&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Felixir-lang%2Felixir.git", "pkg:otp/eex@1.10.0?repository_url=https:%2F%2Fgithub.com%2Felixir-lang%2Felixir&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Felixir-lang%2Felixir.git", "pkg:otp/logger@1.10.0?repository_url=https:%2F%2Fgithub.com%2Felixir-lang%2Felixir&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Felixir-lang%2Felixir.git", "pkg:otp/rebar@3.13.0?repository_url=https:%2F%2Fgithub.com%2Ferlang%2Frebar3&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Frebar3.git", "pkg:otp/hex@2.1.1?repository_url=https:%2F%2Fgithub.com%2Fhexpm%2Fhex&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fhexpm%2Fhex.git" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/golang-definition.json0000644000175000017500000000305715264504421023611 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/golang-definition.json", "type": "golang", "type_name": "Go package", "description": "Go packages", "repository": { "use_repository": true, "note": "There is no default package repository, this is implied in the namespace using the go get command conventions. In practice the Go module proxy acts as a public default repository." }, "namespace_definition": { "requirement": "required", "case_sensitive": true, "note": "The namespace shall be lowercased." }, "name_definition": { "requirement": "required", "case_sensitive": true, "note": "The name shall be lowercased." }, "subpath_definition": { "requirement": "optional", "note": "The subpath is used to point to a subpath inside a package." }, "note": "The current definition predates Go modules and has several practical problems, and in particular it is impossible to determine what is a module and what is a package short of having full access to the source code or making an API call to the Go module proxy.", "version_definition": { "requirement": "optional", "note": "The version is often empty when a commit is not specified and should be the commit in most cases when available." }, "examples": [ "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c", "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "pkg:golang/github.com/gorilla/context@234fd47e07d1004f0aed9c#api" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/alpm-definition.json0000644000175000017500000000352215264504421023270 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/alpm-definition.json", "type": "alpm", "type_name": "Arch Linux package", "description": "Arch Linux packages and other users of the libalpm/pacman package manager.", "repository": { "use_repository": true, "note": "There is no default package repository; this should be implied either from the distro qualifiers key or using a repository base url as repository_url qualifiers key." }, "namespace_definition": { "requirement": "required", "note": "The namespace is the vendor such as arch, arch32, archarm, manjaro or msys.", "case_sensitive": false, "native_name": "vendor", "normalization_rules": [ "It is not case sensitive and shall be lowercased." ] }, "name_definition": { "requirement": "required", "note": "The name is the package name. It is not case sensitive and shall be lowercased.", "case_sensitive": false, "native_name": "name" }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is the version of the package as specified in vercmp(8) at (https://man.archlinux.org/man/vercmp.8#DESCRIPTION as part of alpm.", "case_sensitive": true, "normalization_rules": [ "normalize version as specified in vercmp(8) at https://man.archlinux.org/man/vercmp.8#DESCRIPTION as part of alpm." ] }, "qualifiers_definition": [ { "key": "arch", "requirement": "optional", "native_name": "arch", "description": "The arch is the qualifiers key for a package architecture." } ], "examples": [ "pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64", "pkg:alpm/arch/python-pip@21.0-1?arch=any", "pkg:alpm/arch/containers-common@1:0.47.4-4?arch=x86_64" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/huggingface-definition.json0000644000175000017500000000255615264504421024614 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/huggingfaces-definition.json", "type": "huggingface", "type_name": "HuggingFace models", "description": "Hugging Face ML models", "repository": { "use_repository": true, "note": "The default repository is https://huggingface.co." }, "namespace_definition": { "requirement": "required", "case_sensitive": true, "native_name": "model repository username or organization", "note": "The namespace is the model repository username or organization, if present. It is case sensitive." }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "model repository name", "note": "The name is the model repository name. It is case sensitive." }, "version_definition": { "requirement": "optional", "case_sensitive": false, "native_name": "model revision Git commit hash", "note": "The version is the model revision Git commit hash. It is case insensitive and shall be lowercased in the package URL." }, "examples": [ "pkg:huggingface/distilbert/distilbert-base-uncased@043235d6088ecd3dd5fb5ca3592b6913fd516027", "pkg:huggingface/microsoft/deberta-v3-base@559062ad13d311b87b2c455e67dcd5f1c8f65111?repository_url=https:%2F%2Fhub-ci.huggingface.co" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/rpm-definition.json0000644000175000017500000000305715264504421023140 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/rpm-definition.json", "type": "rpm", "type_name": "RPM", "description": "RPM packages", "repository": { "use_repository": true, "note": "There is no default package repository, this should be implied either from the distro qualifiers key or using a repository base URL as repository_url qualifiers key." }, "namespace_definition": { "case_sensitive": false, "native_name": "vendor", "note": "The namespace is the vendor such as Fedora or OpenSUSE. It is not case sensitive and shall be lowercased.", "requirement": "required" }, "name_definition": { "requirement": "required", "case_sensitive": true, "note": "The name is the RPM name and is case sensitive.", "native_name": "name" }, "version_definition": { "requirement": "optional", "note": "The version is the combined version and release of an RPM.", "native_name": "version-release" }, "qualifiers_definition": [ { "key": "epoch", "requirement": "optional", "description": "(optional for RPMs) is a qualifier as its not required for unique identification, but when the epoch exists we strongly encourage using it." }, { "key": "arch", "description": "the qualifiers key for a package architecture." } ], "examples": [ "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "pkg:rpm/fedora/centerim@4.22.10-1.el6?arch=i686&epoch=1&distro=fedora-25" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/nuget-definition.json0000644000175000017500000000220515264504421023456 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/nuget-definition.json", "type": "nuget", "type_name": "NuGet", "description": "NuGet .NET packages", "repository": { "use_repository": true, "default_repository_url": "https://www.nuget.org" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "native_name": "version", "case_sensitive": true, "note": "Technically the name is case-preserving, but case-insensitive, and NuGet packages archives are case-preserving, while some NuGet API calls demand to lowercase the package name." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The NuGet version is semver-like but may contain more than three segments" }, "note": "There is no namespace per se even if the common convention is to use dot-separated package names where the first segment is namespace-like.", "examples": [ "pkg:nuget/EnterpriseLibrary.Common@6.0.1304" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/hex-definition.json0000644000175000017500000000215115264504421023120 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/hex-definition.json", "type": "hex", "type_name": "Hex", "description": "Hex packages", "repository": { "use_repository": true, "default_repository_url": "https://repo.hex.pm" }, "namespace_definition": { "requirement": "optional", "case_sensitive": false, "native_name": "organization for private packages", "note": "The namespace is optional; it may be used to specify the organization for private packages on hex.pm. It is not case sensitive and shall be lowercased." }, "name_definition": { "requirement": "required", "case_sensitive": false, "native_name": "name", "note": "The name is not case sensitive and shall be lowercased." }, "version_definition": { "requirement": "optional", "native_name": "version" }, "examples": [ "pkg:hex/jason@1.1.2", "pkg:hex/acme/foo@2.3.", "pkg:hex/phoenix_html@2.13.3#priv/static/phoenix_html.js", "pkg:hex/bar@1.2.3?repository_url=https:%2F%2Fmyrepo.example.com" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/opam-definition.json0000644000175000017500000000147415264504421023277 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/opam-definition.json", "type": "opam", "type_name": "Opam package", "description": "Opam packages", "repository": { "use_repository": true, "default_repository_url": "https://opam.ocaml.org" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "name", "note": "The name is case sensitive." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is package version." }, "examples": [ "pkg:opam/ocaml-base-compiler@5.2.0", "pkg:opam/git@3/16.1" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/hackage-definition.json0000644000175000017500000000171315264504421023722 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/hackage-definition.json", "type": "hackage", "type_name": "Haskell package", "description": "Haskell packages", "repository": { "use_repository": true, "default_repository_url": "https://hackage.haskell.org" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "name", "normalization_rules": [ "Apply kebab-case" ], "note": "The name is case sensitive and use kebab-case." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is package version." }, "examples": [ "pkg:hackage/a50@0.5", "pkg:hackage/AC-HalfInteger@1.2.1", "pkg:hackage/3d-graphics-examples@0.0.0.2" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/julia-definition.json0000644000175000017500000000253415264504421023445 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/julia-definition.json", "type": "julia", "type_name": "Julia Package", "description": "Julia packages", "repository": { "use_repository": true, "default_repository_url": "https://github.com/JuliaRegistries/General" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "native_name": "name", "case_sensitive": true, "note": "The name is the package name (without a `.jl` suffix). The name is case sensitive." }, "version_definition": { "native_name": "version", "requirement": "optional", "note": "The version is the package version." }, "qualifiers_definition": [ { "key": "uuid", "native_name": "uuid", "requirement": "required", "description": "The Julia package UUID." } ], "examples": [ "pkg:julia/Dates@1.9.0?uuid=ade2ca70-3891-5945-98fb-dc099432e06a", "pkg:julia/Dates?uuid=ade2ca70-3891-5945-98fb-dc099432e06a", "pkg:julia/RegisterQD@0.3.1?uuid=ac24ea0c-1830-11e9-18d4-81f172323054", "pkg:julia/RegisterQD@0.3.1?uuid=ac24ea0c-1830-11e9-18d4-81f172323054&repository_url=https:%2F%2Fgithub.com%2FHolyLab%2FHolyLabRegistry" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/apk-definition.json0000644000175000017500000000263515264504421023116 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/apk-definition.json", "type": "apk", "type_name": "APK-based packages", "description": "Alpine Linux APK-based packages", "repository": { "use_repository": true, "note": "There is no default package repository; this should be implied either from the distro qualifiers key or using a repository base url as repository_url qualifiers key." }, "namespace_definition": { "requirement": "required", "note": "The namespace is the vendor such as alpine or openwrt. It is not case sensitive and shall be lowercased.", "native_name": "vendor", "case_sensitive": false }, "name_definition": { "requirement": "required", "note": "The name is the package name. It is not case sensitive and shall be lowercased.", "native_name": "name", "case_sensitive": false }, "version_definition": { "requirement": "optional", "note": "The version is a package version as expected by apk.", "native_name": "version" }, "qualifiers_definition": [ { "key": "arch", "description": "The arch is the qualifiers key for a package architecture." } ], "examples": [ "pkg:apk/alpine/curl@7.83.0-r0?arch=x86", "pkg:apk/alpine/apk@2.12.9-r3?arch=x86" ], "note": "not to be confused with Android packages with a .apk extension." } URI-PackageURL-2.26/lib/URI/PackageURL/types/git-definition.json0000644000175000017500000000264015264504421023122 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/git-definition.json", "type": "git", "type_name": "Git", "description": "Git-based source packages", "repository": { "use_repository": true, "note": "There is no default package repository, this should be implied from namespace." }, "namespace_definition": { "requirement": "required", "case_sensitive": true, "native_name": "The url path to the git host", "note": "The source host for the git repository. See: https://git-scm.com/docs/git-clone.html#_git_urls" }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "repository name with owner", "note": "The path on the host to the git repository. See: https://git-scm.com/docs/git-clone.html#_git_urls" }, "version_definition": { "requirement": "optional", "native_name": "A git reference", "note": "The version is a git reference (https://git-scm.com/book/en/v2/Git-Internals-Git-References). Ideally a commit or tag." }, "examples": [ "pkg:git/codeberg.org/forgejo/forgejo@a72d2c07cfca03b55371089de6aa230d8c951fa0#options/locale_readme.md", "pkg:git/cygwin.com/cgit/newlib-cygwin@6d049c54c3314da31d9ffac133a6a2f2dfecaac2", "pkg:git/projects.blender.org/blender/blender.git", "pkg:git/gitlab.gnome.org/GNOME/adwaita-fonts" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/docker-definition.json0000644000175000017500000000166315264504421023612 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/docker-definition.json", "type": "docker", "type_name": "Docker image", "description": "for Docker images", "repository": { "use_repository": true, "default_repository_url": "https://hub.docker.com" }, "namespace_definition": { "note": "The namespace is the registry/user/organization if present.", "requirement": "optional" }, "name_definition": { "requirement": "required", "native_name": "name" }, "version_definition": { "requirement": "optional", "note": "The version should be the image id sha256 or a tag. Since tags can be moved, a sha256 image id is preferred." }, "examples": [ "pkg:docker/cassandra@latest", "pkg:docker/smartentry/debian@dc437cc87d10", "pkg:docker/customer/dockerimage@sha256%3A244fd47e07d10?repository_url=gcr.io" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/qpkg-definition.json0000644000175000017500000000164215264504421023302 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/qpkg-definition.json", "type": "qpkg", "type_name": "QNX package", "description": "QNX packages", "repository": { "use_repository": true, "note": "There is no default package repository, this should be implied either from the namespace or using a repository base URL as repository_url qualifiers key." }, "namespace_definition": { "case_sensitive": false, "native_name": "vendor", "note": "The namespace is the vendor of the package. It is not case sensitive and shall be lowercased.", "requirement": "required" }, "name_definition": { "requirement": "required", "native_name": "name" }, "examples": [ "pkg:qpkg/blackberry/com.qnx.sdp@7.0.0.SGA201702151847", "pkg:qpkg/blackberry/com.qnx.qnx710.foo.bar.qux@0.0.4.01449T202205040833L" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/cocoapods-definition.json0000644000175000017500000000226415264504421024313 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/cocoapods-definition.json", "type": "cocoapods", "type_name": "CocoaPods", "description": "CocoaPods pods", "repository": { "use_repository": true, "default_repository_url": "https://cdn.cocoapods.org/" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "pod name", "note": "The name is the pod name and is case sensitive, cannot contain whitespace, a plus (+) character, or begin with a period (.)." }, "version_definition": { "requirement": "optional", "native_name": "package version", "note": "The version is the package version." }, "subpath_definition": { "requirement": "optional", "note": "The purl subpath is used to represent a pods subspec (if present)." }, "examples": [ "pkg:cocoapods/AFNetworking@4.0.1", "pkg:cocoapods/MapsIndoors@3.24.0", "pkg:cocoapods/ShareKit@2.0#Twitter", "pkg:cocoapods/GoogleUtilities@7.5.2#NSData+zlib" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/swift-definition.json0000644000175000017500000000166015264504421023474 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/swift-definition.json", "type": "swift", "type_name": "Swift packages", "description": "Swift packages", "repository": { "use_repository": true, "note": "There is no default package repository, this should be implied from namespace." }, "namespace_definition": { "requirement": "required", "note": "The namespace is source host and user/organization and is required.", "case_sensitive": true }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "repository name" }, "version_definition": { "requirement": "optional", "case_sensitive": true, "native_name": "package version" }, "examples": [ "pkg:swift/github.com/Alamofire/Alamofire@5.4.3", "pkg:swift/github.com/RxSwiftCommunity/RxFlow@2.12.4" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/bazel-definition.json0000644000175000017500000000413115264504421023431 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/bazel-definition.json", "type": "bazel", "type_name": "Bazel modules", "description": "Bazel modules as specified at https://bazel.build/external/module", "repository": { "use_repository": true, "default_repository_url": "https://bcr.bazel.build", "note": "The default repository is the Bazel Central Registry (BCR)" }, "namespace_definition": { "requirement": "prohibited", "note": "Bazel modules do not use namespaces" }, "name_definition": { "requirement": "required", "note": "The name as defined in the MODULE.bazel file" }, "version_definition": { "requirement": "optional", "note": "The version as defined in the MODULE.bazel file. Uses a relaxed semantic versioning format described at https://bazel.build/external/module#version-format." }, "subpath_definition": { "requirement": "optional", "native_name": "label", "note": "The optional subpath MAY refer to a label of a particular package or target in the module (https://bazel.build/concepts/labels). The label shall not include a repo name and the leading '//' shall be omitted. When referring to targets, the label shall include the name of the target, separated from the package by ':'. If there is no target name, subpath is assumed to refer to the whole package." }, "qualifiers_definition": [ { "key": "repository_url", "native_name": "registry", "requirement": "optional", "default_value": "https://bcr.bazel.build", "description": "The URL of the registry that hosts this Bazel module. If not specified, it defaults to the BCR URL." } ], "examples": [ "pkg:bazel/rules_java@7.8.0", "pkg:bazel/curl@8.8.0.bcr.1", "pkg:bazel/curl@8.8.0?repository_url=https:%2F%2Fexample.org%2Fbazel-registry", "pkg:bazel/rules_java@8.5.0#java/runfiles", "pkg:bazel/rules_java@8.5.0#java/runfiles:runfiles", "pkg:bazel/rules_go@0.48.0#go" ], "reference_urls": [ "https://bazel.build/external/module" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/composer-definition.json0000644000175000017500000000176115264504421024171 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/composer-definition.json", "type": "composer", "type_name": "Composer", "description": "Composer PHP packages", "repository": { "use_repository": true, "default_repository_url": "https://packagist.org" }, "namespace_definition": { "requirement": "required", "case_sensitive": false, "native_name": "vendor", "note": "The namespace is the vendor. The namespace is not case sensitive and shall be lowercased." }, "name_definition": { "requirement": "required", "case_sensitive": false, "native_name": "name", "note": "The name is not case sensitive and shall be lowercased. Private, local packages may have no name. In this case you cannot create a purl for these." }, "version_definition": { "requirement": "optional", "native_name": "version" }, "examples": [ "pkg:composer/laravel/laravel@5.5.0" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/conan-definition.json0000644000175000017500000000531415264504421023436 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/conan-definition.json", "type": "conan", "type_name": "Conan C/C++ packages", "description": "Conan C/C++ packages. The purl is designed to closely resemble the Conan-native /@/ syntax for package references as specified in https://docs.conan.io/en/1.46/cheatsheet.html#package-terminology", "repository": { "use_repository": true, "default_repository_url": "https://center.conan.io" }, "namespace_definition": { "requirement": "optional", "native_name": "vendor", "note": "The vendor of the package." }, "name_definition": { "requirement": "required", "native_name": "package-name", "note": "The Conan ." }, "version_definition": { "requirement": "optional", "native_name": "package-version", "note": "The Conan ." }, "qualifiers_definition": [ { "key": "user", "native_name": "user", "requirement": "optional", "description": "The Conan . Only required if the Conan package was published with ." }, { "key": "channel", "native_name": "channel", "requirement": "optional", "description": "The Conan . Only required if the Conan package was published with Conan ." }, { "key": "rrev", "native_name": "recipe revision", "requirement": "optional", "description": "The Conan recipe revision (optional). If omitted, the purl refers to the latest recipe revision available for the given version." }, { "key": "prev", "native_name": "package revision", "requirement": "optional", "description": "The Conan package revision (optional). If omitted, the purl refers to the latest package revision available for the given version and recipe revision." } ], "note": "Additional qualifiers can be used to distinguish Conan packages with different settings or options, e.g. os=Linux, build_type=Debug or shared=True. If no additional qualifiers are used to distinguish Conan packages build with different settings or options, then the purl is ambiguous and it is up to the user to work out which package is being referred to (e.g. with context information).", "examples": [ "pkg:conan/openssl@3.0.3", "pkg:conan/openssl.org/openssl@3.0.3?channel=stable&user=bincrafters", "pkg:conan/openssl.org/openssl@3.0.3?arch=x86_64&build_type=Debug&compiler=Visual%20Studio&compiler.runtime=MDd&compiler.version=16&os=Windows&prev=b429db8a0e324114c25ec387bfd8281f330d7c5c&rrev=93a82349c31917d2d674d22065c7a9ef9f380c8e&shared=True" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/github-definition.json0000644000175000017500000000212415264504421023616 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/github-definition.json", "type": "github", "type_name": "GitHub", "description": "GitHub-based packages", "repository": { "use_repository": true, "default_repository_url": "https://github.com" }, "namespace_definition": { "requirement": "required", "case_sensitive": false, "native_name": "user or organization", "note": "The namespace is the user or organization. It is not case sensitive and shall be lowercased." }, "name_definition": { "requirement": "required", "case_sensitive": false, "native_name": "repository name", "note": "The name is the repository name. It is not case sensitive and shall be lowercased." }, "version_definition": { "requirement": "optional", "native_name": "commit or tag", "note": "The version is a commit or tag." }, "examples": [ "pkg:github/package-url/purl-spec@244fd47e07d1004", "pkg:github/package-url/purl-spec@244fd47e07d1004#everybody/loves/dogs" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/maven-definition.json0000644000175000017500000000441115264504421023443 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/maven-definition.json", "type": "maven", "type_name": "Maven", "description": "PURL type for Maven JARs and related artifacts.", "repository": { "use_repository": true, "default_repository_url": "https://repo.maven.apache.org/maven2/", "note": "The Maven Central repository is the public repository for Apache Maven packages. This repository is also mirrored at https://repo1.maven.org/maven2/. Use the standard repository_url qualifier to point to another repository" }, "namespace_definition": { "requirement": "required", "case_sensitive": true, "native_name": "groupId", "note": "The group id is the namespace." }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "artifactId", "note": "The artifact id is the name." }, "version_definition": { "requirement": "optional", "case_sensitive": true, "native_name": "version" }, "qualifiers_definition": [ { "key": "classifier", "requirement": "optional", "description": "The maven classifier as defined in the POM documentation.", "native_name": "classifier" }, { "key": "type", "requirement": "optional", "description": "The maven type as defined in the POM documentation. Note that Maven uses a concept / coordinate called packaging which does not map directly 1:1 to a file extension. In this use case, we need to construct a link to one of many possible artifacts. Maven itself uses type in a dependency declaration when needed to disambiguate between them.", "native_name": "type", "default_value": "jar" } ], "examples": [ "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1", "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom", "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources", "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=zip&classifier=dist", "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x86&type=dll", "pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x64&type=dll", "pkg:maven/groovy/groovy@1.0?repository_url=https:%2F%2Fmaven.google.com" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/mlflow-definition.json0000644000175000017500000000433315264504421023640 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/mlflow-definition.json", "type": "mlflow", "type_name": "MLflow", "description": "MLflow ML models (Azure ML, Databricks, etc.)", "repository": { "use_repository": true, "note": "The repository is the MLflow tracking URI. There is no default. Some examples include Azure ML https://.api.azureml.ms/mlflow/v1.0/subscriptions//resourceGroups//providers/Microsoft.MachineLearningServices/workspaces/ and Azure Databricks https://adb-..azuredatabricks.net/api/2.0/mlflow and AWS Databricks https://dbc--.cloud.databricks.com/api/2.0/mlflow and GCP Databricks https://..gcp.databricks.com/api/2.0/mlflow" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "note": "The name is the model name. Case sensitivity depends on the server implementation, such as for Azure ML, it is case sensitive and shall be kept as-is in the package URL; and for Databricks, it is case insensitive and shall be lowercased in the package URL." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is the model version." }, "qualifiers_definition": [ { "key": "model_uuid", "native_name": "model_uuid", "description": "model_uuid as defined in the MLflow documentation." }, { "key": "run_id", "native_name": "run_id", "description": "run_id as defined in the MLflow documentation." } ], "examples": [ "pkg:mlflow/creditfraud@3?repository_url=https:%2F%2Fwestus2.api.azureml.ms%2Fmlflow%2Fv1.0%2Fsubscriptions%2Fa50f2011-fab8-4164-af23-c62881ef8c95%2FresourceGroups%2FTestResourceGroup%2Fproviders%2FMicrosoft.MachineLearningServices%2Fworkspaces%2FTestWorkspace", "pkg:mlflow/trafficsigns@10?model_uuid=36233173b22f4c89b451f1228d700d49&run_id=410a3121-2709-4f88-98dd-dba0ef056b0a&repository_url=https:%2F%2Fadb-5245952564735461.0.azuredatabricks.net%2Fapi%2F2.0%2Fmlflow" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/luarocks-definition.json0000644000175000017500000000347715264504421024173 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/luarocks-definition.json", "type": "luarocks", "type_name": "LuaRocks", "description": "Lua packages installed with LuaRocks", "repository": { "use_repository": true }, "namespace_definition": { "case_sensitive": false, "native_name": "user manifest", "note": "The user manifest under which the package is registered. If not given, the root manifest is assumed. It is case insensitive, but lowercase is encouraged since namespaces are normalized to ASCII lowercase.", "requirement": "optional" }, "name_definition": { "requirement": "required", "case_sensitive": false, "native_name": "name", "note": "The LuaRocks package name. It is case insensitive, but lowercase is encouraged since package names are normalized to ASCII lowercase." }, "version_definition": { "requirement": "optional", "case_sensitive": true, "native_name": "full package version, including module version and rockspec revision", "note": "The full LuaRocks package version, including module version and rockspec revision. It is case sensitive, and lowercase shall be used to avoid compatibility issues with older LuaRocks versions. The full version number is required to uniquely identify a version." }, "qualifiers_definition": [ { "key": "repository_url", "description": "The LuaRocks rocks server to be used; useful in case a private server is used (optional). If omitted, https://luarocks.org as default server is assumed." } ], "examples": [ "pkg:luarocks/luasocket@3.1.0-1", "pkg:luarocks/hisham/luafilesystem@1.8.0-1", "pkg:luarocks/username/packagename@0.1.0-1?repository_url=https:%2F%2Fexample.com%2Fprivate_rocks_server%2F" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/cpan-definition.json0000644000175000017500000000633015264504421023260 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/cpan-definition.json", "type": "cpan", "type_name": "CPAN", "description": "Perl package distributions published on CPAN", "repository": { "use_repository": true, "default_repository_url": "https://www.cpan.org/" }, "namespace_definition": { "requirement": "optional", "native_name": "CPAN author/publisher ID (CPANID)", "note": "When present, it represents the CPAN author/publisher ID (CPANID) and shall be uppercase. It is appropriate to use 'namespace' for compatibility with existing CPAN purl producers/consumers or when a workflow explicitly requires author-scoped identifiers. For new identifiers, the 'author' qualifier is the preferred way to specify the author/publisher. When 'version' is omitted, author scoping via 'namespace' may be ambiguous because a distribution can change maintainers over time." }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "distribution name", "note": "The name is the distribution name and is case sensitive. A distribution name shall not contain the string '::'" }, "version_definition": { "note": "The version is the distribution version", "requirement": "optional", "native_name": "version" }, "qualifiers_definition": [ { "key": "author", "requirement": "optional", "description": "CPAN author/publisher ID (CPANID)" }, { "key": "distpath", "requirement": "optional", "description": "Repository-relative path (not a URL) to the distribution archive or directory, typically under 'authors/id/...'" }, { "key": "repository_url", "requirement": "optional", "description": "CPAN/MetaCPAN/BackPAN/DarkPAN repository base URL" }, { "key": "download_url", "requirement": "optional", "description": "URL of package or distribution" }, { "key": "vcs_url", "requirement": "optional", "description": "extra URL for a package version control system" }, { "key": "ext", "requirement": "optional", "description": "distribution file extension", "default_value": "tar.gz" } ], "note":"The PURL 'name' shall be the CPAN distribution name (case sensitive) and shall not contain the '::' separator (module name). The CPAN author/publisher ID (CPANID) is OPTIONAL: when needed, it should be provided using the 'author' qualifier. The PURL 'namespace' is OPTIONAL and, when present, represents the CPANID and shall be uppercase; it may be used for compatibility with existing identifiers or tooling. When PURL 'version' is omitted, author scoping (via 'author' qualifier or 'namespace') may be ambiguous because a distribution can change maintainers over time.", "examples": [ "pkg:cpan/perl@5.42", "pkg:cpan/DBI@1.646", "pkg:cpan/SBOM-CycloneDX", "pkg:cpan/URI-PackageURL?author=GDT", "pkg:cpan/libwww-perl@6.76?author=OALDERS", "pkg:cpan/DateTime@1.55?author=DROLSKY&repository_url=backpan.perl.org", "pkg:cpan/Term-Gnuplot@0.90380906?distpath=authors%2Fid%2FI%2FIL%2FILYAZ%2Fmodules%2FTerm-Gnuplot-0.90380906.zip" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/deb-definition.json0000644000175000017500000000357215264504421023076 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/deb-definition.json", "type": "deb", "type_name": "Debian package", "description": "Debian packages, Debian derivatives, and Ubuntu packages", "repository": { "use_repository": true, "note": "There is no default package repository, this should be implied either from the distro qualifiers key or using a base url as a repository_url qualifiers key." }, "namespace_definition": { "native_name": "vendor", "case_sensitive": false, "note": "The namespace is the \"vendor\" name such as \"debian\" or \"ubuntu\". It is not case sensitive and shall be lowercased.", "requirement": "required" }, "name_definition": { "requirement": "required", "native_name": "name", "case_sensitive": false, "note": "The name is not case sensitive and shall be lowercased." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is the version of the binary (or source) package." }, "qualifiers_definition": [ { "key": "arch", "description": "arch is the qualifiers key for a package architecture. The special value arch=source identifies a Debian source package that usually consists of a Debian Source control file (.dsc) and corresponding upstream and Debian sources. The dpkg-query command can print the name and version of the corresponding source package of a binary package, e.g. dpkg-query -f ${source:Package} ${source:Version} -W " } ], "examples": [ "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "pkg:deb/debian/dpkg@1.19.0.4?arch=amd64&distro=stretch", "pkg:deb/ubuntu/dpkg@1.19.0.4?arch=amd64", "pkg:deb/debian/attr@1:2.4.47-2?arch=source", "pkg:deb/debian/attr@1:2.4.47-2%2Bb1?arch=amd64" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/conda-definition.json0000644000175000017500000000225315264504421023423 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/conda-definition.json", "type": "conda", "type_name": "Conda", "description": "conda is for Conda packages", "repository": { "use_repository": true, "default_repository_url": "https://repo.anaconda.com" }, "namespace_definition": { "note": "there is no namspace", "requirement": "prohibited" }, "name_definition": { "requirement": "required", "native_name": "name", "note": "The name is the package name." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is the package version." }, "qualifiers_definition": [ { "key": "build", "description": "the build string." }, { "key": "channel", "description": "the package stored location." }, { "key": "subdir", "description": "the associated platform." }, { "key": "type", "description": "package type." } ], "examples": [ "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/chrome-extension-definition.json0000644000175000017500000000422715264504421025631 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/chrome-definition.json", "type": "chrome-extension", "type_name": "Chrome Browser Extensions", "description": "Chrome Browser Extensions. Note: there are currently no officially documented APIs, further there appears to be no way to query different versions of a package - there only seems to be responses on the latest version. To this end the version component of a chrome purl can be optional. Two known data sources are a sitemap which can be crawled to discover (some) extensions at https://chromewebstore.google.com/sitemap, and an 'updatecheck' API which you can read about here https://github.com/Rob--W/crxviewer , and perhaps here https://github.com/chromium/chromium/blob/main/docs/updater/protocol_3_1.md", "repository": { "use_repository": true, "default_repository_url": "https://chromewebstore.google.com/", "note": "There is no documented API, only a sitemap and 'updatecheck' endpoints." }, "namespace_definition": { "requirement": "prohibited", "note": "There is no namespace" }, "name_definition": { "native_name": "extension_id", "requirement": "required", "permitted_characters": "^[a-p]{32}$", "case_sensitive": false, "note": "The name is 32 characters in the range a-p (base16-encoded with letters instead of hex digits) and is case insensitive. This is not the same as the display name which is human readable and may vary with locale." }, "version_definition": { "native_name": "version", "requirement": "optional", "permitted_characters": "^\\d+(\\.\\d+){0,3}$", "note": "The chrome extension version is semver-like but 1-4 segments. See https://developer.chrome.com/docs/extensions/reference/manifest/version" }, "examples": [ "pkg:chrome-extension/hlepfoohegkhhmjieoechaddaejaokhf@25.7.1", "pkg:chrome-extension/dncgedbnidfkppmdgfgidcepclnokpkb@6.0.2.3611", "pkg:chrome-extension/kanfjhdeebkfgkbmnfknhejpadhlmiab@0.6", "pkg:chrome-extension/dlpngalgnefjeiefhmpklpfiohadpglk@1", "pkg:chrome-extension/dlpngalgnefjeiefhmpklpfiohadpglk" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/gem-definition.json0000644000175000017500000000201715264504421023105 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/gem-definition.json", "type": "gem", "type_name": "RubyGems", "description": "RubyGems", "repository": { "use_repository": true, "default_repository_url": "https://rubygems.org" }, "namespace_definition": { "requirement": "prohibited", "note": "There is no namespace" }, "name_definition": { "requirement": "required", "native_name": "name" }, "version_definition": { "requirement": "optional", "native_name": "version" }, "qualifiers_definition": [ { "key": "platform", "native_name": "platform", "requirement": "optional", "default_value": "ruby", "description": "qualifiers key is used to specify an alternative platform. such as java for JRuby. The implied default is ruby for Ruby MRI." } ], "examples": [ "pkg:gem/ruby-advisory-db-check@0.12.4", "pkg:gem/jruby-launcher@1.1.2?platform=java" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/swid-definition.json0000644000175000017500000000611415264504421023305 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/swid-definition.json", "type": "swid", "type_name": "Software Identification (SWID) Tag", "description": "PURL type for ISO-IEC 19770-2 Software Identification (SWID) tags.", "repository": { "use_repository": false, "note": "There is no default package repository." }, "namespace_definition": { "requirement": "optional", "case_sensitive": true, "native_name": "softwareCreator", "note": "The namespace is the optional name and regid of the entity with a role of softwareCreator. If specified, name is required and is the first segment in the namespace. If regid is known, it shall be specified as the second segment in the namespace. A maximum of two segments are supported." }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "SoftwareIdentity/name", "note": "The name is the name as defined in the SWID SoftwareIdentity element." }, "version_definition": { "requirement": "optional", "case_sensitive": true, "native_name": "SoftwareIdentity/version", "note": "The version is the version as defined in the SWID SoftwareIdentity element." }, "qualifiers_definition": [ { "key": "tag_id", "requirement": "required", "description": "The qualifier tag_id shall not be empty and corresponds to the tagId as defined in the SWID SoftwareIdentity element. Per the SWID specification, GUIDs are recommended. If a GUID is used, it shall be lowercase. If a GUID is not used, the tag_id qualifier is case aware but not case sensitive." }, { "key": "tag_version", "requirement": "optional", "description": "The qualifier tag_version is an optional integer and corresponds to the tagVersion as defined in the SWID SoftwareIdentity element. If not specified, defaults to 0." }, { "key": "patch", "requirement": "optional", "description": "The qualifier patch is optional and corresponds to the patch as defined in the SWID SoftwareIdentity element. If not specified, defaults to false." }, { "key": "tag_creator_name", "requirement": "optional", "description": "The qualifier tag_creator_name is optional. If the tag creator is different from the software creator, the tag_creator_name qualifier should be specified." }, { "key": "tag_creator_regid", "requirement": "optional", "description": "The qualifier tag_creator_regid is optional. If the tag creator is different from the software creator, the tag_creator_regid qualifier should be specified." } ], "note": "Use of known qualifiers key/value pairs such as download_url can be used to specify where the package was retrieved from.", "examples": [ "pkg:swid/Acme/example.com/Enterprise%2BServer@1.0.0?tag_id=75b8c285-fa7b-485b-b199-4745e3004d0d", "pkg:swid/Fedora@29?tag_id=org.fedoraproject.Fedora-29", "pkg:swid/Adobe%2BSystems%2BIncorporated/Adobe%2BInDesign@CC?tag_id=CreativeCloud-CS6-Win-GM-MUL" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/pub-definition.json0000644000175000017500000000216315264504421023125 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/pub-definition.json", "type": "pub", "type_name": "Pub", "description": "Dart and Flutter pub packages", "repository": { "use_repository": true, "default_repository_url": "https://pub.dartlang.org" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "native_name": "name", "case_sensitive": false, "permitted_characters": "^[a-z0-9_]", "normalization_rules": [ "Replace non-[a-z] letters, non-[0-9] digits with underscore _" ], "note": "Pub normalizes all package names to be lowercase and using underscores. The only allowed characters are [a-z0-9_]. More information on pub naming and versioning is available in the pubspec documentation https://dart.dev/tools/pub/pubspec" }, "version_definition": { "requirement": "optional", "native_name": "version" }, "examples": [ "pkg:pub/characters@1.2.0", "pkg:pub/flutter@0.0.0" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/bitnami-definition.json0000644000175000017500000000274415264504421023767 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/bitnami-definition.json", "type": "bitnami", "type_name": "Bitnami", "description": "Bitnami-based packages", "repository": { "use_repository": true, "default_repository_url": "https://downloads.bitnami.com/files/stacksmith" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "note": "The name is the component name. It shall be lowercased.", "case_sensitive": false, "native_name": "name" }, "version_definition": { "requirement": "optional", "native_name": "full package version, including version and revision", "note": "The version is the full Bitnami package version, including version and revision." }, "qualifiers_definition": [ { "key": "arch", "description": "The arch is the qualifiers key for a package architecture. Available values are amd64 (default) and arm64.", "default_value": "amd64" }, { "key": "distro", "description": "The distro is the qualifiers key for the distribution associated to the package." } ], "examples": [ "pkg:bitnami/wordpress?distro=debian-12", "pkg:bitnami/wordpress@6.2.0?distro=debian-12", "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=debian-12", "pkg:bitnami/wordpress@6.2.0?arch=arm64&distro=photon-4" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/oci-definition.json0000644000175000017500000000444715264504421023120 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/oci-definition.json", "type": "oci", "type_name": "OCI image", "description": "For artifacts stored in registries that conform to the OCI Distribution Specification https://github.com/opencontainers/distribution-spec including container images built by Docker and others", "repository": { "use_repository": true, "note": "There is no canonical package repository for OCI artifacts. Therefore oci purls shall be registry agnostic by default. To specify the repository, provide a repository_url value." }, "namespace_definition": { "requirement": "prohibited", "note": "OCI purls do not contain a namespace, although, repository_url may contain a namespace as part of the physical location of the package." }, "name_definition": { "requirement": "required", "case_sensitive": false, "note": "The name is not case sensitive and shall be lowercased. The name is the last fragment of the repository name. For example if the repository name is library/debian then the name is debian." }, "version_definition": { "requirement": "optional", "case_sensitive": false, "note": "The version is the sha256:hex_encoded_lowercase_digest of the artifact and is required to uniquely identify the artifact." }, "qualifiers_definition": [ { "key": "arch", "description": "key for a package architecture, when relevant." }, { "key": "repository_url", "description": "A repository URL where the artifact may be found, but not intended as the only location. This value is encouraged to identify a location the content may be fetched." }, { "key": "tag", "description": "artifact tag that may have been associated with the digest at the time." } ], "reference_urls": [ "https://github.com/opencontainers/distribution-spec" ], "examples": [ "pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=docker.io%2Flibrary%2Fdebian&arch=amd64&tag=latest", "pkg:oci/debian@sha256%3A244fd47e07d10?repository_url=ghcr.io%2Fdebian&tag=bullseye", "pkg:oci/static@sha256%3A244fd47e07d10?repository_url=gcr.io%2Fdistroless%2Fstatic&tag=latest", "pkg:oci/hello-wasm@sha256:244fd47e07d10?tag=v1" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/npm-definition.json0000644000175000017500000000252715264504421023135 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/npm-definition.json", "type": "npm", "type_name": "Node NPM packages", "description": "PURL type for npm packages.", "repository": { "use_repository": true, "default_repository_url": "https://registry.npmjs.org/", "note": "The default repository is the npm Registry at https://registry.npmjs.org" }, "namespace_definition": { "requirement": "optional", "case_sensitive": true, "native_name": "scope", "note": "The namespace is used for the scope of a scoped NPM package. The npm scope @ sign prefix is always percent encoded, as it was in the early days of npm scope." }, "name_definition": { "requirement": "required", "case_sensitive": true, "native_name": "name", "note": "The package.json spec changed in 2015 to require that a new package 'shall not have uppercase letters in the name', but old packages with mixed case names were \"grandfathered in\"." }, "version_definition": { "requirement": "optional", "case_sensitive": true, "native_name": "version" }, "examples": [ "pkg:npm/foobar@12.3.1", "pkg:npm/%40angular/animation@12.3.1", "pkg:npm/mypackage@12.4.5?vcs_url=git:%2F%2Fhost.com%2F%2Fpath%2Fto%2Frepo.git%404345abcd34343" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/bitbucket-definition.json0000644000175000017500000000204315264504421024310 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/bitbucket-definition.json", "type": "bitbucket", "type_name": "Bitbucket", "description": "Bitbucket-based packages", "repository": { "use_repository": true, "default_repository_url": "https://bitbucket.org" }, "namespace_definition": { "requirement": "required", "note": "The namespace is the user or organization. It is not case sensitive and shall be lowercased.", "native_name": "user or organization", "case_sensitive": false }, "name_definition": { "requirement": "required", "note": "The name is the repository name. It is not case sensitive and shall be lowercased.", "native_name": "repository name", "case_sensitive": false }, "version_definition": { "requirement": "optional", "note": "The version is a commit or tag.", "native_name": "commit or tag" }, "examples": [ "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/yocto-definition.json0000644000175000017500000000475015264504421023500 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/yocto-definition.json", "type": "yocto", "type_name": "Yocto Project", "description": "Yocto Project recipes", "repository": { "use_repository": true, "note": "There is no default package repository. The classifier repository_url is optional." }, "namespace_definition": { "case_sensitive": false, "native_name": "layer", "note": "The namespace is the name of the layer which provides the recipe. The layer name as specified in the BBFILE_COLLECTIONS variable in conf/layer.conf of the layer.", "requirement": "optional" }, "name_definition": { "requirement": "required", "case_sensitive": true, "note": "The name of the package with common prefixes and suffixes removed, also known as BPN (https://docs.yoctoproject.org/ref-manual/variables.html#term-BPN) in a yocto recipe.", "native_name": "BPN" }, "version_definition": { "requirement": "optional", "note": "The version of the package also known as PV (https://docs.yoctoproject.org/ref-manual/variables.html#term-PV>) in a yocto recipe.", "native_name": "PV" }, "qualifiers_definition": [ { "key": "repository_url", "requirement": "optional", "description": "The GIT URL of the layer. In example: https:%2F%2Fgit.openembedded.org%2Fopenembedded-core or https:%2F%2Fgithub.com%2Fakuster%2Fmeta-odroid. The URL scheme is mandatory and shall be one of https, http, ssh, or git." }, { "key": "layer_version", "requirement": "optional", "description": "layer_version is the version of the yocto layer which is a SHA1 commit, tag or branch of the yocto layer GIT repository. It should support also short commits (https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#_short_sha_1)." } ], "examples": [ "pkg:yocto/core/glibc@2.35", "pkg:yocto/core/glibc@2.35&repository_url=https:%2F%2Fgit.openembedded.org%2Fopenembedded-core&layer_version=kirkstone", "pkg:yocto/core/glibc@2.35&repository_url=https:%2F%2Fgit.openembedded.org%2Fopenembedded-core&layer_version=25ba9895b9", "pkg:yocto/core/glibc@2.35&repository_url=https:%2F%2Fgit.openembedded.org%2Fopenembedded-core&layer_version=25ba9895b98715adb66a06e50f644aea2e2c9eb6", "pkg:yocto/xilinx/u-boot-xlnx-uenv@1.0.0", "pkg:yocto/odroid-layer/emmc@1.0.0?layer_version=4e07fab&repository_url=https:%2F%2Fgithub.com%2Fakuster%2Fmeta-odroid" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/pypi-definition.json0000644000175000017500000000405515264504421023322 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/pypi-definition.json", "type": "pypi", "type_name": "PyPI", "description": "Python packages", "repository": { "use_repository": true, "default_repository_url": "https://pypi.org", "note": "Previously https://pypi.python.org" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "native_name": "name", "case_sensitive": false, "normalization_rules": [ "Replace underscore _ with dash -", "Replace dot . with underscore _ when used in distribution (sdist, wheel) names" ], "note": "PyPI treats - and _ as the same character and is not case sensitive. Therefore a PyPI package name shall be lowercased and underscore _ replaced with a dash -. Note that PyPI itself is preserving the case of package names. When used in distribution and wheel names, the dot . is replaced with an underscore _" }, "version_definition": { "requirement": "optional", "case_sensitive": false, "native_name": "version" }, "qualifiers_definition": [ { "key": "file_name", "requirement": "optional", "description": "The file_name qualifier selects a particular distribution file (case-sensitive). For naming convention, see the Python Packaging User Guide on source distributions https://packaging.python.org/en/latest/specifications/source-distribution-format/#source-distribution-file-name and on binary distributions https://packaging.python.org/en/latest/specifications/binary-distribution-format/#file-name-convention and the rules for platform compatibility tags https://packaging.python.org/en/latest/specifications/platform-compatibility-tags/" } ], "examples": [ "pkg:pypi/django@1.11.1", "pkg:pypi/django@1.11.1?file_name=Django-1.11.1.tar.gz", "pkg:pypi/django@1.11.1?file_name=Django-1.11.1-py2.py3-none-any.whl", "pkg:pypi/django-allauth@12.23" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/vcpkg-definition.json0000644000175000017500000000705615264504421023457 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/vcpkg-definition.json", "type": "vcpkg", "type_name": "Vcpkg C/C++ packages", "description": "Packages from the vcpkg C/C++ package manager.", "repository": { "use_repository": true, "default_repository_url": "https://github.com/microsoft/vcpkg/", "note": "The absolute URL of the vcpkg registry where the package is available. If omitted, the default registry `https://github.com/microsoft/vcpkg` is assumed. For filesystem registries or [overlay ports](https://learn.microsoft.com/vcpkg/concepts/overlay-ports), the URL uses the `file` scheme." }, "namespace_definition": { "requirement": "prohibited" }, "name_definition": { "requirement": "required", "native_name": "package-name", "note": "The vcpkg package name." }, "version_definition": { "requirement": "optional", "native_name": "package-version", "note": "The vcpkg package version." }, "qualifiers_definition": [ { "key": "port_version", "native_name": "port_version", "requirement": "optional", "description": "The vcpkg [port-version](https://learn.microsoft.com/vcpkg/reference/vcpkg-json#port-version). If omitted, the purl refers to port-version 0." }, { "key": "repository_revision", "native_name": "repository_revision", "requirement": "optional", "description": "The full 40-character commit hash of the vcpkg registry baseline. For git registries this is the `baseline` field in `vcpkg-configuration.json`. A baseline fixes the state of the whole registry rather than a single port, and the same port version can be reached from many baselines, so the exact port recipe is pinned by the `vcs_url` git-tree instead. If omitted, the purl refers to the latest revision available." }, { "key": "triplet", "native_name": "triplet", "requirement": "optional", "description": "The vcpkg [triplet](https://learn.microsoft.com/vcpkg/concepts/triplets) describing the target build configuration (architecture, operating system, and CRT/library linkage), for example `x64-windows` or `arm64-osx`. It describes the build target and does not affect package identity." } ], "note": "A purl may carry extra qualifiers that describe the context in which the package is used, such as build configuration or platform. Parsers shall tolerate these and may ignore any they do not expect. The `vcs_url` common qualifier carries the port's version-control URL in pip VCS form, for example `git+https://github.com/microsoft/vcpkg@`. Its git-tree pins the exact port recipe. The `features` qualifier, a comma-separated list of enabled vcpkg feature names, records which optional features were enabled at build time; it is informational and not currently normative.", "examples": [ "pkg:vcpkg/bzip2@1.0.8?port_version=6", "pkg:vcpkg/zlib@1.3.1?triplet=x64-linux&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fmicrosoft%2Fvcpkg%40b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "pkg:vcpkg/ffmpeg@5.1.2?repository_url=https:%2F%2Fgithub.com%2Fazure-sdk%2Fvcpkg", "pkg:vcpkg/zlib@1.3.1?repository_url=https:%2F%2Fgithub.com%2Fazure-sdk%2Fvcpkg&triplet=x64-linux&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Fazure-sdk%2Fvcpkg%40b5d3197b1a8a3f4c2d9e0f1a2b3c4d5e6f708192", "pkg:vcpkg/llvm@15.0.7?repository_url=file:%2F%2F%2FC:%2Flocal-registry%2Fvcpkg", "pkg:vcpkg/bzip2@1.0.8?port_version=6&repository_revision=84a143e4caf6b70db57f28d04c41df4a85c480fa&triplet=x64-linux" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/cargo-definition.json0000644000175000017500000000153415264504421023433 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/cargo-definition.json", "type": "cargo", "type_name": "Cargo", "description": "Cargo packages for Rust", "repository": { "use_repository": true, "default_repository_url": "https://crates.io/" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "native_name": "name", "case_sensitive": true, "note": "The name is the repository name." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is the package version." }, "examples": [ "pkg:cargo/rand@0.7.2", "pkg:cargo/clap@2.33.0", "pkg:cargo/structopt@0.3.11" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/cran-definition.json0000644000175000017500000000165615264504421023270 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/cran-definition.json", "type": "cran", "type_name": "CRAN", "description": "CRAN R packages", "repository": { "use_repository": true, "default_repository_url": "https://cran.r-project.org" }, "namespace_definition": { "requirement": "prohibited", "note": "there is no namespace" }, "name_definition": { "requirement": "required", "native_name": "name", "case_sensitive": true, "note": "The name is the package name and is case sensitive, but there cannot be two packages on CRAN with the same name ignoring case." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is the package version." }, "examples": [ "pkg:cran/A3@1.0.0", "pkg:cran/rJava@1.0-4", "pkg:cran/caret@6.0-88" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/generic-definition.json0000644000175000017500000000337715264504421023763 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/generic-definition.json", "type": "generic", "type_name": "Generic Package", "description": "The generic type is for plain, generic packages that do not fit anywhere else such as for \"upstream-from-distro\" packages. In particular this is handy for a plain version control repository such as a bare git repo in combination with a vcs_url.", "repository": { "use_repository": false, "note": "There is no default repository." }, "namespace_definition": { "requirement": "optional", "note": "there is no generic namespace definition" }, "name_definition": { "requirement": "required", "note": "as for other type, the name component is mandatory. In the worst case it can be a file or directory name." }, "qualifiers_definition": [ { "key": "download_url", "description": "A download_url and checksum may be provided in qualifiers or as separate attributes outside of a purl for proper identification and location." }, { "key": "checksum", "description": "A checksum may be provided in qualifiers or as separate attributes outside of a purl for proper identification and location." } ], "note": "When possible another or a new purl type should be used instead of using the generic type and eventually contributed back to this specification. Example have been truncated for brevity", "examples": [ "pkg:generic/openssl@1.1.10g", "pkg:generic/openssl@1.1.10g?download_url=https:%2F%2Fopenssl.org%2Fsource%2Fopenssl-1.1.0g.tar.gz&checksum=sha256:de4d501267da", "pkg:generic/bitwarderl?vcs_url=git%2Bhttps:%2F%2Fgit.fsfe.org%2Fdxtr%2Fbitwarderl%40cc55108da32" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/brew-definition.json0000644000175000017500000000427015264504421023277 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/brew-definition.json", "type": "brew", "type_name": "Homebrew", "description": "Homebrew packages for macOS and Linux", "repository": { "use_repository": true, "default_repository_url": "https://formulae.brew.sh/", "note": "The default repository is the Homebrew Formulae at https://formulae.brew.sh/. Homebrew also supports third-party taps (repositories) which can be specified using the namespace or repository_url qualifier." }, "namespace_definition": { "requirement": "optional", "native_name": "tap", "case_sensitive": false, "note": "The namespace is the Homebrew tap name, typically in the format 'owner/repo' (e.g., 'homebrew/core', 'some-org/some-tap'). It is not case sensitive and shall be lowercased. When not specified, formulas are assumed to come from the default 'homebrew/core' tap." }, "name_definition": { "requirement": "required", "native_name": "formula", "case_sensitive": false, "note": "The name is the Homebrew formula or cask name. It is not case sensitive and shall be lowercased. Formula names containing '@' (used for versioned formulas like 'postgresql@12') shall have the '@' character percent-encoded as '%40' in the PURL string." }, "version_definition": { "requirement": "optional", "native_name": "version", "note": "The version is the Homebrew package version. Versions are optional to support use cases where the latest or any available version is acceptable." }, "qualifiers_definition": [ { "key": "repository_url", "description": "The git URL of the tap repository when using a non-default tap. For example, 'https://github.com/some-org/homebrew-some-tap.git'." } ], "examples": [ "pkg:brew/sqlite@3.43.2", "pkg:brew/go", "pkg:brew/postgresql%4012@12.17", "pkg:brew/homebrew/core/sqlite@3.43.2", "pkg:brew/some-org/some-tap/some-app@1.2.3?repository_url=https:%2F%2Fgithub.com%2Fsome-org%2Fhomebrew-some-tap.git" ], "reference_urls": [ "https://brew.sh/", "https://formulae.brew.sh/", "https://docs.brew.sh/Taps" ] } URI-PackageURL-2.26/lib/URI/PackageURL/types/vscode-extension-definition.json0000644000175000017500000000404715264504421025637 0ustar peppepeppe{ "$schema": "https://packageurl.org/purl-schemas/purl-type-definition.schema-1.1.json", "$id": "https://packageurl.org/types/vscode-extension-definition.json", "type": "vscode-extension", "type_name": "VS Code Extension packages", "description": "VS Code Extension packages", "repository": { "use_repository": true, "default_repository_url": "https://marketplace.visualstudio.com/vscode" }, "namespace_definition": { "requirement": "required", "case_sensitive": false, "native_name": "publisher", "note": "The namespace is the publisher or vendor of the extension (e.g., 'redhat', 'microsoft'). This corresponds to the 'Publisher' property of the 'Identity' element in the package's .vsixmanifest file." }, "name_definition": { "requirement": "required", "case_sensitive": false, "native_name": "name", "note": "The extension name. This corresponds to the 'Id' property of the 'Identity' element in the package's .vsixmanifest file." }, "version_definition": { "requirement": "optional", "case_sensitive": false, "native_name": "version", "note": "The extension version. This corresponds to the 'Version' property of the 'Identity' element in the package's .vsixmanifest file." }, "qualifiers_definition": [ { "key": "platform", "requirement": "optional", "description": "The target platform for the extension. Common values include 'universal', 'linux-x64', 'linux-arm64', 'darwin-x64', 'darwin-arm64', 'win32-x64', 'win32-arm64', etc.", "default_value": "universal", "native_name": "targetPlatform" } ], "examples": [ "pkg:vscode-extension/ms-python/python@2023.25.10292213", "pkg:vscode-extension/muhammad-sammy/csharp@2.15.30?repository_url=https:%2F%2Fopen-vsx.org", "pkg:vscode-extension/golang/go@0.39.1?platform=win32-x64" ], "reference_urls": [ "https://open-vsx.org/", "https://github.com/eclipse/openvsx", "https://code.visualstudio.com/api/working-with-extensions/publishing-extension#platformspecific-extensions" ] } URI-PackageURL-2.26/lib/URI/PackageURL/Type.pm0000644000175000017500000004200215264504421017425 0ustar peppepeppepackage URI::PackageURL::Type; use feature ':5.10'; use strict; use utf8; use warnings; use Carp (); use File::Basename qw(dirname); use File::Spec; use JSON::PP qw(decode_json); use List::Util qw(first); use constant DEBUG => $ENV{PURL_DEBUG}; our $VERSION = '2.26'; my %DEFINITION_CACHE = (); my %ALGO_LENGTH = ('md5' => 32, 'sha1' => 40, 'sha256' => 64, 'sha384' => 96, 'sha512' => 128); my %CACHE = (); sub new { my ($class, $type, $definition) = @_; Carp::croak 'Missing PURL type' unless $type; $type = lc $type; $definition = $DEFINITION_CACHE{$type} //= _load_definition($type); my $self = {type => $type, definition => $definition || {}}; return bless $self, $class; } sub definition_dir { File::Spec->catfile(dirname(__FILE__), 'types') } sub _file_content { my $path = shift; return unless -e $path; open my $fh, '<', $path or Carp::croak "Can't open file: $!"; my $content = do { local $/; <$fh> }; close $fh; return $content; } sub _load_definition { my $purl_type = shift; return $CACHE{$purl_type} if defined $CACHE{$purl_type}; my $content = _file_content(File::Spec->catfile(definition_dir, "$purl_type-definition.json")); return unless $content; DEBUG and say STDERR "-- Loaded '$purl_type' definition schema"; my $data = eval { decode_json($content) }; Carp::croak "Failed to decode '$purl_type' PURL type definition: $@" if $@; $CACHE{$purl_type} = $data; return $data; } sub definition { shift->{definition} } sub _property { my $self = shift; my @filter = @_; my $definition = $self->definition; return unless $definition; foreach (@filter) { $definition = (defined $definition->{$_}) ? $definition->{$_} : undef; } return $definition; } sub schema_id { shift->_property('$id') } sub type_name { shift->_property('type_name') } sub description { shift->_property('description') } sub default_repository_url { shift->_property('repository', 'default_repository_url') } sub examples { shift->_property('examples') || [] } sub repository { shift->_property('repository') } sub note { shift->_property('note') } sub reference_urls { shift->_property('reference_urls') } sub namespace_definition { shift->component_definition('namespace') } sub name_definition { shift->component_definition('name') } sub version_definition { shift->component_definition('version') } sub qualifiers_definition { shift->component_definition('qualifiers') || [] } sub subpath_definition { shift->component_definition('subpath') } sub component_have_definition { defined shift->component_definition(shift) } sub component_definition { shift->_property(shift . '_definition') } sub component_case_sensitive { shift->_property(shift . '_definition', 'case_sensitive') } sub component_is_case_sensitive { shift->component_case_sensitive(shift) == 1 } sub component_is_optional { shift->component_requirement(shift) eq 'optional' } sub component_is_prohibited { shift->component_requirement(shift) eq 'prohibited' } sub component_is_required { shift->component_requirement(shift) eq 'required' } sub component_native_name { shift->_property(shift . '_definition', 'native_name') } sub component_normalization_rules { shift->_property(shift . '_definition', 'normalization_rules') || [] } sub component_note { shift->_property(shift . '_definition', 'note') } sub component_permitted_characters { shift->_property(shift . '_definition', 'permitted_characters') } sub component_requirement { my ($self, $component) = @_; if ($component eq 'qualifiers') { foreach (@{$self->qualifiers_definition}) { my $requirement = $_->{requirement}; next unless $requirement; return 'required' if ($requirement eq 'required'); } return 'optional'; } return $self->_property($component . '_definition', 'requirement'); } sub normalize { my $self = shift; my %components = ( type => undef, namespace => undef, name => undef, version => undef, version => undef, qualifiers => {}, subpath => undef, @_ ); # Common normalizations $components{type} = lc $components{type}; if (grep { $_ eq $components{type} } qw(alpm apk bitbucket composer deb github gitlab hex npm oci pypi)) { $components{name} = lc $components{name}; } if (defined $components{namespace}) { if (grep { $_ eq $components{type} } qw(alpm apk bitbucket composer deb github gitlab golang hex rpm)) { $components{namespace} = lc $components{namespace}; } # Legacy CPAN spec: The namespace is the CPAN id of the author/publisher. # It MUST be written uppercase and is required. if ($components{type} eq 'cpan') { $components{namespace} = uc $components{namespace}; } } # Force checksum into ARRAY if (defined $components{qualifiers}->{checksum} and ref $components{qualifiers}->{checksum} ne 'ARRAY') { $components{qualifiers}->{checksum} = [$components{qualifiers}->{checksum}]; } # Force qualifier keys to lowercase %{$components{qualifiers}} = map { lc $_ => $components{qualifiers}->{$_} } keys %{$components{qualifiers}}; # PURL type specific normalization TYPE: for ($components{type}) { if (/huggingface/) { # The version is the model revision Git commit hash. It is case insensitive and # must be lowercased in the package URL. $components{version} = lc $components{version}; last TYPE; } if (/mlflow/) { # The "name" case sensitivity depends on the server implementation: # - Azure ML: it is case sensitive and must be kept as-is in the package URL. # - Databricks: it is case insensitive and must be lowercased in the package URL. last TYPE unless $components{qualifiers}->{repository_url}; if ($components{qualifiers}->{repository_url} =~ /azuredatabricks/) { $components{name} = lc $components{name}; } last TYPE; } if (/pypi/) { # A PyPI package name must be lowercased and underscore "_" replaced with a dash "-". $components{name} =~ s/_/-/g; last TYPE; } if (/cpan/) { if (defined $components{qualifiers}->{author}) { # CPAN ID. It MUST be written uppercase. $components{qualifiers}->{author} = uc $components{qualifiers}->{author}; } last TYPE; } if (/brew/) { # namespace and name: It is not case sensitive and must be lowercased. $components{namespace} = lc($components{namespace}) if (defined $components{namespace}); $components{name} = lc($components{name}); last TYPE; } if (/git/) { $components{namespace} = lc($components{namespace}); $components{name} = lc($components{name}); my @parts = split '/', $components{namespace}, 2; $components{namespace} = join '/', shift @parts; $components{name} = join '/', @parts, $components{name}; last TYPE; } } return wantarray ? %components : \%components; } sub validate { my $self = shift; my %components = ( scheme => 'pkg', type => undef, namespace => undef, name => undef, version => undef, qualifiers => {}, subpath => undef, @_ ); my $purl_type = $components{type}; # Check PURL components requirements Carp::croak "Invalid PURL: '$components{scheme}' is not a valid scheme" unless ($components{scheme} eq 'pkg'); foreach my $qualifier (keys %{$components{qualifiers}}) { Carp::croak "Invalid PURL: '$qualifier' is not a valid qualifier" if ($qualifier =~ /(\s|\%)/); Carp::croak "Invalid PURL: '$qualifier' qualifier not in lowercase" if ($qualifier =~ /([A-Z])/); } # Check checksum qualifier if (defined $components{qualifiers}->{checksum} and ref $components{qualifiers}->{checksum} eq 'ARRAY') { foreach (@{$components{qualifiers}->{checksum}}) { my ($algo, $checksum) = split ':', $_; if (defined $ALGO_LENGTH{$algo}) { if (length($checksum) != $ALGO_LENGTH{$algo}) { DEBUG and say STDERR "-- Malformed '$algo' checksum qualifier (invalid length)"; } if ($checksum !~ m/^[0-9a-f]+$/) { DEBUG and say STDERR "-- Malformed '$algo' checksum qualifier (invalid characters)"; } } # Fallback elsif ($checksum !~ /^[0-9a-f]{32,}$/) { DEBUG and say STDERR "-- Malformed '$algo' checksum qualifier (invalid characters or length)"; } } } # PURL type definition validation if (%{$self->definition}) { # Check components using PURL type definition for my $component (qw[namespace name version subpath]) { next unless $self->component_have_definition($component); my $requirement = $self->component_requirement($component); next unless $requirement; DEBUG and say STDERR "-- Validation - $component is $requirement"; if (defined $components{$component}) { if ($self->component_is_prohibited($component)) { Carp::croak sprintf("Invalid PURL: '%s' is prohibited for '%s' PURL type", $component, $purl_type); } if (my $permitted_characters = $self->component_permitted_characters($component)) { DEBUG and say STDERR "-- Validation - $component permitted characters $permitted_characters"; if ($components{$component} !~ /$permitted_characters/) { Carp::croak sprintf("Invalid PURL: '%s' invalid characters for '%s' PURL type", $component, $purl_type); } } } if (!defined $components{$component} && $self->component_is_required($component)) { Carp::croak sprintf("Invalid PURL: '%s' is required for '%s' PURL type", $component, $purl_type); } } # Default known qualifiers # TODO: "checksums" legacy qualifier my @known_qualifiers = (qw[ vers repository_url download_url vcs_url file_name checksum checksums ]); foreach my $rule (@{$self->qualifiers_definition}) { my $key = $rule->{key}; push @known_qualifiers, $key; my $requirement = $rule->{requirement}; next unless $requirement; DEBUG and say STDERR "-- Validation - '$key' qualifier is $requirement"; if (defined $components{qualifiers}->{$key} and $requirement eq 'prohibited') { Carp::croak sprintf("Invalid PURL: '%s' qualifier is prohibited for '%s' PURL type", $key, $purl_type); } if (not defined $components{qualifiers}->{$key} and $requirement eq 'required') { Carp::croak sprintf("Invalid PURL: '%s' qualifier is required for '%s' PURL type", $key, $purl_type); } } # Check unknown qualifiers foreach my $key (keys %{$components{qualifiers}}) { DEBUG and say STDERR "-- '$key' is known qualifier for '$purl_type' PURL type" unless (first { $key eq $_ } @known_qualifiers); } } # PURL type specific validation TYPE: for ($purl_type) { if (/conan/) { if (!$components{namespace} && defined $components{qualifiers}->{channel}) { Carp::croak "Invalid PURL: Conan 'channel' qualifier without 'namespace'"; } last TYPE; } if (/cpan/) { # Use legacy CPAN PURL type SPEC if ($ENV{PURL_LEGACY_CPAN_TYPE}) { if ((defined $components{namespace} && defined $components{name}) && $components{namespace} =~ /\:/) { Carp::croak "Invalid PURL: CPAN 'namespace' component must have the distribution author"; } if ((defined $components{namespace} && defined $components{name}) && $components{name} =~ /\:/) { Carp::croak "Invalid PURL: CPAN 'name' component must have the distribution name"; } if (!defined $components{namespace} && $components{name} =~ /\-/) { Carp::croak "Invalid PURL: CPAN 'name' component must have the module name"; } last TYPE; } if ($components{name} =~ /\:/) { Carp::croak "Invalid PURL: The CPAN 'name' component must have the distribution name"; } last TYPE; } if (/cran/) { Carp::croak "Invalid PURL: Cran 'version' is required" unless defined $components{version}; last TYPE; } if (/swift/) { if (defined $components{namespace}) { my ($source, $user_org) = split '/', $components{namespace}; Carp::croak "Invalid PURL: Swift user/organization is required in 'namespace'" unless $user_org; } last TYPE; } } return 1; } 1; __END__ =head1 NAME URI::PackageURL::Type - PURL type definition class for URI::PackageURL =head1 SYNOPSIS use URI::PackageURL::Type; # Load 'cpan' PURL type definition $type = URI::PackageURL::Type->new('cpan'); say $type->definition->{description}; =head1 DESCRIPTION L is the PURL type definition helper for L. =head2 FUNCTIONAL INTERFACE =head3 B $path = URI::PackageURL::Type::definition_dir(); Return the local PURL type definitions directory. =head2 OBJECT-ORIENTED INTERFACE =head3 B $purl_type = URI::PackageURL::Type->new($purl_type) Create new B instance and load PURL type definition for normalization and validation. $purl_type = URI::PackageURL::Type->new('cpan'); =head3 B $purl_type->normalize(%components) Perform PURL components normalization: %components = $purl_type->normalize( type => 'CPAN', namespace => 'gdt', name => 'URI-PackageURL' ); say Dumper(\%components); # { # type => 'cpan', # namespace => 'GDT', # name => 'URI-PackageURL' # } =head3 B $purl_type->validate(%components) Perform PURL components validation: $purl_type->validate( type => 'CPAN', name => 'URI-PackageURL' ); =head2 Definition =over =item $purl_type->schema_id =item $purl_type->type_name =item $purl_type->description =item $purl_type->default_repository_url =item $purl_type->examples =item $purl_type->repository =item $purl_type->note =item $purl_type->reference_urls =back =head3 Component definition =over =item $purl_type->namespace_definition =item $purl_type->name_definition =item $purl_type->version_definition =item $purl_type->qualifiers_definition =item $purl_type->subpath_definition =back =head3 Helpers =over =item $purl_type->component_have_definition($component) =item $purl_type->component_definition($component) =item $purl_type->component_case_sensitive($component) =item $purl_type->component_is_case_sensitive($component) =item $purl_type->component_is_optional($component) =item $purl_type->component_is_prohibited($component) =item $purl_type->component_is_required($component) =item $purl_type->component_native_name($component) =item $purl_type->component_normalization_rules($component) =item $purl_type->component_note($component) =item $purl_type->component_permitted_characters($component) =item $purl_type->component_requirement($component) =back =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/giterlizzi/perl-URI-PackageURL.git =head1 AUTHOR =over =item * Giuseppe Di Terlizzi =back =head1 LICENSE AND COPYRIGHT This software is copyright (c) 2022-2026 by Giuseppe Di Terlizzi. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut URI-PackageURL-2.26/lib/URI/PackageURL/Util.pm0000644000175000017500000003311215264504421017423 0ustar peppepeppepackage URI::PackageURL::Util; use feature ':5.10'; use strict; use utf8; use warnings; use File::Spec; use File::Basename qw(dirname basename); use Exporter qw(import); use Carp (); our $VERSION = '2.26'; our @EXPORT = qw(purl_to_urls purl_types); sub purl_types { my @list = (); my $spec_dir = File::Spec->catfile(dirname(__FILE__), 'types'); opendir(my $dh, $spec_dir) or Carp::croak "Can't open spec dir: $!"; while (my $file = readdir $dh) { next unless -f File::Spec->catfile($spec_dir, $file); $file =~ s/\-definition\.json//; push @list, $file; } closedir $dh; @list = sort @list; return wantarray ? @list : \@list; } sub purl_to_urls { my $purl = shift; if (ref $purl ne 'URI::PackageURL') { require URI::PackageURL; $purl = URI::PackageURL->from_string($purl); } my %TYPES = ( bitbucket => \&_to_bitbucket_urls, cargo => \&_to_cargo_urls, composer => \&_to_composer_urls, cpan => \&_to_cpan_urls, docker => \&_to_docker_urls, gem => \&_to_gem_urls, github => \&_to_github_urls, gitlab => \&_to_gitlab_urls, golang => \&_to_golang_urls, luarocks => \&_to_luarocks_urls, maven => \&_to_maven_urls, npm => \&_to_npm_urls, nuget => \&_to_nuget_urls, pypi => \&_to_pypi_urls, ); my $urls = {}; if (defined $TYPES{$purl->type}) { $urls = $TYPES{$purl->type}->($purl); } if (my $download_url = $purl->qualifiers->{download_url}) { $urls->{download} = $download_url; } return $urls; } sub _to_bitbucket_urls { my $purl = shift; my $name = $purl->name; my $namespace = $purl->namespace; my $version = $purl->version; my $qualifiers = $purl->qualifiers; my $file_ext = $qualifiers->{ext} || 'tar.gz'; my $urls = {}; if ($name && $namespace) { $urls->{repository} = "https://bitbucket.org/$namespace/$name"; } if ($version) { $urls->{download} = "https://bitbucket.org/$namespace/$name/get/$version.$file_ext"; } return $urls; } sub _to_cargo_urls { my $purl = shift; my $name = $purl->name; my $version = $purl->version; if ($name && $version) { return { repository => "https://crates.io/crates/$name/$version", download => "https://crates.io/api/v1/crates/$name/$version/download" }; } return {repository => "https://crates.io/crates/$name"}; } sub _to_composer_urls { my $purl = shift; my $name = $purl->name; my $namespace = $purl->namespace; return unless ($name && $namespace); return {repository => "https://packagist.org/packages/$namespace/$name"}; } sub _to_cpan_urls { my ($purl, $purl_type) = @_; my $name = $purl->name; my $version = $purl->version; my $qualifiers = $purl->qualifiers; my $author = $purl->namespace // $qualifiers->{author}; my $file_ext = $qualifiers->{ext} || 'tar.gz'; my $repository_url = $qualifiers->{repository_url} || $purl->definition->default_repository_url; my $distpath = $qualifiers->{distpath}; my $distdir = $qualifiers->{distdir}; $repository_url =~ s{/$}{}; if ($repository_url !~ /^(http|https|file|ftp):\/\//) { $repository_url = 'https://' . $repository_url; } my $author_a = undef; my $author_au = undef; if ($author) { $author_a = substr($author, 0, 1); $author_au = substr($author, 0, 2); } my $urls = {repository => "https://metacpan.org/dist/$name"}; if ($name && $version) { my $download_base_url = "$repository_url/authors/id"; if ($author) { $urls->{download} = "$download_base_url/$author_a/$author_au/$author/$name-$version.$file_ext"; $urls->{repository} = "https://metacpan.org/release/$author/$name-$version"; } if ($distpath && !$distdir) { $distpath =~ s{^/}{}; $distpath =~ s{^CPAN/}{}; $distpath =~ s{^id/}{}; $distpath =~ s{^authors/id/}{}; if ($distpath !~ /^([A-Z]{1})\/([A-Z]{2})/) { my @parts = split '/', $distpath; $author_a = substr($parts[0], 0, 1); $author_au = substr($parts[0], 0, 2); $distpath = join '/', $author_a, $author_au, $distpath; } $urls->{download} = "$download_base_url/$distpath"; } if ($distdir && !$distpath) { $urls->{download} = "$download_base_url/$author_a/$author_au/$author/$distdir/$name-$version.$file_ext"; } } return $urls; } sub _to_docker_urls { my $purl = shift; my $name = $purl->name; my $namespace = $purl->namespace; my $version = $purl->version; my $qualifiers = $purl->qualifiers; my $repository_url = $qualifiers->{repository_url} || 'https://hub.docker.com'; if ($repository_url !~ /^(http|https):\/\//) { $repository_url = 'https://' . $repository_url; } my $urls = {}; if ($repository_url !~ /hub.docker.com/) { return $urls; } if (!$namespace) { $urls->{repository} = "$repository_url/_/$name"; } if ($name && $namespace) { $urls->{repository} = "$repository_url/r/$namespace/$name"; } return $urls; } sub _to_gem_urls { my $purl = shift; my $name = $purl->name; my $version = $purl->version; if ($name && $version) { return { repository => "https://rubygems.org/gems/$name/versions/$version", download => "https://rubygems.org/downloads/$name-$version.gem" }; } return {repository => "https://rubygems.org/gems/$name"}; } sub _to_github_urls { my $purl = shift; my $name = $purl->name; my $namespace = $purl->namespace; my $version = $purl->version; my $qualifiers = $purl->qualifiers; my $file_ext = $qualifiers->{ext} || 'tar.gz'; my $urls = {}; if ($name && $namespace) { $urls->{repository} = "https://github.com/$namespace/$name"; } if ($version) { my $is_sha1 = ($version =~ /^[a-fA-F0-9]{40}$/); if ($is_sha1) { $urls->{download} = "https://github.com/$namespace/$name/archive/$version.$file_ext"; } else { $urls->{download} = "https://github.com/$namespace/$name/archive/refs/tags/$version.$file_ext"; } } return $urls; } sub _to_gitlab_urls { my $purl = shift; my $name = $purl->name; my $namespace = $purl->namespace; my $version = $purl->version; my $qualifiers = $purl->qualifiers; my $file_ext = $qualifiers->{ext} || 'tar.gz'; my $urls = {}; if ($name && $namespace) { $urls->{repository} = "https://gitlab.com/$namespace/$name"; } if ($version) { $urls->{download} = "https://gitlab.com/$namespace/$name/-/archive/$version/$name-$version.$file_ext"; } return $urls; } sub _to_golang_urls { my $purl = shift; my $name = $purl->name; my $namespace = $purl->namespace; my $version = $purl->version; my $urls = {}; if ($name && $namespace) { $urls->{repository} = "https://pkg.go.dev/$namespace/$name"; } # TODO ??? # if ($name && $namespace && $version) { # $urls->{repository} = "https://pkg.go.dev/$namespace/$name\@v$version"; # } return $urls; } sub _to_luarocks_urls { my $purl = shift; my $name = $purl->name; my $namespace = $purl->namespace; my $version = $purl->version; my $qualifiers = $purl->qualifiers; my $repository_url = $qualifiers->{repository_url} || 'https://luarocks.org'; if ($repository_url !~ /^(http|https):\/\//) { $repository_url = 'https://' . $repository_url; } my $urls = {}; if (!$namespace) { $urls->{repository} = "$repository_url/modules/$name"; } if ($name && $namespace) { $urls->{repository} = "$repository_url/modules/$namespace/$name"; } return $urls; } sub _to_maven_urls { my $purl = shift; my $namespace = $purl->namespace; my $name = $purl->name; my $version = $purl->version; my $qualifiers = $purl->qualifiers; my $extension = $qualifiers->{extension} // 'jar'; my $repository_url = $qualifiers->{repository_url} // 'https://repo.maven.apache.org/maven2'; if ($repository_url !~ /^(http|https):\/\//) { $repository_url = 'https://' . $repository_url; } if ($namespace && $name && $version) { (my $ns_url = $namespace) =~ s/\./\//g; return { repository => "https://mvnrepository.com/artifact/$namespace/$name/$version", download => "$repository_url/$ns_url/$name/$version/$name-$version.$extension" }; } if ($namespace && $name) { return {repository => "https://mvnrepository.com/artifact/$namespace/$name"}; } } sub _to_npm_urls { my $purl = shift; my $namespace = $purl->namespace; my $name = $purl->name; my $version = $purl->version; if ($namespace && $name && $version) { return { repository => "https://www.npmjs.com/package/$namespace/$name/v/$version", download => "https://registry.npmjs.org/$namespace/$name/-/$name-$version.tgz" }; } if ($name && $version) { return { repository => "https://www.npmjs.com/package/$name/v/$version", download => "https://registry.npmjs.org/$name/-/$name-$version.tgz" }; } if ($namespace && $name) { return {repository => "https://www.npmjs.com/package/$namespace/$name"}; } return {repository => "https://www.npmjs.com/package/$name"}; } sub _to_nuget_urls { my $purl = shift; my $name = $purl->name; my $version = $purl->version; if ($name && $version) { return { repository => "https://www.nuget.org/packages/$name/$version", download => "https://www.nuget.org/api/v2/package/$name/$version" }; } return {repository => "https://www.nuget.org/packages/$name"}; } sub _to_pypi_urls { my $purl = shift; my $name = $purl->name; my $version = $purl->version; if ($name && $version) { return {repository => "https://pypi.org/project/$name/$version"}; } return {repository => "https://pypi.org/project/$name"}; } 1; __END__ =head1 NAME URI::PackageURL::Util - Utility for URI::PackageURL =head1 SYNOPSIS use URI::PackageURL::Util qw(purl_to_urls); $urls = purl_to_urls('pkg:cpan/URI-PackageURL@2.25?author=GDT'); $filename = basename($urls->{download}); $ua->mirror($urls->{download}, "/tmp/$filename"); =head1 DESCRIPTION URL::PackageURL::Util is the utility package for URL::PackageURL. =head2 EXPORTED FUNCTIONS =head3 B use URI::PackageURL::Util qw(purl_types); @types = purl_types(); Return the list of known PURL types. =head3 B use URI::PackageURL::Util qw(purl_to_urls); $urls = purl_to_urls($purl_string // URI::PackageURL->new(...)); Converts the given Package URL string or L instance and return the hash with C and/or C URL. B: This utility support few PURL types (C, C, C, C, C, C, C, C, C, C, C, C, C). +-----------+------------+--------------+ | Type | Repository | Download (*) | +-----------+------------+--------------| | bitbucket | YES | YES | | cargo | YES | YES | | composer | YES | NO | | cpan | YES | YES | | docker | YES | NO | | gem | YES | YES | | generic | NO | YES (**) | | github | YES | YES | | gitlab | YES | YES | | golang | YES | NO | | luarocks | YES | NO | | maven | YES | YES | | npm | YES | YES | | nuget | YES | YES | | pypi | YES | NO | |-----------|------------|--------------+ (*) Only with B component (**) Only if B qualifier is provided $urls = purl_to_urls('pkg:cpan/URI-PackageURL@2.25?author=GDT'); print Dumper($urls); # $VAR1 = { # 'repository' => 'https://metacpan.org/release/GDT/URI-PackageURL-2.25', # 'download' => 'https://www.cpan.org/authors/id/G/GD/GDT/URI-PackageURL-2.25.tar.gz' # }; =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/giterlizzi/perl-URI-PackageURL.git =head1 AUTHOR =over =item * Giuseppe Di Terlizzi =back =head1 LICENSE AND COPYRIGHT This software is copyright (c) 2022-2026 by Giuseppe Di Terlizzi. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut URI-PackageURL-2.26/lib/URI/PackageURL/App.pm0000644000175000017500000003151715264504421017235 0ustar peppepeppepackage URI::PackageURL::App; use feature ':5.10'; use strict; use warnings; use utf8; use Carp (); use Data::Dumper (); use Getopt::Long qw(GetOptionsFromArray :config gnu_compat); use JSON::PP (); use Pod::Text (); use Pod::Usage qw(pod2usage); use URI::PackageURL (); use URI::PackageURL::Type (); use URI::PackageURL::Util qw(purl_types); our $VERSION = '2.26'; sub cli_error { my ($error) = @_; $error =~ s/ at .* line \d+.*//; say STDERR "ERROR: $error"; } sub run { my ($class, @args) = @_; # UTF-8 encoded command line arguments utf8::decode($_) for @args; my %options = (format => 'json'); GetOptionsFromArray( \@args, \%options, qw( help|h man v download-url repository-url validate quiet|q info=s list type=s namespace=s name=s version=s qualifiers|qualifier=s% subpath=s null|0 format=s json yaml dumper env ) ) or pod2usage(-verbose => 0); pod2usage(-exitstatus => 0, -verbose => 2) if defined $options{man}; pod2usage(-exitstatus => 0, -verbose => 0) if defined $options{help}; if (defined $options{v}) { (my $progname = $0) =~ s/.*\///; say <<"VERSION"; $progname version $URI::PackageURL::VERSION Copyright 2022-2026, Giuseppe Di Terlizzi This program is part of the "URI-PackageURL" distribution and is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Complete documentation for $progname can be found using 'man $progname' or on the internet at . VERSION return 0; } if (defined $options{info}) { return _definition_help(lc $options{info}); } if (defined $options{list}) { return _purl_list(); } if (defined $options{type}) { my $purl = eval { URI::PackageURL->new( type => $options{type}, namespace => $options{namespace}, name => $options{name}, version => $options{version}, qualifiers => $options{qualifiers}, subpath => $options{subpath}, ); }; if ($@) { cli_error($@); return 1; } print "$purl" . (defined $options{null} ? "\0" : "\n"); return 0; } my ($purl_string) = @args; pod2usage(-verbose => 1) if !$purl_string; $options{format} = 'json' if defined $options{json}; $options{format} = 'yaml' if defined $options{yaml}; $options{format} = 'dumper' if defined $options{dumper}; $options{format} = 'env' if defined $options{env}; my $purl = eval { URI::PackageURL->from_string($purl_string) }; if ($options{validate}) { unless ($options{quiet}) { say STDERR $purl ? 'true' : 'false'; } return $purl ? 0 : 1; } if ($@) { cli_error($@); return 1; } my $purl_urls = $purl->to_urls; if ($options{'download-url'}) { return 2 unless defined $purl_urls->{download}; print $purl_urls->{download} . (defined $options{null} ? "\0" : "\n"); return 0; } if ($options{'repository-url'}) { return 2 unless defined $purl_urls->{repository}; print $purl_urls->{repository} . ($options{null} ? "\0" : "\n"); return 0; } if ($options{format} eq 'json') { print JSON::PP->new->canonical->pretty(1)->convert_blessed(1)->encode($purl); return 0; } if ($options{format} eq 'dumper') { print Data::Dumper->new([$purl->to_hash])->Indent(1)->Sortkeys(1)->Terse(1)->Useqq(1)->Dump; return 0; } if ($options{format} eq 'yaml') { if (eval { require YAML::XS }) { print YAML::XS::Dump($purl->to_hash); return 0; } if (eval { require YAML }) { print YAML::Dump($purl->to_hash); return 0; } cli_error 'YAML or YAML::XS module are missing'; return 255; } if ($options{format} eq 'env') { return _purl_env($purl); } } sub _md_to_pod { my $text = shift; $text =~ s/(``([^``]*)``)/C<$2>/gm; $text =~ s/(`([^`]*)`)/C<$2>/gm; return $text; } sub _purl_env { my $purl = shift; my $purl_urls = $purl->to_urls; my %PURL_ENVS = ( PURL => $purl->to_string, PURL_TYPE => $purl->type, PURL_NAMESPACE => $purl->namespace, PURL_NAME => $purl->name, PURL_VERSION => $purl->version, PURL_SUBPATH => $purl->subpath, PURL_QUALIFIERS => (join ' ', sort keys %{$purl->qualifiers}), ); # Preserve order my @PURL_ENVS = qw(PURL PURL_TYPE PURL_NAMESPACE PURL_NAME PURL_VERSION PURL_SUBPATH PURL_QUALIFIERS); my $qualifiers = $purl->qualifiers; foreach my $qualifier (sort keys %{$qualifiers}) { my $key = "PURL_QUALIFIER_$qualifier"; push @PURL_ENVS, $key; $PURL_ENVS{$key} = $qualifiers->{$qualifier}; } if ($purl_urls) { if (defined $purl_urls->{download}) { push @PURL_ENVS, 'PURL_DOWNLOAD_URL'; $PURL_ENVS{PURL_DOWNLOAD_URL} = $purl_urls->{download}; } if (defined $purl_urls->{repository}) { push @PURL_ENVS, 'PURL_REPOSITORY_URL'; $PURL_ENVS{PURL_REPOSITORY_URL} = $purl_urls->{repository}; } } foreach my $key (@PURL_ENVS) { print sprintf qq{%s="%s"\n}, $key, $PURL_ENVS{$key} || q{}; } return 0; } sub _purl_list { my @types = purl_types(); my $pattern = "%20s | %10s | %10s | %10s | %10s | %s"; say sprintf $pattern, 'TYPE', 'NAMESPACE', 'NAME', 'VERSION', 'SUBPATH', 'QUALIFIERS'; say sprintf "%s-|-%s-|-%s-|-%s-|-%s-|-%s", '-' x 20, '-' x 10, '-' x 10, '-' x 10, '-' x 10, '-' x 10; for my $type (@types) { my $definition = URI::PackageURL::Type->new($type); my $namespace = '-'; my $name = '-'; my $version = '-'; my $subpath = '-'; my $qualifiers = '-'; if ($definition->component_have_definition('namespace')) { $namespace = $definition->component_requirement('namespace') // '-'; } if ($definition->component_have_definition('name')) { $name = $definition->component_requirement('name') // '-'; } if ($definition->component_have_definition('version')) { $version = $definition->component_requirement('version') // '-'; } if ($definition->component_have_definition('subpath')) { $subpath = $definition->component_requirement('subpath') // '-'; } if (@{$definition->qualifiers_definition}) { $qualifiers = join ", ", map { $_->{key} } @{$definition->qualifiers_definition}; } say sprintf $pattern, $type, $namespace, $name, $version, $subpath, $qualifiers; } return 0; } sub _definition_help { my $type = shift; my $definition = URI::PackageURL::Type->new($type); unless (%{$definition->definition}) { say "No known PURL type definition for '$type'"; exit 1; } my $type_name = $definition->type_name; my $description = $definition->description; my $reference_urls = $definition->reference_urls; my $examples = $definition->examples; my $note = $definition->note; my $repository = $definition->repository; my $schema_id = $definition->schema_id; my $qualifiers_definition = $definition->qualifiers_definition; my $have_ns = ($definition->component_is_required('namespace') || $definition->component_is_optional('namespace')); my $purl_syntax = "pkg:$type"; $purl_syntax .= '/EnamespaceE' if $have_ns; $purl_syntax .= '/EnameE@EversionE?EqualifiersE#EsubpathE'; my $man = <<"MAN"; =head1 NAME $type - $type_name =head1 DESCRIPTION $description =head1 SYNTAX The structure of a PURL for this package type is: C<$purl_syntax> MAN foreach my $component (qw[namespace name version subpath]) { next unless $definition->component_have_definition($component); my $requirement = $definition->component_requirement($component); my $permitted_characters = $definition->component_permitted_characters($component); my $normalization_rules = $definition->component_normalization_rules($component); my $case_sensitive = $definition->component_case_sensitive($component); my $native_name = $definition->component_native_name($component); my $note = $definition->component_note($component); $man .= sprintf "=head2 %s\n\n", ucfirst $component; $man .= "=over 2\n\n"; if ($requirement) { $man .= sprintf "=item B: %s\n\n", ucfirst($requirement); } if ($permitted_characters) { $man .= sprintf "=item B: %s\n\n", ucfirst($permitted_characters); } if ($case_sensitive) { $man .= sprintf "=item B: %s\n\n", ($case_sensitive ? 'Yes' : 'No'); } if (@{$normalization_rules}) { $man .= "=item B:\n\n"; $man .= "=over 2\n\n"; foreach (@{$normalization_rules}) { $man .= sprintf "=item * %s\n\n", $_; } $man .= "=back\n\n"; } if ($native_name) { $man .= "=item B: $native_name\n\n"; } $man .= "=back\n\n"; if ($note) { $man .= sprintf "%s\n\n", _md_to_pod($note); } } if (@{$qualifiers_definition}) { $man .= "=head2 Qualifiers\n\n"; $man .= "=over 2\n\n"; foreach my $qualifier (@{$qualifiers_definition}) { $man .= sprintf "=item C<%s>\n\n", $qualifier->{key}; if (my $requirement = $qualifier->{requirement}) { $man .= sprintf "Requirement: %s\n\n", ucfirst($requirement); } if (my $native_name = $qualifier->{native_name}) { $man .= sprintf "Native name: %s\n\n", $native_name; } if (my $default_value = $qualifier->{default_value}) { $man .= sprintf "Default value: %s\n\n", $default_value; } $man .= sprintf "%s\n\n", _md_to_pod($qualifier->{description}); } $man .= "=back\n\n"; } if ($repository) { my $use_repository = $repository->{use_repository} ? 'Yes' : 'No'; my $default_repository_url = $repository->{default_repository_url}; $man .= "=head1 REPOSITORY\n\n"; $man .= "=over\n\n"; $man .= sprintf "=item B: %s\n\n", $repository->{use_repository} ? 'Yes' : 'No'; $man .= sprintf "=item B: %s\n\n", $repository->{default_repository_url} || '(none)'; $man .= "=back\n\n"; if (my $note = $repository->{note}) { $man .= sprintf "%s\n\n", _md_to_pod($note); } } if (@{$examples}) { $man .= "=head1 EXAMPLES\n\n"; $man .= "=over 2\n\n"; foreach (@{$examples}) { $man .= sprintf "=item * %s\n\n", $_; } $man .= "=back\n\n"; } if ($note) { $man .= "=head1 NOTES\n\n"; $man .= sprintf "$note\n\n"; } $man .= "=head1 REFERENCES\n\n"; $man .= "=over 2\n\n"; $man .= sprintf "=item * %s schema ID, L<%s>\n\n", $type_name, $schema_id; foreach (@{$reference_urls}) { $man .= sprintf "=item * %s reference, L<%s>\n\n", $type_name, $_; } $man .= "=item * PURL specification, L\n\n"; $man .= "=item * VERS specification, L\n\n"; $man .= "=back\n\n"; Pod::Text->new->parse_string_document($man, \my $output); exit; } 1; __END__ =encoding utf-8 =head1 NAME URI::PackageURL::App - URI::PackageURL (PURL) Command Line Interface =head1 SYNOPSIS use URI::PackageURL::App qw(run); run(\@ARGV); =head1 DESCRIPTION URI::PackageURL::App "Command Line Interface" helper module for C. =over =item URI::PackageURL->run(@args) Execute the command =item cli_error($error) Clean error =back =head1 AUTHOR L =head1 COPYRIGHT AND LICENSE Copyright © 2022-2026 L You may use and distribute this module according to the same terms that Perl is distributed under. =cut URI-PackageURL-2.26/bin/0000755000175000017500000000000015264504726013605 5ustar peppepeppeURI-PackageURL-2.26/bin/vers-tool0000644000175000017500000000530215264504421015452 0ustar peppepeppe#!/usr/bin/perl use strict; use warnings; use utf8; use URI::VersionRange::App; binmode STDOUT, ':encoding(UTF-8)'; binmode STDERR, ':encoding(UTF-8)'; exit URI::VersionRange::App->run(@ARGV) unless caller(); 1; __END__ =encoding utf-8 =head1 NAME vers-tool - Version Range tool =head1 SYNOPSIS vers-tool [OPTIONS]...STRING vers-tool STRING --contains STRING vers-tool [--help|--man|-v] Options: --help Brief help message --man Full documentation -v Print version --contains=VERSION Check if a version is contained within a range --format=FORMAT Output format --json JSON output format (--format=json) -h, --human-readable Human-readable format (--format=human-readable) Examples: Decode a "vers" string: vers-tool "vers:cpan/1.00|>=2.00|<5.00" | jq Check if a version is contained within a range: vers-tool "vers:cpan/1.00|>=2.00|<5.00" --contains "2.20" Humanize "vers": vers-tool "vers:cpan/1.00|>=2.00|<5.00" --human-readable cpan - equal 1.00 - greater than or equal 2.00 - less than 5.00 =head1 DESCRIPTION C Version Range tool A version range specifier (aka. "vers") is a URI string using the C URI-scheme with this syntax: vers:/||... C is the URI-scheme and is an acronym for "VErsion Range Specifier". The pipe "|" is used as a simple separator between C. Each C in this pipe-separated list contains a comparator and a version: This list of C are signposts in the version timeline of a package that specify version intervals. A C satisfies a version range specifier if it is contained within any of the intervals defined by these C. L =head1 EXAMPLES Decode a "vers" string: vers-tool "vers:cpan/1.00|>=2.00|<5.00" | jq Check if a version is contained within a range: vers-tool "vers:cpan/1.00|>=2.00|<5.00" --contains "2.20" Humanize "vers": vers-tool "vers:cpan/1.00|>=2.00|<5.00" --human-readable cpan - equal 1.00 - greater than or equal 2.00 - less than 5.00 =head1 AUTHOR L =head1 COPYRIGHT AND LICENSE Copyright © 2022-2026 L You may use and distribute this module according to the same terms that Perl is distributed under. URI-PackageURL-2.26/bin/purl-tool0000644000175000017500000001137515264504421015464 0ustar peppepeppe#!/usr/bin/perl use strict; use warnings; use utf8; use URI::PackageURL::App; binmode STDOUT, ':encoding(UTF-8)'; binmode STDERR, ':encoding(UTF-8)'; exit URI::PackageURL::App->run(@ARGV) unless caller(); 1; __END__ =encoding utf-8 =head1 NAME purl-tool - Package URL tool =head1 SYNOPSIS purl-tool [OPTIONS]...STRING purl-tool --type STRING [--namespace STRING] --name STRING [--version STRING] [--subpath STRING] [--qualifier KEY=VALUE [...]] purl-tool [--help|--man|-v] Options: --info TYPE Display information about provided PURL type --list Display known PURL type --help Brief help message --man Full documentation -v Print version -q, --quiet Suppress output "purl" string encode options: --type=STRING Type --namespace=STRING Namespace (optional) --name=STRING Name --version=STRING Version (optional) --qualifier KEY=VALUE Qualifier key-value (optional) "purl" string decode options: --download-url Download URL --repository-url Repository URL -0, --null Return NULL char instead of new line --format=FORMAT Output format --dumper Data::Dumper format (--format=dumper) --json JSON output format (--format=json) --yaml YAML output format (--format=yaml) --env ENV output format (--format=env) "purl" validation options: --validate Validate a PURL string and return the exit code Examples: Parse the given Package URL string and return JSON and send the STDOUT to jq: purl-tool pkg:cpan/URI-PackageURL@2.26 --json | jq Download the package from the repository using PURL string: wget $(purl-tool pkg:cpan/URI-PackageURL@2.26?author=GDT --download-url) Create a canonical PURL string purl-tool --type cpan \ --name URI-PackageURL \ --version 2.26 Validate a PURL string: if purl-tool "$PURL_STRING" --validate -q; then echo "PURL string is valid" else echo "PURL string is not valid" fi Display information about provided PURL type (allowed components, repository, examples, etc.): purl-tool --info rpm Display all known PURL types: purl-tool --list =head1 DESCRIPTION C Package URL tool A Package URL (aka "purl") is a URL string used to identify and locate a software package in a mostly universal and uniform way across programing languages, package managers, packaging conventions, tools, APIs and databases. L A purl is a URL composed of seven components: scheme:type/namespace/name@version?qualifiers#subpath Components are separated by a specific character for unambiguous parsing. The definition for each components is: =over =item * "scheme": this is the URL scheme with the constant value of "pkg". One of the primary reason for this single scheme is to facilitate the future official registration of the "pkg" scheme for package URLs. Required. =item * "type": the package "type" or package "protocol" such as cpan, maven, npm, nuget, gem, pypi, etc. Required. =item * "namespace": some name prefix such as a Maven groupid, a Docker image owner, a GitHub user or organization. Optional and type-specific. =item * "name": the name of the package. Required. =item * "version": the version of the package. Optional. =item * "qualifiers": extra qualifying data for a package such as an OS, architecture, a distro, etc. Optional and type-specific. =item * "subpath": extra subpath within a package, relative to the package root. Optional. =back =head1 EXAMPLES Parse the given PURL string and return JSON and send the STDOUT to L: purl-tool pkg:cpan/URI-PackageURL@2.26 --json | jq Download the package from the repository using Package URL string: wget $(purl-tool pkg:cpan/URI-PackageURL@2.26 --download-url) Create a canonical Package URL string: purl-tool --type cpan \ --name URI-PackageURL \ --version 2.26 Display information about provided PURL type (allowed components, repository, examples, etc.): purl-tool --info rpm =head1 AUTHOR L =head1 COPYRIGHT AND LICENSE Copyright © 2022-2026 L You may use and distribute this module according to the same terms that Perl is distributed under. URI-PackageURL-2.26/INSTALL.md0000644000175000017500000000540014442172755014464 0ustar peppepeppe# URI::PackageURL - Perl extension for Package URL (aka "purl") The INSTALL is used to introduce the module and provide instructions on how to install the module, any machine dependencies it may have (for example C compilers and installed libraries) and any other information that should be provided before the module is installed. ## INSTALLATION Using Makefile.PL: To install this module, run the following commands. perl Makefile.PL make make test make install Using App::cpanminus: cpanm URI::PackageURL ## SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc URI::PackageURL You can also look for information at: * GitHub issues (report bugs here) https://github.com/giterlizzi/perl-URI-PackageURL/issues ## LICENSE AND COPYRIGHT Copyright (C) 2022-2023 Giuseppe Di Terlizzi This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at: http://www.perlfoundation.org/artistic_license_2_0 Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. URI-PackageURL-2.26/Makefile.PL0000644000175000017500000000235115264504421015000 0ustar peppepeppe#!perl use strict; use warnings; use ExtUtils::MakeMaker; WriteMakefile( NAME => 'URI::PackageURL', AUTHOR => q{Giuseppe Di Terlizzi }, VERSION_FROM => 'lib/URI/PackageURL.pm', ABSTRACT_FROM => 'lib/URI/PackageURL.pm', LICENSE => 'artistic_2', EXE_FILES => ['bin/purl-tool', 'bin/vers-tool'], MIN_PERL_VERSION => 5.010, PL_FILES => {}, CONFIGURE_REQUIRES => {'ExtUtils::MakeMaker' => '0'}, TEST_REQUIRES => {'Test::More' => '0', 'JSON::PP' => '0', 'CPAN::DistnameInfo' => 0}, PREREQ_PM => {'JSON::PP' => '0', 'List::Util' => '0'}, META_MERGE => { 'meta-spec' => {version => 2}, 'resources' => { bugtracker => {web => 'https://github.com/giterlizzi/perl-URI-PackageURL/issues'}, repository => { type => 'git', url => 'git://github.com/giterlizzi/perl-URI-PackageURL', web => 'https://github.com/giterlizzi/perl-URI-PackageURL' }, }, x_purl => 'pkg:cpan/URI-PackageURL' }, dist => {COMPRESS => 'gzip -9f', SUFFIX => 'gz'}, clean => {FILES => 'URI-PackageURL-*'}, ); URI-PackageURL-2.26/MANIFEST0000644000175000017500000001230215264504726014164 0ustar peppepeppebin/purl-tool bin/vers-tool Changes examples/cpan-dist-download-and-test.sh examples/rpm-to-purl.sh examples/version-comparators.pl INSTALL.md lib/URI/PackageURL.pm lib/URI/PackageURL/App.pm lib/URI/PackageURL/Type.pm lib/URI/PackageURL/types/alpm-definition.json lib/URI/PackageURL/types/apk-definition.json lib/URI/PackageURL/types/bazel-definition.json lib/URI/PackageURL/types/bitbucket-definition.json lib/URI/PackageURL/types/bitnami-definition.json lib/URI/PackageURL/types/brew-definition.json lib/URI/PackageURL/types/cargo-definition.json lib/URI/PackageURL/types/chrome-extension-definition.json lib/URI/PackageURL/types/cocoapods-definition.json lib/URI/PackageURL/types/composer-definition.json lib/URI/PackageURL/types/conan-definition.json lib/URI/PackageURL/types/conda-definition.json lib/URI/PackageURL/types/cpan-definition.json lib/URI/PackageURL/types/cran-definition.json lib/URI/PackageURL/types/deb-definition.json lib/URI/PackageURL/types/docker-definition.json lib/URI/PackageURL/types/gem-definition.json lib/URI/PackageURL/types/generic-definition.json lib/URI/PackageURL/types/git-definition.json lib/URI/PackageURL/types/github-definition.json lib/URI/PackageURL/types/golang-definition.json lib/URI/PackageURL/types/hackage-definition.json lib/URI/PackageURL/types/hex-definition.json lib/URI/PackageURL/types/huggingface-definition.json lib/URI/PackageURL/types/julia-definition.json lib/URI/PackageURL/types/luarocks-definition.json lib/URI/PackageURL/types/maven-definition.json lib/URI/PackageURL/types/mlflow-definition.json lib/URI/PackageURL/types/npm-definition.json lib/URI/PackageURL/types/nuget-definition.json lib/URI/PackageURL/types/oci-definition.json lib/URI/PackageURL/types/opam-definition.json lib/URI/PackageURL/types/otp-definition.json lib/URI/PackageURL/types/pub-definition.json lib/URI/PackageURL/types/pypi-definition.json lib/URI/PackageURL/types/qpkg-definition.json lib/URI/PackageURL/types/rpm-definition.json lib/URI/PackageURL/types/swid-definition.json lib/URI/PackageURL/types/swift-definition.json lib/URI/PackageURL/types/vcpkg-definition.json lib/URI/PackageURL/types/vscode-extension-definition.json lib/URI/PackageURL/types/yocto-definition.json lib/URI/PackageURL/Util.pm lib/URI/VersionRange.pm lib/URI/VersionRange/App.pm lib/URI/VersionRange/Constraint.pm lib/URI/VersionRange/Util.pm lib/URI/VersionRange/Version.pm LICENSE Makefile.PL MANIFEST This list of files README.md sync-purl-spec.sh t/00-load.t t/10-encode.t t/20-decode.t t/30-util.t t/40-cli.t t/50-version-range.t t/51-vers-scheme-loading.t t/52-vers-scheme-comparator.t t/53-vers-percent-encoding.t t/54-utf8.t t/60-semver-compare.t t/70-vers-from-native.t t/90-cpan-distname-info.t t/91-cpan-distpath-quailfier.t t/99-purl-legacy-test-suite.t t/99-purl-tests.t t/99-purl-type-definition.t t/99-vers-tests.t t/manifest.t t/pod-coverage.t t/pod.t t/purl/spec/specification-test.json t/purl/types/alpm-test.json t/purl/types/apk-test.json t/purl/types/bazel-test.json t/purl/types/bitbucket-test.json t/purl/types/bitnami-test.json t/purl/types/brew-test.json t/purl/types/cargo-test.json t/purl/types/chrome-extension-test.json t/purl/types/cocoapods-test.json t/purl/types/composer-test.json t/purl/types/conan-test.json t/purl/types/conda-test.json t/purl/types/cpan-test.json t/purl/types/cran-test.json t/purl/types/deb-test.json t/purl/types/docker-test.json t/purl/types/gem-test.json t/purl/types/generic-test.json t/purl/types/git-test.json t/purl/types/github-test.json t/purl/types/golang-test.json t/purl/types/hackage-test.json t/purl/types/hex-test.json t/purl/types/huggingface-test.json t/purl/types/julia-test.json t/purl/types/luarocks-test.json t/purl/types/maven-test.json t/purl/types/mlflow-test.json t/purl/types/npm-test.json t/purl/types/nuget-test.json t/purl/types/oci-test.json t/purl/types/opam-test.json t/purl/types/otp-test.json t/purl/types/pub-test.json t/purl/types/pypi-test.json t/purl/types/qpkg-test.json t/purl/types/rpm-test.json t/purl/types/swid-test.json t/purl/types/swift-test.json t/purl/types/vcpkg-test.json t/purl/types/vscode-extension-test.json t/purl/types/yocto-test.json t/sync-purl-legacy-test-suite-data.sh t/sync-tests.sh t/test-suite-data.json t/vers/alpine_version_cmp_test.json t/vers/alpm_version_cmp_test.json t/vers/conan_range_from_native_basic_test.json t/vers/conan_range_from_native_test.json t/vers/conan_version_cmp_test.json t/vers/datetime_version_cmp_test.json t/vers/gem_range_from_native_test.json t/vers/gentoo_version_cmp_test.json t/vers/intdot_version_cmp_test.json t/vers/lexicographic-test.json t/vers/maven_version_cmp_test.json t/vers/nginx_range_from_native_test.json t/vers/npm_range_containment_test.json t/vers/npm_range_from_native_test.json t/vers/nuget_range_from_native_test.json t/vers/nuget_version_cmp_test.json t/vers/openssl_range_from_native_test.json t/vers/openssl_version_cmp_test.json t/vers/pypi_range_containment_test.json t/vers/pypi_range_from_native_test.json t/vers/pypi_range_validate_test.json t/vers/test-overview.md t/vers/test-schema.md t/vers/test-suite.md t/vers/vers_canonical_parse_test.json META.yml Module YAML meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) URI-PackageURL-2.26/examples/0000755000175000017500000000000015264504726014653 5ustar peppepeppeURI-PackageURL-2.26/examples/rpm-to-purl.sh0000644000175000017500000000117114610552121017367 0ustar peppepeppe#!/bin/bash # rpm-to-purl - Convert all installed RPM packages in purl string # (C) 2023, Giuseppe Di Terlizzi # License MIT . /etc/os-release PACKAGES=$(rpm -qa --qf '%{NAME}\t%{VERSION}-%{RELEASE}\t%{ARCH}\n') while IFS= read -r LINE; do PKG_NAME=$(echo $LINE | cut -d ' ' -f1) PKG_VER=$(echo $LINE | cut -d ' ' -f2) PKG_ARCH=$(echo $LINE | cut -d ' ' -f3) purl-tool --type rpm \ --namespace $ID \ --name $PKG_NAME \ --version $PKG_VER \ --qualifier distro=$ID-$VERSION_ID \ --qualifier arch=$PKG_ARCH done <<< "$PACKAGES" URI-PackageURL-2.26/examples/version-comparators.pl0000644000175000017500000000114514617672755021237 0ustar peppepeppepackage URI::VersionRange::Version::generic { use Version::libversion::XS; use parent 'URI::VersionRange::Version'; use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return version_compare2($left->[0], $right->[0]); } } package URI::VersionRange::Version::rpm { use RPM4; use parent 'URI::VersionRange::Version'; use overload ('cmp' => \&compare, '<=>' => \&compare, fallback => 1); sub compare { my ($left, $right) = @_; return rpmvercmp($left->[0], $right->[0]); } } 1; URI-PackageURL-2.26/examples/cpan-dist-download-and-test.sh0000644000175000017500000000144114610552121022375 0ustar peppepeppe#!/bin/bash # cpan-dist-download-and-test - Download and test the provided cpan distribution using "purl" string # (C) 2023, Giuseppe Di Terlizzi # License MIT set -e PURL=$1 if [[ -z "$PURL" ]]; then echo "Usage: $0 PURL" echo "" echo " Example:" echo " $0 pkg:cpan/GDT/URI-PackageURL@2.04" echo "" exit 1 fi eval $(purl-tool "$PURL" --env) if [[ "$PURL_TYPE" != "cpan" ]]; then echo "[ERROR] Not 'cpan' type component" exit 1 fi if [[ -z "$PURL_DOWNLOAD_URL" ]]; then echo "[ERROR] Missing PURL_DOWNLOAD_URL" exit 1 fi echo "Download $PURL_NAME $PURL_VERSION" wget $PURL_DOWNLOAD_URL echo "Build and test module $PURL_NAME $PURL_VERSION" tar xvf $PURL_NAME-$PURL_VERSION.tar.gz cd $PURL_NAME-$PURL_VERSION perl Makefile.PL make && make test URI-PackageURL-2.26/META.yml0000644000175000017500000000151415264504726014307 0ustar peppepeppe--- abstract: 'Perl extension for PURL (Package URL)' author: - 'Giuseppe Di Terlizzi ' build_requires: CPAN::DistnameInfo: '0' ExtUtils::MakeMaker: '0' JSON::PP: '0' Test::More: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 generated_by: 'ExtUtils::MakeMaker version 7.78, CPAN::Meta::Converter version 2.150013' license: artistic_2 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: URI-PackageURL no_index: directory: - t - inc requires: JSON::PP: '0' List::Util: '0' perl: '5.010' resources: bugtracker: https://github.com/giterlizzi/perl-URI-PackageURL/issues repository: git://github.com/giterlizzi/perl-URI-PackageURL version: '2.26' x_purl: pkg:cpan/URI-PackageURL x_serialization_backend: 'CPAN::Meta::YAML version 0.020'