PackageVersionDataManifest.cpp (4072B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "TestCommon.h" 5 #include <winget/PackageVersionDataManifest.h> 6 7 using namespace TestCommon; 8 using namespace AppInstaller; 9 using namespace AppInstaller::Manifest; 10 using namespace AppInstaller::Utility; 11 12 void RequireVersionDataEqual(const PackageVersionDataManifest::VersionData& first, const PackageVersionDataManifest::VersionData& second) 13 { 14 REQUIRE(first.Version == second.Version); 15 REQUIRE(first.ArpMinVersion == second.ArpMinVersion); 16 REQUIRE(first.ArpMaxVersion == second.ArpMaxVersion); 17 REQUIRE(first.ManifestRelativePath == second.ManifestRelativePath); 18 REQUIRE(first.ManifestHash == second.ManifestHash); 19 } 20 21 TEST_CASE("PackageVersionDataManifest_Empty", "[PackageVersionDataManifest]") 22 { 23 PackageVersionDataManifest original; 24 25 PackageVersionDataManifest copy; 26 copy.Deserialize(original.Serialize()); 27 28 REQUIRE(original.Versions().empty()); 29 REQUIRE(copy.Versions().empty()); 30 } 31 32 TEST_CASE("PackageVersionDataManifest_Single_Simple", "[PackageVersionDataManifest]") 33 { 34 PackageVersionDataManifest original; 35 original.AddVersion({ VersionAndChannel{ Version{ "1.0" }, Channel{} }, {}, {}, "path", "hash" }); 36 37 PackageVersionDataManifest copy; 38 copy.Deserialize(original.Serialize()); 39 40 REQUIRE(original.Versions().size() == 1); 41 REQUIRE(copy.Versions().size() == 1); 42 43 RequireVersionDataEqual(copy.Versions()[0], original.Versions()[0]); 44 } 45 46 TEST_CASE("PackageVersionDataManifest_Single_Complete", "[PackageVersionDataManifest]") 47 { 48 PackageVersionDataManifest original; 49 original.AddVersion({ VersionAndChannel{ Version{ "1.0" }, Channel{} }, ".99", "1.01", "path", "hash"}); 50 51 PackageVersionDataManifest copy; 52 copy.Deserialize(original.Serialize()); 53 54 REQUIRE(original.Versions().size() == 1); 55 REQUIRE(copy.Versions().size() == 1); 56 57 RequireVersionDataEqual(copy.Versions()[0], original.Versions()[0]); 58 } 59 60 TEST_CASE("PackageVersionDataManifest_Multiple", "[PackageVersionDataManifest]") 61 { 62 PackageVersionDataManifest original; 63 original.AddVersion({ VersionAndChannel{ Version{ "1.0" }, Channel{} }, ".99", "1.01", "path", "hash" }); 64 original.AddVersion({ VersionAndChannel{ Version{ "1.1" }, Channel{} }, "1.99", "2.01", "path2", "hash2" }); 65 original.AddVersion({ VersionAndChannel{ Version{ "1.2" }, Channel{} }, {}, {}, "path2", "hash2" }); 66 original.AddVersion({ VersionAndChannel{ Version{ "2.0" }, Channel{} }, "3.99", "15.01", "path4", "hash4" }); 67 68 PackageVersionDataManifest copy; 69 copy.Deserialize(original.Serialize()); 70 71 REQUIRE(original.Versions().size() == copy.Versions().size()); 72 73 for (size_t i = 0; i < original.Versions().size(); ++i) 74 { 75 INFO(i); 76 RequireVersionDataEqual(copy.Versions()[i], original.Versions()[i]); 77 } 78 } 79 80 TEST_CASE("PackageVersionDataManifest_CompressionRoundTrip", "[PackageVersionDataManifest]") 81 { 82 PackageVersionDataManifest original; 83 original.AddVersion({ VersionAndChannel{ Version{ "1.0" }, Channel{} }, ".99", "1.01", "path", "hash" }); 84 original.AddVersion({ VersionAndChannel{ Version{ "1.1" }, Channel{} }, "1.99", "2.01", "path2", "hash2" }); 85 original.AddVersion({ VersionAndChannel{ Version{ "1.2" }, Channel{} }, {}, {}, "path2", "hash2" }); 86 original.AddVersion({ VersionAndChannel{ Version{ "2.0" }, Channel{} }, "3.99", "15.01", "path4", "hash4" }); 87 88 std::string serialized = original.Serialize(); 89 auto compressed = PackageVersionDataManifest::CreateCompressor().Compress(serialized); 90 91 auto decompressed = PackageVersionDataManifest::CreateDecompressor().Decompress(compressed); 92 93 PackageVersionDataManifest copy; 94 copy.Deserialize(decompressed); 95 96 REQUIRE(original.Versions().size() == copy.Versions().size()); 97 98 for (size_t i = 0; i < original.Versions().size(); ++i) 99 { 100 INFO(i); 101 RequireVersionDataEqual(copy.Versions()[i], original.Versions()[i]); 102 } 103 }