aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg-test
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2020-02-07 11:24:35 -0800
committerGitHub <noreply@github.com>2020-02-07 11:24:35 -0800
commit8db6db5dac70c25b04cd4dd84392484dee822fbe (patch)
tree4734de271f966ff4b9a913b15c1b7b537ecd1a8d /toolsrc/src/vcpkg-test
parent2873f07823df192ba55693d200850669eabe332c (diff)
downloadvcpkg-8db6db5dac70c25b04cd4dd84392484dee822fbe.tar.gz
vcpkg-8db6db5dac70c25b04cd4dd84392484dee822fbe.zip
[vcpkg] Further parser improvements (#9895)
* [vcpkg] Consolidate several internal parsers together (packagespecs + logicexpression + control) and enhance error messages * [vcpkg] Migrate Build-Depends parsing to new framework * [vcpkg] Fix tests. Re-enable underscores in feature names due to libwebp[vwebp_sdl] -- todo: rename this feature and remove underscores.
Diffstat (limited to 'toolsrc/src/vcpkg-test')
-rw-r--r--toolsrc/src/vcpkg-test/dependencies.cpp23
-rw-r--r--toolsrc/src/vcpkg-test/mockcmakevarsprovider.cpp2
-rw-r--r--toolsrc/src/vcpkg-test/paragraph.cpp48
-rw-r--r--toolsrc/src/vcpkg-test/plan.cpp34
-rw-r--r--toolsrc/src/vcpkg-test/specifier.cpp68
-rw-r--r--toolsrc/src/vcpkg-test/statusparagraphs.cpp22
-rw-r--r--toolsrc/src/vcpkg-test/util.cpp11
7 files changed, 94 insertions, 114 deletions
diff --git a/toolsrc/src/vcpkg-test/dependencies.cpp b/toolsrc/src/vcpkg-test/dependencies.cpp
index 63e7cfee7..c9eb0df35 100644
--- a/toolsrc/src/vcpkg-test/dependencies.cpp
+++ b/toolsrc/src/vcpkg-test/dependencies.cpp
@@ -2,14 +2,17 @@
#include <vcpkg-test/mockcmakevarprovider.h>
#include <vcpkg-test/util.h>
#include <vcpkg/dependencies.h>
+#include <vcpkg/paragraphparser.h>
#include <vcpkg/sourceparagraph.h>
using namespace vcpkg;
-using Parse::parse_comma_list;
+using namespace vcpkg::Parse;
TEST_CASE ("parse depends", "[dependencies]")
{
- auto v = expand_qualified_dependencies(parse_comma_list("liba (windows)"));
+ auto w = parse_dependencies_list("liba (windows)");
+ REQUIRE(w);
+ auto& v = *w.get();
REQUIRE(v.size() == 1);
REQUIRE(v.at(0).depend.name == "liba");
REQUIRE(v.at(0).qualifier == "windows");
@@ -23,7 +26,9 @@ TEST_CASE ("filter depends", "[dependencies]")
const std::unordered_map<std::string, std::string> arm_uwp_cmake_vars{{"VCPKG_TARGET_ARCHITECTURE", "arm"},
{"VCPKG_CMAKE_SYSTEM_NAME", "WindowsStore"}};
- auto deps = expand_qualified_dependencies(parse_comma_list("liba (windows), libb, libc (uwp)"));
+ auto deps_ = parse_dependencies_list("liba (!uwp), libb, libc (uwp)");
+ REQUIRE(deps_);
+ auto& deps = *deps_.get();
auto v = filter_dependencies(deps, Triplet::X64_WINDOWS, x64_win_cmake_vars);
REQUIRE(v.size() == 2);
REQUIRE(v.at(0).package_spec.name() == "liba");
@@ -37,10 +42,10 @@ TEST_CASE ("filter depends", "[dependencies]")
TEST_CASE ("parse feature depends", "[dependencies]")
{
- auto u = parse_comma_list("libwebp[anim, gif2webp, img2webp, info, mux, nearlossless, "
- "simd, cwebp, dwebp], libwebp[vwebp_sdl, extras] (!osx)");
- REQUIRE(u.at(1) == "libwebp[vwebp_sdl, extras] (!osx)");
- auto v = expand_qualified_dependencies(u);
+ auto u_ = parse_dependencies_list("libwebp[anim, gif2webp, img2webp, info, mux, nearlossless, "
+ "simd, cwebp, dwebp], libwebp[vwebp-sdl, extras] (!osx)");
+ REQUIRE(u_);
+ auto& v = *u_.get();
REQUIRE(v.size() == 2);
auto&& a0 = v.at(0);
REQUIRE(a0.depend.name == "libwebp");
@@ -67,9 +72,7 @@ TEST_CASE ("qualified dependency", "[dependencies]")
REQUIRE(plan.install_actions.size() == 2);
REQUIRE(plan.install_actions.at(0).feature_list == std::vector<std::string>{"core"});
- FullPackageSpec linspec_a{PackageSpec::from_name_and_triplet("a", Triplet::from_canonical_name("x64-linux"))
- .value_or_exit(VCPKG_LINE_INFO),
- {}};
+ FullPackageSpec linspec_a{{"a", Triplet::from_canonical_name("x64-linux")}, {}};
var_provider.dep_info_vars[linspec_a.package_spec].emplace("VCPKG_CMAKE_SYSTEM_NAME", "Linux");
auto plan2 = vcpkg::Dependencies::create_feature_install_plan(map_port, var_provider, {linspec_a}, {});
REQUIRE(plan2.install_actions.size() == 2);
diff --git a/toolsrc/src/vcpkg-test/mockcmakevarsprovider.cpp b/toolsrc/src/vcpkg-test/mockcmakevarsprovider.cpp
index eda1a7a64..655bc33b4 100644
--- a/toolsrc/src/vcpkg-test/mockcmakevarsprovider.cpp
+++ b/toolsrc/src/vcpkg-test/mockcmakevarsprovider.cpp
@@ -3,7 +3,7 @@
namespace vcpkg::Test
{
Optional<const std::unordered_map<std::string, std::string>&> MockCMakeVarProvider::get_generic_triplet_vars(
- const Triplet& triplet) const
+ Triplet triplet) const
{
auto it = generic_triplet_vars.find(triplet);
if (it == generic_triplet_vars.end()) return nullopt;
diff --git a/toolsrc/src/vcpkg-test/paragraph.cpp b/toolsrc/src/vcpkg-test/paragraph.cpp
index 2ee4efe2f..21da80c5b 100644
--- a/toolsrc/src/vcpkg-test/paragraph.cpp
+++ b/toolsrc/src/vcpkg-test/paragraph.cpp
@@ -46,7 +46,7 @@ TEST_CASE ("SourceParagraph construct maximum", "[paragraph]")
REQUIRE(pgh.core_paragraph->maintainer == "m");
REQUIRE(pgh.core_paragraph->description == "d");
REQUIRE(pgh.core_paragraph->depends.size() == 1);
- REQUIRE(pgh.core_paragraph->depends[0].name() == "bd");
+ REQUIRE(pgh.core_paragraph->depends[0].depend.name == "bd");
REQUIRE(pgh.core_paragraph->default_features.size() == 1);
REQUIRE(pgh.core_paragraph->default_features[0] == "df");
}
@@ -64,8 +64,8 @@ TEST_CASE ("SourceParagraph two depends", "[paragraph]")
auto& pgh = **m_pgh.get();
REQUIRE(pgh.core_paragraph->depends.size() == 2);
- REQUIRE(pgh.core_paragraph->depends[0].name() == "z");
- REQUIRE(pgh.core_paragraph->depends[1].name() == "openssl");
+ REQUIRE(pgh.core_paragraph->depends[0].depend.name == "z");
+ REQUIRE(pgh.core_paragraph->depends[1].depend.name == "openssl");
}
TEST_CASE ("SourceParagraph three depends", "[paragraph]")
@@ -81,9 +81,9 @@ TEST_CASE ("SourceParagraph three depends", "[paragraph]")
auto& pgh = **m_pgh.get();
REQUIRE(pgh.core_paragraph->depends.size() == 3);
- REQUIRE(pgh.core_paragraph->depends[0].name() == "z");
- REQUIRE(pgh.core_paragraph->depends[1].name() == "openssl");
- REQUIRE(pgh.core_paragraph->depends[2].name() == "xyz");
+ REQUIRE(pgh.core_paragraph->depends[0].depend.name == "z");
+ REQUIRE(pgh.core_paragraph->depends[1].depend.name == "openssl");
+ REQUIRE(pgh.core_paragraph->depends[2].depend.name == "xyz");
}
TEST_CASE ("SourceParagraph construct qualified depends", "[paragraph]")
@@ -93,7 +93,7 @@ TEST_CASE ("SourceParagraph construct qualified depends", "[paragraph]")
std::vector<std::unordered_map<std::string, std::string>>{{
{"Source", "zlib"},
{"Version", "1.2.8"},
- {"Build-Depends", "libA (windows), libB (uwp)"},
+ {"Build-Depends", "liba (windows), libb (uwp)"},
}});
REQUIRE(m_pgh.has_value());
auto& pgh = **m_pgh.get();
@@ -103,9 +103,9 @@ TEST_CASE ("SourceParagraph construct qualified depends", "[paragraph]")
REQUIRE(pgh.core_paragraph->maintainer == "");
REQUIRE(pgh.core_paragraph->description == "");
REQUIRE(pgh.core_paragraph->depends.size() == 2);
- REQUIRE(pgh.core_paragraph->depends[0].name() == "libA");
+ REQUIRE(pgh.core_paragraph->depends[0].depend.name == "liba");
REQUIRE(pgh.core_paragraph->depends[0].qualifier == "windows");
- REQUIRE(pgh.core_paragraph->depends[1].name() == "libB");
+ REQUIRE(pgh.core_paragraph->depends[1].depend.name == "libb");
REQUIRE(pgh.core_paragraph->depends[1].qualifier == "uwp");
}
@@ -210,14 +210,14 @@ TEST_CASE ("BinaryParagraph default features", "[paragraph]")
TEST_CASE ("parse paragraphs empty", "[paragraph]")
{
const char* str = "";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.empty());
}
TEST_CASE ("parse paragraphs one field", "[paragraph]")
{
const char* str = "f1: v1";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0].size() == 1);
REQUIRE(pghs[0]["f1"] == "v1");
@@ -227,7 +227,7 @@ TEST_CASE ("parse paragraphs one pgh", "[paragraph]")
{
const char* str = "f1: v1\n"
"f2: v2";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0].size() == 2);
REQUIRE(pghs[0]["f1"] == "v1");
@@ -241,7 +241,7 @@ TEST_CASE ("parse paragraphs two pgh", "[paragraph]")
"\n"
"f3: v3\n"
"f4: v4";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 2);
REQUIRE(pghs[0].size() == 2);
@@ -259,7 +259,7 @@ TEST_CASE ("parse paragraphs field names", "[paragraph]")
"F:\n"
"0:\n"
"F-2:\n";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0].size() == 5);
@@ -273,7 +273,7 @@ TEST_CASE ("parse paragraphs multiple blank lines", "[paragraph]")
"\n"
"f3: v3\n"
"f4: v4";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 2);
}
@@ -282,7 +282,7 @@ TEST_CASE ("parse paragraphs empty fields", "[paragraph]")
{
const char* str = "f1:\n"
"f2: ";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0].size() == 2);
@@ -298,7 +298,7 @@ TEST_CASE ("parse paragraphs multiline fields", "[paragraph]")
"f2:\r\n"
" f2\r\n"
" continue\r\n";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0]["f1"] == "simple\n f1");
@@ -312,7 +312,7 @@ TEST_CASE ("parse paragraphs crlfs", "[paragraph]")
"\r\n"
"f3: v3\r\n"
"f4: v4";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 2);
REQUIRE(pghs[0].size() == 2);
@@ -334,7 +334,7 @@ TEST_CASE ("parse paragraphs comment", "[paragraph]")
"f3: v3\r\n"
"#comment\r\n"
"f4: v4";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 2);
REQUIRE(pghs[0].size() == 2);
@@ -349,7 +349,7 @@ TEST_CASE ("parse comment before single line feed", "[paragraph]")
{
const char* str = "f1: v1\r\n"
"#comment\n";
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(str, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs[0].size() == 1);
REQUIRE(pghs[0]["f1"] == "v1");
}
@@ -363,7 +363,7 @@ TEST_CASE ("BinaryParagraph serialize min", "[paragraph]")
{"Multi-Arch", "same"},
});
std::string ss = Strings::serialize(pgh);
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0].size() == 5);
@@ -386,7 +386,7 @@ TEST_CASE ("BinaryParagraph serialize max", "[paragraph]")
{"Multi-Arch", "same"},
});
std::string ss = Strings::serialize(pgh);
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0].size() == 8);
@@ -409,7 +409,7 @@ TEST_CASE ("BinaryParagraph serialize multiple deps", "[paragraph]")
{"Depends", "a, b, c"},
});
std::string ss = Strings::serialize(pgh);
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0]["Depends"] == "a, b, c");
@@ -426,7 +426,7 @@ TEST_CASE ("BinaryParagraph serialize abi", "[paragraph]")
{"Abi", "123abc"},
});
std::string ss = Strings::serialize(pgh);
- auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss).value_or_exit(VCPKG_LINE_INFO);
+ auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss, "").value_or_exit(VCPKG_LINE_INFO);
REQUIRE(pghs.size() == 1);
REQUIRE(pghs[0]["Abi"] == "123abc");
diff --git a/toolsrc/src/vcpkg-test/plan.cpp b/toolsrc/src/vcpkg-test/plan.cpp
index 594c9783b..d3d4310e9 100644
--- a/toolsrc/src/vcpkg-test/plan.cpp
+++ b/toolsrc/src/vcpkg-test/plan.cpp
@@ -19,7 +19,6 @@ using Test::make_status_feature_pgh;
using Test::make_status_pgh;
using Test::MockCMakeVarProvider;
using Test::PackageSpecMap;
-using Test::unsafe_pspec;
/// <summary>
/// Assert that the given action an install of given features from given package.
@@ -27,7 +26,7 @@ using Test::unsafe_pspec;
static void features_check(Dependencies::InstallPlanAction& plan,
std::string pkg_name,
std::vector<std::string> expected_features,
- const Triplet& triplet = Triplet::X86_WINDOWS)
+ Triplet triplet = Triplet::X86_WINDOWS)
{
const auto& feature_list = plan.feature_list;
@@ -53,7 +52,7 @@ static void features_check(Dependencies::InstallPlanAction& plan,
/// </summary>
static void remove_plan_check(Dependencies::RemovePlanAction& plan,
std::string pkg_name,
- const Triplet& triplet = Triplet::X86_WINDOWS)
+ Triplet triplet = Triplet::X86_WINDOWS)
{
REQUIRE(plan.spec.triplet().to_string() == triplet.to_string());
REQUIRE(pkg_name == plan.spec.name());
@@ -381,8 +380,7 @@ TEST_CASE ("basic feature test 8", "[plan]")
std::vector<std::unique_ptr<StatusParagraph>> status_paragraphs;
status_paragraphs.push_back(make_status_pgh("a"));
status_paragraphs.push_back(make_status_pgh("a"));
- status_paragraphs.back()->package.spec =
- PackageSpec::from_name_and_triplet("a", Triplet::X64_WINDOWS).value_or_exit(VCPKG_LINE_INFO);
+ status_paragraphs.back()->package.spec = PackageSpec("a", Triplet::X64_WINDOWS);
PackageSpecMap spec_map(Triplet::X64_WINDOWS);
auto spec_a_64 = FullPackageSpec{spec_map.emplace("a", "b", {{"a1", ""}}), {"core"}};
@@ -464,8 +462,7 @@ TEST_CASE ("install default features test 2", "[plan]")
{
std::vector<std::unique_ptr<StatusParagraph>> status_paragraphs;
status_paragraphs.push_back(make_status_pgh("a"));
- status_paragraphs.back()->package.spec =
- PackageSpec::from_name_and_triplet("a", Triplet::X64_WINDOWS).value_or_exit(VCPKG_LINE_INFO);
+ status_paragraphs.back()->package.spec = PackageSpec("a", Triplet::X64_WINDOWS);
// Add a port "a" of which "core" is already installed, but we will
// install the default features "explicitly"
@@ -610,8 +607,7 @@ TEST_CASE ("do not install default features of existing dependency", "[plan]")
std::vector<std::unique_ptr<StatusParagraph>> status_paragraphs;
// "b[core]" is already installed
status_paragraphs.push_back(make_status_pgh("b"));
- status_paragraphs.back()->package.spec =
- PackageSpec::from_name_and_triplet("b", Triplet::X64_WINDOWS).value_or_exit(VCPKG_LINE_INFO);
+ status_paragraphs.back()->package.spec = PackageSpec("b", Triplet::X64_WINDOWS);
// Install "a" (without explicit feature specification)
auto install_specs = FullPackageSpec::from_string("a", Triplet::X64_WINDOWS);
@@ -632,8 +628,7 @@ TEST_CASE ("install default features of dependency test 3", "[plan]")
{
std::vector<std::unique_ptr<StatusParagraph>> status_paragraphs;
status_paragraphs.push_back(make_status_pgh("b"));
- status_paragraphs.back()->package.spec =
- PackageSpec::from_name_and_triplet("b", Triplet::X64_WINDOWS).value_or_exit(VCPKG_LINE_INFO);
+ status_paragraphs.back()->package.spec = PackageSpec("b", Triplet::X64_WINDOWS);
// Add a port "a" which depends on the core of "b", which was already
// installed explicitly
@@ -945,7 +940,7 @@ TEST_CASE ("basic remove scheme", "[plan]")
pghs.push_back(make_status_pgh("a"));
StatusParagraphs status_db(std::move(pghs));
- auto remove_plan = Dependencies::create_remove_plan({unsafe_pspec("a")}, status_db);
+ auto remove_plan = Dependencies::create_remove_plan({{"a", Triplet::X86_WINDOWS}}, status_db);
REQUIRE(remove_plan.size() == 1);
REQUIRE(remove_plan.at(0).spec.name() == "a");
@@ -958,7 +953,7 @@ TEST_CASE ("recurse remove scheme", "[plan]")
pghs.push_back(make_status_pgh("b", "a"));
StatusParagraphs status_db(std::move(pghs));
- auto remove_plan = Dependencies::create_remove_plan({unsafe_pspec("a")}, status_db);
+ auto remove_plan = Dependencies::create_remove_plan({{"a", Triplet::X86_WINDOWS}}, status_db);
REQUIRE(remove_plan.size() == 2);
REQUIRE(remove_plan.at(0).spec.name() == "b");
@@ -973,7 +968,7 @@ TEST_CASE ("features depend remove scheme", "[plan]")
pghs.push_back(make_status_feature_pgh("b", "0", "a"));
StatusParagraphs status_db(std::move(pghs));
- auto remove_plan = Dependencies::create_remove_plan({unsafe_pspec("a")}, status_db);
+ auto remove_plan = Dependencies::create_remove_plan({{"a", Triplet::X86_WINDOWS}}, status_db);
REQUIRE(remove_plan.size() == 2);
REQUIRE(remove_plan.at(0).spec.name() == "b");
@@ -989,7 +984,7 @@ TEST_CASE ("features depend remove scheme once removed", "[plan]")
pghs.push_back(make_status_feature_pgh("opencv", "vtk", "vtk"));
StatusParagraphs status_db(std::move(pghs));
- auto remove_plan = Dependencies::create_remove_plan({unsafe_pspec("expat")}, status_db);
+ auto remove_plan = Dependencies::create_remove_plan({{"expat", Triplet::X86_WINDOWS}}, status_db);
REQUIRE(remove_plan.size() == 3);
REQUIRE(remove_plan.at(0).spec.name() == "opencv");
@@ -1006,8 +1001,7 @@ TEST_CASE ("features depend remove scheme once removed x64", "[plan]")
pghs.push_back(make_status_feature_pgh("opencv", "vtk", "vtk", "x64"));
StatusParagraphs status_db(std::move(pghs));
- auto remove_plan =
- Dependencies::create_remove_plan({unsafe_pspec("expat", Triplet::from_canonical_name("x64"))}, status_db);
+ auto remove_plan = Dependencies::create_remove_plan({{"expat", Triplet::from_canonical_name("x64")}}, status_db);
REQUIRE(remove_plan.size() == 3);
REQUIRE(remove_plan.at(0).spec.name() == "opencv");
@@ -1022,8 +1016,7 @@ TEST_CASE ("features depend core remove scheme", "[plan]")
pghs.push_back(make_status_pgh("cpr", "curl[core]", "", "x64"));
StatusParagraphs status_db(std::move(pghs));
- auto remove_plan =
- Dependencies::create_remove_plan({unsafe_pspec("curl", Triplet::from_canonical_name("x64"))}, status_db);
+ auto remove_plan = Dependencies::create_remove_plan({{"curl", Triplet::from_canonical_name("x64")}}, status_db);
REQUIRE(remove_plan.size() == 2);
REQUIRE(remove_plan.at(0).spec.name() == "cpr");
@@ -1038,8 +1031,7 @@ TEST_CASE ("features depend core remove scheme 2", "[plan]")
pghs.push_back(make_status_feature_pgh("curl", "b", "curl[a]", "x64"));
StatusParagraphs status_db(std::move(pghs));
- auto remove_plan =
- Dependencies::create_remove_plan({unsafe_pspec("curl", Triplet::from_canonical_name("x64"))}, status_db);
+ auto remove_plan = Dependencies::create_remove_plan({{"curl", Triplet::from_canonical_name("x64")}}, status_db);
REQUIRE(remove_plan.size() == 1);
REQUIRE(remove_plan.at(0).spec.name() == "curl");
diff --git a/toolsrc/src/vcpkg-test/specifier.cpp b/toolsrc/src/vcpkg-test/specifier.cpp
index a0a3725e8..2a1398416 100644
--- a/toolsrc/src/vcpkg-test/specifier.cpp
+++ b/toolsrc/src/vcpkg-test/specifier.cpp
@@ -12,8 +12,8 @@ TEST_CASE ("specifier conversion", "[specifier]")
{
constexpr std::size_t SPEC_SIZE = 6;
- auto a_spec = PackageSpec::from_name_and_triplet("a", Triplet::X64_WINDOWS).value_or_exit(VCPKG_LINE_INFO);
- auto b_spec = PackageSpec::from_name_and_triplet("b", Triplet::X64_WINDOWS).value_or_exit(VCPKG_LINE_INFO);
+ PackageSpec a_spec("a", Triplet::X64_WINDOWS);
+ PackageSpec b_spec("b", Triplet::X64_WINDOWS);
auto fspecs = FullPackageSpec{a_spec, {"0", "1"}}.to_feature_specs({}, {});
auto fspecs2 = FullPackageSpec{b_spec, {"2", "3"}}.to_feature_specs({}, {});
@@ -36,67 +36,59 @@ TEST_CASE ("specifier parsing", "[specifier]")
{
SECTION ("parsed specifier from string")
{
- auto maybe_spec = vcpkg::ParsedSpecifier::from_string("zlib");
- REQUIRE(maybe_spec.error() == vcpkg::PackageSpecParseResult::SUCCESS);
+ auto maybe_spec = vcpkg::parse_qualified_specifier("zlib");
+ REQUIRE(maybe_spec.has_value());
auto& spec = *maybe_spec.get();
REQUIRE(spec.name == "zlib");
- REQUIRE(spec.features.size() == 0);
- REQUIRE(spec.triplet == "");
+ REQUIRE(!spec.features);
+ REQUIRE(!spec.triplet);
}
SECTION ("parsed specifier from string with triplet")
{
- auto maybe_spec = vcpkg::ParsedSpecifier::from_string("zlib:x64-uwp");
- REQUIRE(maybe_spec.error() == vcpkg::PackageSpecParseResult::SUCCESS);
+ auto maybe_spec = vcpkg::parse_qualified_specifier("zlib:x64-uwp");
+ REQUIRE(maybe_spec);
auto& spec = *maybe_spec.get();
REQUIRE(spec.name == "zlib");
- REQUIRE(spec.triplet == "x64-uwp");
+ REQUIRE(spec.triplet.value_or("") == "x64-uwp");
}
SECTION ("parsed specifier from string with colons")
{
- auto ec = vcpkg::ParsedSpecifier::from_string("zlib:x86-uwp:").error();
- REQUIRE(ec == vcpkg::PackageSpecParseResult::TOO_MANY_COLONS);
+ auto s = vcpkg::parse_qualified_specifier("zlib:x86-uwp:");
+ REQUIRE(!s);
}
SECTION ("parsed specifier from string with feature")
{
- auto maybe_spec = vcpkg::ParsedSpecifier::from_string("zlib[feature]:x64-uwp");
- REQUIRE(maybe_spec.error() == vcpkg::PackageSpecParseResult::SUCCESS);
+ auto maybe_spec = vcpkg::parse_qualified_specifier("zlib[feature]:x64-uwp");
+ REQUIRE(maybe_spec);
auto& spec = *maybe_spec.get();
REQUIRE(spec.name == "zlib");
- REQUIRE(spec.features.size() == 1);
- REQUIRE(spec.features.at(0) == "feature");
- REQUIRE(spec.triplet == "x64-uwp");
+ REQUIRE(spec.features.value_or(std::vector<std::string>{}) == std::vector<std::string>{"feature"});
+ REQUIRE(spec.triplet.value_or("") == "x64-uwp");
}
SECTION ("parsed specifier from string with many features")
{
- auto maybe_spec = vcpkg::ParsedSpecifier::from_string("zlib[0, 1,2]");
- REQUIRE(maybe_spec.error() == vcpkg::PackageSpecParseResult::SUCCESS);
+ auto maybe_spec = vcpkg::parse_qualified_specifier("zlib[0, 1,2]");
+ REQUIRE(maybe_spec);
auto& spec = *maybe_spec.get();
- REQUIRE(spec.name == "zlib");
- REQUIRE(spec.features.size() == 3);
- REQUIRE(spec.features.at(0) == "0");
- REQUIRE(spec.features.at(1) == "1");
- REQUIRE(spec.features.at(2) == "2");
- REQUIRE(spec.triplet == "");
+ REQUIRE(spec.features.value_or(std::vector<std::string>{}) == std::vector<std::string>{"0", "1", "2"});
}
SECTION ("parsed specifier wildcard feature")
{
- auto maybe_spec = vcpkg::ParsedSpecifier::from_string("zlib[*]");
- REQUIRE(maybe_spec.error() == vcpkg::PackageSpecParseResult::SUCCESS);
+ auto maybe_spec = vcpkg::parse_qualified_specifier("zlib[*]");
+ System::print2(maybe_spec.error());
+ REQUIRE(maybe_spec);
auto& spec = *maybe_spec.get();
- REQUIRE(spec.name == "zlib");
- REQUIRE(spec.features.size() == 1);
- REQUIRE(spec.features.at(0) == "*");
- REQUIRE(spec.triplet == "");
+ REQUIRE(spec.features.value_or(std::vector<std::string>{}) == std::vector<std::string>{"*"});
}
SECTION ("expand wildcards")
@@ -109,17 +101,15 @@ TEST_CASE ("specifier parsing", "[specifier]")
Util::Vectors::append(&specs, specs2);
Util::sort(specs);
- auto spectargets = FeatureSpec::from_strings_and_triplet(
- {
- "openssl",
- "zlib",
- "zlib[0]",
- "zlib[1]",
- },
- Triplet::X86_UWP);
+ std::vector<FeatureSpec> spectargets{
+ {{"openssl", Triplet::X86_UWP}, "core"},
+ {{"zlib", Triplet::X86_UWP}, "core"},
+ {{"zlib", Triplet::X86_UWP}, "0"},
+ {{"zlib", Triplet::X86_UWP}, "1"},
+ };
Util::sort(spectargets);
REQUIRE(specs.size() == spectargets.size());
- REQUIRE(Util::all_equal(specs, spectargets));
+ REQUIRE(specs == spectargets);
}
#if defined(_WIN32)
diff --git a/toolsrc/src/vcpkg-test/statusparagraphs.cpp b/toolsrc/src/vcpkg-test/statusparagraphs.cpp
index 88b499118..c755948b5 100644
--- a/toolsrc/src/vcpkg-test/statusparagraphs.cpp
+++ b/toolsrc/src/vcpkg-test/statusparagraphs.cpp
@@ -18,14 +18,15 @@ Architecture: x64-windows
Multi-Arch: same
Description:
Status: install ok installed
-)");
+)",
+ "");
REQUIRE(pghs);
StatusParagraphs status_db(
Util::fmap(*pghs.get(), [](RawParagraph& rpgh) { return std::make_unique<StatusParagraph>(std::move(rpgh)); }));
- auto it = status_db.find_installed(unsafe_pspec("ffmpeg", Triplet::X64_WINDOWS));
+ auto it = status_db.find_installed({"ffmpeg", Triplet::X64_WINDOWS});
REQUIRE(it != status_db.end());
}
@@ -38,14 +39,15 @@ Architecture: x64-windows
Multi-Arch: same
Description:
Status: purge ok not-installed
-)");
+)",
+ "");
REQUIRE(pghs);
StatusParagraphs status_db(
Util::fmap(*pghs.get(), [](RawParagraph& rpgh) { return std::make_unique<StatusParagraph>(std::move(rpgh)); }));
- auto it = status_db.find_installed(unsafe_pspec("ffmpeg", Triplet::X64_WINDOWS));
+ auto it = status_db.find_installed({"ffmpeg", Triplet::X64_WINDOWS});
REQUIRE(it == status_db.end());
}
@@ -66,18 +68,19 @@ Architecture: x64-windows
Multi-Arch: same
Description:
Status: purge ok not-installed
-)");
+)",
+ "");
REQUIRE(pghs);
StatusParagraphs status_db(
Util::fmap(*pghs.get(), [](RawParagraph& rpgh) { return std::make_unique<StatusParagraph>(std::move(rpgh)); }));
- auto it = status_db.find_installed(unsafe_pspec("ffmpeg", Triplet::X64_WINDOWS));
+ auto it = status_db.find_installed({"ffmpeg", Triplet::X64_WINDOWS});
REQUIRE(it != status_db.end());
// Feature "openssl" is not installed and should not be found
- auto it1 = status_db.find_installed({unsafe_pspec("ffmpeg", Triplet::X64_WINDOWS), "openssl"});
+ auto it1 = status_db.find_installed({{"ffmpeg", Triplet::X64_WINDOWS}, "openssl"});
REQUIRE(it1 == status_db.end());
}
@@ -98,13 +101,14 @@ Architecture: x64-windows
Multi-Arch: same
Description:
Status: install ok installed
-)");
+)",
+ "");
REQUIRE(pghs);
StatusParagraphs status_db(
Util::fmap(*pghs.get(), [](RawParagraph& rpgh) { return std::make_unique<StatusParagraph>(std::move(rpgh)); }));
// Feature "openssl" is installed and should therefore be found
- auto it = status_db.find_installed({unsafe_pspec("ffmpeg", Triplet::X64_WINDOWS), "openssl"});
+ auto it = status_db.find_installed({{"ffmpeg", Triplet::X64_WINDOWS}, "openssl"});
REQUIRE(it != status_db.end());
}
diff --git a/toolsrc/src/vcpkg-test/util.cpp b/toolsrc/src/vcpkg-test/util.cpp
index db310f7a0..ae02e3ab0 100644
--- a/toolsrc/src/vcpkg-test/util.cpp
+++ b/toolsrc/src/vcpkg-test/util.cpp
@@ -104,17 +104,8 @@ namespace vcpkg::Test
PackageSpec PackageSpecMap::emplace(vcpkg::SourceControlFileLocation&& scfl)
{
- auto spec = PackageSpec::from_name_and_triplet(scfl.source_control_file->core_paragraph->name, triplet);
- REQUIRE(spec.has_value());
map.emplace(scfl.source_control_file->core_paragraph->name, std::move(scfl));
- return PackageSpec{*spec.get()};
- }
-
- PackageSpec unsafe_pspec(std::string name, Triplet t)
- {
- auto m_ret = PackageSpec::from_name_and_triplet(name, t);
- REQUIRE(m_ret.has_value());
- return m_ret.value_or_exit(VCPKG_LINE_INFO);
+ return {scfl.source_control_file->core_paragraph->name, triplet};
}
static AllowSymlinks internal_can_create_symlinks() noexcept