diff options
| author | ras0219 <533828+ras0219@users.noreply.github.com> | 2020-10-21 14:46:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-21 14:46:48 -0700 |
| commit | 291df751258928bc021a5251585c8733328edf25 (patch) | |
| tree | e6ff3a8819d9d65ba5faa2bfb76108ade17926fb /toolsrc/src/vcpkg-test | |
| parent | 998f86a82946591b1e80ade99a52699967dc66af (diff) | |
| download | vcpkg-291df751258928bc021a5251585c8733328edf25.tar.gz vcpkg-291df751258928bc021a5251585c8733328edf25.zip | |
[vcpkg] Add `versions` feature flag and version field manifest parsing (#14079)
* [vcpkg] Add `versions` feature flag and version field manifest parsing
* Introduce FeatureFlagSettings struct to more easily access feature flags throughout the program
* To avoid users accidentally starting to write "version" instead of "version-string" in their manifests, vcpkg explicitly detects and prevents usage of ports with schemes other than "String"
* Drive-by fix of copiable SourceControlFileLocation and an exposed use-after-move bug
This code is largely extracted from PR #13777
Co-authored-by: Victor Romero <romerosanchezv@gmail.com>
* [vcpkg] Address CR Comments. Fix test crash on Linux.
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
Co-authored-by: Victor Romero <romerosanchezv@gmail.com>
Diffstat (limited to 'toolsrc/src/vcpkg-test')
| -rw-r--r-- | toolsrc/src/vcpkg-test/manifests.cpp | 52 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/plan.cpp | 6 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/util.cpp | 6 |
3 files changed, 59 insertions, 5 deletions
diff --git a/toolsrc/src/vcpkg-test/manifests.cpp b/toolsrc/src/vcpkg-test/manifests.cpp index 77f4eb440..be087584e 100644 --- a/toolsrc/src/vcpkg-test/manifests.cpp +++ b/toolsrc/src/vcpkg-test/manifests.cpp @@ -39,6 +39,7 @@ static Parse::ParseExpected<SourceControlFile> test_parse_manifest(StringView sv { print_error_message(res.error()); } + REQUIRE(res.has_value() == !expect_fail); return res; } @@ -59,6 +60,57 @@ TEST_CASE ("manifest construct minimum", "[manifests]") REQUIRE(pgh.core_paragraph->dependencies.empty()); } +TEST_CASE ("manifest versioning", "[manifests]") +{ + std::tuple<StringLiteral, Versions::Scheme, StringLiteral> data[] = { + {R"json({ + "name": "zlib", + "version-string": "abcd" +} +)json", + Versions::Scheme::String, + "abcd"}, + {R"json({ + "name": "zlib", + "version-date": "2020-01-01" +} +)json", + Versions::Scheme::Date, + "2020-01-01"}, + {R"json({ + "name": "zlib", + "version": "1.2.3.4.5" +} +)json", + Versions::Scheme::Relaxed, + "1.2.3.4.5"}, + {R"json({ + "name": "zlib", + "version-semver": "1.2.3-rc3" +} +)json", + Versions::Scheme::Semver, + "1.2.3-rc3"}, + }; + for (auto v : data) + { + auto m_pgh = test_parse_manifest(std::get<0>(v)); + + REQUIRE(m_pgh.has_value()); + auto& pgh = **m_pgh.get(); + REQUIRE(Json::stringify(serialize_manifest(pgh), Json::JsonStyle::with_spaces(4)) == std::get<0>(v)); + REQUIRE(pgh.core_paragraph->version_scheme == std::get<1>(v)); + REQUIRE(pgh.core_paragraph->version == std::get<2>(v)); + } + + test_parse_manifest(R"json({ + "name": "zlib", + "version-string": "abcd", + "version-semver": "1.2.3-rc3" + })json", + true); +} + TEST_CASE ("manifest construct maximum", "[manifests]") { auto m_pgh = test_parse_manifest(R"json({ diff --git a/toolsrc/src/vcpkg-test/plan.cpp b/toolsrc/src/vcpkg-test/plan.cpp index 55c6740da..363a2d9b4 100644 --- a/toolsrc/src/vcpkg-test/plan.cpp +++ b/toolsrc/src/vcpkg-test/plan.cpp @@ -389,9 +389,9 @@ TEST_CASE ("basic feature test 8", "[plan]") auto spec_c_64 = FullPackageSpec{spec_map.emplace("c", "a[a1]"), {"core"}}; spec_map.triplet = Test::X86_WINDOWS; - auto spec_a_86 = FullPackageSpec{spec_map.emplace("a", "b", {{"a1", ""}}), {"core"}}; - auto spec_b_86 = FullPackageSpec{spec_map.emplace("b")}; - auto spec_c_86 = FullPackageSpec{spec_map.emplace("c", "a[a1]"), {"core"}}; + auto spec_a_86 = FullPackageSpec{PackageSpec{"a", Test::X86_WINDOWS}}; + auto spec_b_86 = FullPackageSpec{PackageSpec{"b", Test::X86_WINDOWS}}; + auto spec_c_86 = FullPackageSpec{PackageSpec{"c", Test::X86_WINDOWS}}; PortFileProvider::MapPortFileProvider map_port{spec_map.map}; MockCMakeVarProvider var_provider; diff --git a/toolsrc/src/vcpkg-test/util.cpp b/toolsrc/src/vcpkg-test/util.cpp index 083861bc2..73ff9db5c 100644 --- a/toolsrc/src/vcpkg-test/util.cpp +++ b/toolsrc/src/vcpkg-test/util.cpp @@ -108,8 +108,10 @@ namespace vcpkg::Test PackageSpec PackageSpecMap::emplace(vcpkg::SourceControlFileLocation&& scfl) { - map.emplace(scfl.source_control_file->core_paragraph->name, std::move(scfl)); - return {scfl.source_control_file->core_paragraph->name, triplet}; + const auto& name = scfl.source_control_file->core_paragraph->name; + REQUIRE(map.find(name) == map.end()); + map.emplace(name, std::move(scfl)); + return {name, triplet}; } static AllowSymlinks internal_can_create_symlinks() noexcept |
