From ce8b01a14bb6a61b4f0686674e4b51bd8ecfb83b Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Wed, 29 Apr 2020 10:16:40 -0700 Subject: [vcpkg] Add support for VCPKG_BINARY_SOURCES and --x-binarysource=<> (#10476) * [vcpkg] Add support for VCPKG_BINARY_SOURCES and --binarysource=<> * [vcpkg] Rename --binarysource to --x-binarysource to denote internal/experimental * [vcpkg] Address review comments & add tests for BinaryConfigParser * [vcpkg] Replace do {} while(1); with for(;;) Avoids conditional expresion is constant warnings * [vcpkg] Invert if/else * [vcpkg] Fix warning in export.prefab.cpp * [vcpkg] Resolve merge regressions --- toolsrc/src/vcpkg-test/binaryconfigparser.cpp | 183 ++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 toolsrc/src/vcpkg-test/binaryconfigparser.cpp (limited to 'toolsrc/src/vcpkg-test/binaryconfigparser.cpp') diff --git a/toolsrc/src/vcpkg-test/binaryconfigparser.cpp b/toolsrc/src/vcpkg-test/binaryconfigparser.cpp new file mode 100644 index 000000000..910d0836f --- /dev/null +++ b/toolsrc/src/vcpkg-test/binaryconfigparser.cpp @@ -0,0 +1,183 @@ +#include +#include + +using namespace vcpkg; + +#if defined(_WIN32) +#define ABSOLUTE_PATH "C:\\foo" +#else +#define ABSOLUTE_PATH "/foo" +#endif + +TEST_CASE ("BinaryConfigParser empty", "[binaryconfigparser]") +{ + auto parsed = create_binary_provider_from_configs_pure("", {}); + REQUIRE(parsed.has_value()); +} + +TEST_CASE ("BinaryConfigParser unacceptable provider", "[binaryconfigparser]") +{ + auto parsed = create_binary_provider_from_configs_pure("unacceptable", {}); + REQUIRE(!parsed.has_value()); +} + +TEST_CASE ("BinaryConfigParser files provider", "[binaryconfigparser]") +{ + { + auto parsed = create_binary_provider_from_configs_pure("files", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files,relative-path", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files,C:foo", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH, {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH ",nonsense", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH ",upload", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH ",upload,extra", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files,,upload", {}); + REQUIRE(!parsed.has_value()); + } +} + +TEST_CASE ("BinaryConfigParser default provider", "[binaryconfigparser]") +{ + { + auto parsed = create_binary_provider_from_configs_pure("default", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("default,nonsense", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("default,upload", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("default,upload,extra", {}); + REQUIRE(!parsed.has_value()); + } +} + +TEST_CASE ("BinaryConfigParser clear provider", "[binaryconfigparser]") +{ + { + auto parsed = create_binary_provider_from_configs_pure("clear", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("clear,upload", {}); + REQUIRE(!parsed.has_value()); + } +} + +TEST_CASE ("BinaryConfigParser multiple providers", "[binaryconfigparser]") +{ + { + auto parsed = create_binary_provider_from_configs_pure("clear;default", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("clear;default,upload", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("clear;default,upload;clear;clear", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("clear;files,relative;default", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure(";;;clear;;;;", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure(";;;,;;;;", {}); + REQUIRE(!parsed.has_value()); + } +} + +TEST_CASE ("BinaryConfigParser escaping", "[binaryconfigparser]") +{ + { + auto parsed = create_binary_provider_from_configs_pure(";;;;;;;`", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure(";;;;;;;`defaul`t", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH "`", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH "`,", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH "``", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH "```", {}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH "````", {}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH ",", {}); + REQUIRE(!parsed.has_value()); + } +} + +TEST_CASE ("BinaryConfigParser args", "[binaryconfigparser]") +{ + { + auto parsed = + create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH, std::vector{"clear"}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = + create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH, std::vector{"clear;default"}); + REQUIRE(parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH, + std::vector{"clear;default,"}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH, + std::vector{"clear", "clear;default,"}); + REQUIRE(!parsed.has_value()); + } + { + auto parsed = create_binary_provider_from_configs_pure("files," ABSOLUTE_PATH, + std::vector{"clear", "clear"}); + REQUIRE(parsed.has_value()); + } +} -- cgit v1.2.3