winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }