ManifestEqualityUnitTests.cs (7305B)
1 // ----------------------------------------------------------------------------- 2 // <copyright file="ManifestEqualityUnitTests.cs" company="Microsoft Corporation"> 3 // Copyright (c) Microsoft Corporation. Licensed under the MIT License. 4 // </copyright> 5 // ----------------------------------------------------------------------------- 6 7 namespace WinGetUtilInterop.UnitTests.ManifestUnitTest 8 { 9 using System.IO; 10 using System.Reflection; 11 using Microsoft.WinGetUtil.Models.Preview; 12 using Microsoft.WinGetUtil.UnitTests.Common.Logging; 13 using Xunit; 14 using Xunit.Abstractions; 15 16 /// <summary> 17 /// Manifest equality tests. 18 /// </summary> 19 public class ManifestEqualityUnitTests 20 { 21 private ITestOutputHelper log; 22 23 /// <summary> 24 /// Initializes a new instance of the <see cref="ManifestEqualityUnitTests"/> class. 25 /// </summary> 26 /// <param name="log">Output Helper.</param> 27 public ManifestEqualityUnitTests(ITestOutputHelper log) 28 { 29 this.log = log; 30 } 31 32 /// <summary> 33 /// All manifest are equal but some manifest are more equal than others. 34 /// </summary> 35 [Fact] 36 [DisplayTestMethodName] 37 public void ManifestEquals() 38 { 39 // All equality properties. 40 Manifest allEquality = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.AllEquality)); 41 Manifest otherAllEquality = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.AllEquality)); 42 AssertEquivalence(allEquality, allEquality); 43 AssertEquivalence(allEquality, otherAllEquality); 44 45 // With all equality properties and non equality properties. 46 Manifest allEqualityWithDescription = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.AllEqualityWithDescription)); 47 AssertEquivalence(allEquality, allEqualityWithDescription); 48 49 // With some equality properties. 50 Manifest someEquality = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEquality)); 51 Manifest otherSomeEquality = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEquality)); 52 AssertEquivalence(someEquality, otherSomeEquality); 53 54 // With some equality properties and some non equality properties 55 Manifest someEqualityWithLocalization = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEqualityWithLocalization)); 56 AssertEquivalence(someEquality, someEqualityWithLocalization); 57 58 // Equality where a Switch object is not serialized 59 Manifest someEqualityWithoutSwitch = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEqualityWithoutSwitches)); 60 Manifest otherSomeEqualityWithoutSwitch = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEqualityWithoutSwitches)); 61 AssertEquivalence(someEqualityWithoutSwitch, otherSomeEqualityWithoutSwitch); 62 63 // Equality where Installers list is not serialized 64 Manifest someEqualityWithoutInstaller = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEqualityWithoutInstallers)); 65 Manifest otherSomeEqualityWithoutInstaller = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEqualityWithoutInstallers)); 66 AssertEquivalence(someEqualityWithoutInstaller, otherSomeEqualityWithoutInstaller); 67 } 68 69 /// <summary> 70 /// Every manifest is unique in its own way. 71 /// </summary> 72 [Fact] 73 [DisplayTestMethodName] 74 public void ManifestNotEquals() 75 { 76 // All equality properties. 77 Manifest allEquality = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.AllEquality)); 78 Assert.False(allEquality == null); 79 80 Manifest allEqualityOther = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.DifferentId)); 81 AssertNotEquivalent(allEquality, allEqualityOther); 82 83 Manifest someEquality = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEquality)); 84 Manifest withoutSwitches = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEqualityWithoutSwitches)); 85 AssertNotEquivalent(someEquality, withoutSwitches); 86 87 Manifest withoutInstaller = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.SomeEqualityWithoutSwitches)); 88 AssertNotEquivalent(someEquality, withoutInstaller); 89 90 Manifest oneInstaller = Manifest.CreateManifestFromString(ReadFile(ManifestStrings.OneInstaller)); 91 AssertNotEquivalent(allEquality, oneInstaller); 92 } 93 94 private static string ReadFile(string fileName) 95 { 96 string location = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 97 return File.ReadAllText(Path.Combine(location, "TestCollateral", fileName)); 98 } 99 100 private static void AssertEquivalence(Manifest first, Manifest second) 101 { 102 Assert.True(first.IsManifestEquivalent(second)); 103 } 104 105 private static void AssertNotEquivalent(Manifest first, Manifest second) 106 { 107 Assert.False(first.IsManifestEquivalent(second)); 108 } 109 110 /// <summary> 111 /// Helper class with manifest strings. 112 /// </summary> 113 internal class ManifestStrings 114 { 115 /// <summary> 116 /// Manifest with all properties that provide equality. 117 /// </summary> 118 public const string AllEquality = "AllEquality.yaml"; 119 120 /// <summary> 121 /// Manifest with all properties that provide equality. 122 /// </summary> 123 public const string AllEqualityWithDescription = "AllEqualityWithDescription.yaml"; 124 125 /// <summary> 126 /// Manifest with some properties that provide equality. 127 /// </summary> 128 public const string SomeEquality = "SomeEquality.yaml"; 129 130 /// <summary> 131 /// Manifest with some properties that provide equality. 132 /// </summary> 133 public const string SomeEqualityWithLocalization = "SomeEqualityWithLocalization.yaml"; 134 135 /// <summary> 136 /// Manifest with some properties specifically without switches. 137 /// </summary> 138 public const string SomeEqualityWithoutSwitches = "SomeEqualityWithoutSwitches.yaml"; 139 140 /// <summary> 141 /// Manifest with some properties specifically without installers. 142 /// </summary> 143 public const string SomeEqualityWithoutInstallers = "SomeEqualityWithoutInstallers.yaml"; 144 145 /// <summary> 146 /// Manifest with all properties that provide equality. 147 /// </summary> 148 public const string DifferentId = "DifferentId.yaml"; 149 150 /// <summary> 151 /// Manifest with all properties that provide equality. 152 /// </summary> 153 public const string OneInstaller = "OneInstaller.yaml"; 154 } 155 } 156 }