diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2020-02-07 11:24:35 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-07 11:24:35 -0800 |
| commit | 8db6db5dac70c25b04cd4dd84392484dee822fbe (patch) | |
| tree | 4734de271f966ff4b9a913b15c1b7b537ecd1a8d /toolsrc/src/vcpkg-test | |
| parent | 2873f07823df192ba55693d200850669eabe332c (diff) | |
| download | vcpkg-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.cpp | 23 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/mockcmakevarsprovider.cpp | 2 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/paragraph.cpp | 48 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/plan.cpp | 34 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/specifier.cpp | 68 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/statusparagraphs.cpp | 22 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/util.cpp | 11 |
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 |
