From 5c509f5611a45bdf9d252b88605537bd28f24a35 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sun, 2 Oct 2022 19:37:55 -0700 Subject: Move WixVersion to new WixToolset.Versioning package in libs segment WixVersion is already used by the Core toolset but could also be useful for bootstrapper applications parsing bundle versions. The WixToolset.Data assembly contains a significant amount of data that bloats its size that bootstrapper applications would never need. Extracting WixVersion to its own assembly makes it much more useable. Fixes 6943 --- .../VerUtilTestsFixture.cs | 683 +++++++++++++++++++++ 1 file changed, 683 insertions(+) create mode 100644 src/libs/test/WixToolsetTest.Versioning/VerUtilTestsFixture.cs (limited to 'src/libs/test/WixToolsetTest.Versioning/VerUtilTestsFixture.cs') diff --git a/src/libs/test/WixToolsetTest.Versioning/VerUtilTestsFixture.cs b/src/libs/test/WixToolsetTest.Versioning/VerUtilTestsFixture.cs new file mode 100644 index 00000000..3dff28c6 --- /dev/null +++ b/src/libs/test/WixToolsetTest.Versioning/VerUtilTestsFixture.cs @@ -0,0 +1,683 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.Versioning +{ + using System; + using WixToolset.Versioning; + using Xunit; + + public class VerUtilTestsFixture + { + [Fact] + public void VerCompareVersionsTreatsMissingRevisionAsZero() + { + var version1 = WixVersion.Parse("1.2.3.4"); + var version2 = WixVersion.Parse("1.2.3"); + var version3 = WixVersion.Parse("1.2.3.0"); + + Assert.Null(version1.Prefix); + Assert.Equal(1U, version1.Major); + Assert.Equal(2U, version1.Minor); + Assert.Equal(3U, version1.Patch); + Assert.Equal(4U, version1.Revision); + Assert.Null(version1.Labels); + Assert.Null(version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.True(version1.HasPatch); + Assert.True(version1.HasRevision); + + Assert.Null(version2.Prefix); + Assert.Equal(1U, version2.Major); + Assert.Equal(2U, version2.Minor); + Assert.Equal(3U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Null(version2.Labels); + Assert.Null(version2.Metadata); + Assert.False(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.True(version2.HasMinor); + Assert.True(version2.HasPatch); + Assert.False(version2.HasRevision); + + Assert.Null(version3.Prefix); + Assert.Equal(1U, version3.Major); + Assert.Equal(2U, version3.Minor); + Assert.Equal(3U, version3.Patch); + Assert.Equal(0U, version3.Revision); + Assert.Null(version3.Labels); + Assert.Null(version3.Metadata); + Assert.False(version3.Invalid); + Assert.True(version3.HasMajor); + Assert.True(version3.HasMinor); + Assert.True(version3.HasPatch); + Assert.True(version3.HasRevision); + + Assert.Equal(1, version1.CompareTo(version2)); + Assert.Equal(0, version3.CompareTo(version2)); + } + + [Fact] + public void VerCompareVersionsTreatsNumericReleaseLabelsAsNumbers() + { + var version1 = WixVersion.Parse("1.0-2.0"); + var version2 = WixVersion.Parse("1.0-19"); + + Assert.Null(version1.Prefix); + Assert.Equal(1U, version1.Major); + Assert.Equal(0U, version1.Minor); + Assert.Equal(0U, version1.Patch); + Assert.Equal(0U, version1.Revision); + Assert.Equal(2, version1.Labels.Length); + + Assert.Equal(2U, version1.Labels[0].Numeric); + Assert.Equal("2", version1.Labels[0].Label); + + Assert.Equal(0U, version1.Labels[1].Numeric); + Assert.Equal("0", version1.Labels[1].Label); + + Assert.Null(version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.False(version1.HasPatch); + Assert.False(version1.HasRevision); + + + Assert.Null(version2.Prefix); + Assert.Equal(1U, version2.Major); + Assert.Equal(0U, version2.Minor); + Assert.Equal(0U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Single(version2.Labels); + + Assert.Equal(19U, version2.Labels[0].Numeric); + Assert.Equal("19", version2.Labels[0].Label); + + Assert.Null(version2.Metadata); + Assert.False(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.True(version2.HasMinor); + Assert.False(version2.HasPatch); + Assert.False(version2.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, -1); + } + + [Fact] + public void VerCompareVersionsHandlesNormallyInvalidVersions() + { + var version1 = WixVersion.Parse("10.-4.0"); + var version2 = WixVersion.Parse("10.-2.0"); + var version3 = WixVersion.Parse("0"); + var version4 = WixVersion.Parse(""); + var version5 = WixVersion.Parse("10-2"); + var version6 = WixVersion.Parse("10-4.@"); + + + Assert.Null(version1.Prefix); + Assert.Equal(10U, version1.Major); + Assert.Equal(0U, version1.Minor); + Assert.Equal(0U, version1.Patch); + Assert.Equal(0U, version1.Revision); + Assert.Null(version1.Labels); + Assert.Equal("-4.0", version1.Metadata); + Assert.True(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.False(version1.HasMinor); + Assert.False(version1.HasPatch); + Assert.False(version1.HasRevision); + + + Assert.Null(version2.Prefix); + Assert.Equal(10U, version2.Major); + Assert.Equal(0U, version2.Minor); + Assert.Equal(0U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Null(version2.Labels); + Assert.Equal("-2.0", version2.Metadata); + Assert.True(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.False(version2.HasMinor); + Assert.False(version2.HasPatch); + Assert.False(version2.HasRevision); + + + Assert.Null(version3.Prefix); + Assert.Equal(0U, version3.Major); + Assert.Equal(0U, version3.Minor); + Assert.Equal(0U, version3.Patch); + Assert.Equal(0U, version3.Revision); + Assert.Null(version3.Labels); + Assert.Null(version3.Metadata); + Assert.False(version3.Invalid); + Assert.True(version3.HasMajor); + Assert.False(version3.HasMinor); + Assert.False(version3.HasPatch); + Assert.False(version3.HasRevision); + + Assert.Null(version4.Prefix); + Assert.Equal(0U, version4.Major); + Assert.Equal(0U, version4.Minor); + Assert.Equal(0U, version4.Patch); + Assert.Equal(0U, version4.Revision); + Assert.Null(version4.Labels); + Assert.Equal(String.Empty, version4.Metadata); + Assert.True(version4.Invalid); + Assert.False(version4.HasMajor); + Assert.False(version4.HasMinor); + Assert.False(version4.HasPatch); + Assert.False(version4.HasRevision); + + Assert.Null(version5.Prefix); + Assert.Equal(10U, version5.Major); + Assert.Equal(0U, version5.Minor); + Assert.Equal(0U, version5.Patch); + Assert.Equal(0U, version5.Revision); + Assert.Single(version5.Labels); + Assert.Equal(2U, version5.Labels[0].Numeric); + Assert.Equal("2", version5.Labels[0].Label); + + Assert.Null(version5.Metadata); + Assert.False(version5.Invalid); + Assert.True(version5.HasMajor); + Assert.False(version5.HasMinor); + Assert.False(version5.HasPatch); + Assert.False(version5.HasRevision); + + Assert.Null(version6.Prefix); + Assert.Equal(10U, version6.Major); + Assert.Equal(0U, version6.Minor); + Assert.Equal(0U, version6.Patch); + Assert.Equal(0U, version6.Revision); + Assert.Single(version6.Labels); + Assert.Equal(4U, version6.Labels[0].Numeric); + Assert.Equal("4", version6.Labels[0].Label); + + Assert.Equal("@", version6.Metadata); + Assert.True(version6.Invalid); + Assert.True(version6.HasMajor); + Assert.False(version6.HasMinor); + Assert.False(version6.HasPatch); + Assert.False(version6.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, 1); + TestVerutilCompareParsedVersions(version3, version4, 1); + TestVerutilCompareParsedVersions(version5, version6, -1); + } + + [Fact] + public void VerCompareVersionsTreatsHyphenAsVersionSeparator() + { + var version1 = WixVersion.Parse("0.0.1-a"); + var version2 = WixVersion.Parse("0-2"); + var version3 = WixVersion.Parse("1-2"); + + + Assert.Null(version1.Prefix); + Assert.Equal(0U, version1.Major); + Assert.Equal(0U, version1.Minor); + Assert.Equal(1U, version1.Patch); + Assert.Equal(0U, version1.Revision); + Assert.Single(version1.Labels); + Assert.Null(version1.Labels[0].Numeric); + Assert.Equal("a", version1.Labels[0].Label); + + Assert.Null(version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.True(version1.HasPatch); + Assert.False(version1.HasRevision); + + Assert.Null(version2.Prefix); + Assert.Equal(0U, version2.Major); + Assert.Equal(0U, version2.Minor); + Assert.Equal(0U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Single(version2.Labels); + Assert.Equal(2U, version2.Labels[0].Numeric); + Assert.Equal("2", version2.Labels[0].Label); + + Assert.Null(version2.Metadata); + Assert.False(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.False(version2.HasMinor); + Assert.False(version2.HasPatch); + Assert.False(version2.HasRevision); + + Assert.Null(version3.Prefix); + Assert.Equal(1U, version3.Major); + Assert.Equal(0U, version3.Minor); + Assert.Equal(0U, version3.Patch); + Assert.Equal(0U, version3.Revision); + Assert.Single(version3.Labels); + Assert.Equal(2U, version3.Labels[0].Numeric); + Assert.Equal("2", version3.Labels[0].Label); + + Assert.Null(version3.Metadata); + Assert.False(version3.Invalid); + Assert.True(version3.HasMajor); + Assert.False(version3.HasMinor); + Assert.False(version3.HasPatch); + Assert.False(version3.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, 1); + TestVerutilCompareParsedVersions(version1, version3, -1); + } + + [Fact] + public void VerCompareVersionsIgnoresLeadingZeroes() + { + var version1 = WixVersion.Parse("0.01-a.1"); + var version2 = WixVersion.Parse("0.1.0-a.1"); + var version3 = WixVersion.Parse("0.1-a.b.0"); + var version4 = WixVersion.Parse("0.1.0-a.b.000"); + + Assert.Null(version1.Prefix); + Assert.Equal(0U, version1.Major); + Assert.Equal(1U, version1.Minor); + Assert.Equal(0U, version1.Patch); + Assert.Equal(0U, version1.Revision); + Assert.Equal(2, version1.Labels.Length); + Assert.Null(version1.Labels[0].Numeric); + Assert.Equal("a", version1.Labels[0].Label); + Assert.Equal(1U, version1.Labels[1].Numeric); + Assert.Equal("1", version1.Labels[1].Label); + + Assert.Null(version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.False(version1.HasPatch); + Assert.False(version1.HasRevision); + + Assert.Null(version2.Prefix); + Assert.Equal(0U, version2.Major); + Assert.Equal(1U, version2.Minor); + Assert.Equal(0U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Equal(2, version2.Labels.Length); + + Assert.Null(version2.Labels[0].Numeric); + Assert.Equal("a", version2.Labels[0].Label); + Assert.Equal(1U, version2.Labels[1].Numeric); + Assert.Equal("1", version2.Labels[1].Label); + + Assert.Null(version2.Metadata); + Assert.False(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.True(version2.HasMinor); + Assert.True(version2.HasPatch); + Assert.False(version2.HasRevision); + + Assert.Null(version3.Prefix); + Assert.Equal(0U, version3.Major); + Assert.Equal(1U, version3.Minor); + Assert.Equal(0U, version3.Patch); + Assert.Equal(0U, version3.Revision); + Assert.Equal(3, version3.Labels.Length); + Assert.Null(version3.Labels[0].Numeric); + Assert.Equal("a", version3.Labels[0].Label); + Assert.Null(version3.Labels[1].Numeric); + Assert.Equal("b", version3.Labels[1].Label); + Assert.Equal(0U, version3.Labels[2].Numeric); + Assert.Equal("0", version3.Labels[2].Label); + + Assert.Null(version3.Metadata); + Assert.False(version3.Invalid); + Assert.True(version3.HasMajor); + Assert.True(version3.HasMinor); + Assert.False(version3.HasPatch); + Assert.False(version3.HasRevision); + + Assert.Null(version4.Prefix); + Assert.Equal(0U, version4.Major); + Assert.Equal(1U, version4.Minor); + Assert.Equal(0U, version4.Patch); + Assert.Equal(0U, version4.Revision); + Assert.Equal(3, version4.Labels.Length); + Assert.Null(version4.Labels[0].Numeric); + Assert.Equal("a", version4.Labels[0].Label); + Assert.Null(version4.Labels[1].Numeric); + Assert.Equal("b", version4.Labels[1].Label); + Assert.Equal(0U, version4.Labels[2].Numeric); + Assert.Equal("000", version4.Labels[2].Label); + + Assert.Null(version4.Metadata); + Assert.False(version4.Invalid); + Assert.True(version4.HasMajor); + Assert.True(version4.HasMinor); + Assert.True(version4.HasPatch); + Assert.False(version4.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, 0); + TestVerutilCompareParsedVersions(version3, version4, 0); + } + + [Fact] + public void VerCompareVersionsTreatsUnexpectedContentAsMetadata() + { + var version1 = WixVersion.Parse("1.2.3+abcd"); + var version2 = WixVersion.Parse("1.2.3.abcd"); + var version3 = WixVersion.Parse("1.2.3.-abcd"); + + Assert.Null(version1.Prefix); + Assert.Equal(1U, version1.Major); + Assert.Equal(2U, version1.Minor); + Assert.Equal(3U, version1.Patch); + Assert.Equal(0U, version1.Revision); + Assert.Null(version1.Labels); + Assert.Equal("abcd", version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.True(version1.HasPatch); + Assert.False(version1.HasRevision); + + Assert.Null(version2.Prefix); + Assert.Equal(1U, version2.Major); + Assert.Equal(2U, version2.Minor); + Assert.Equal(3U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Null(version2.Labels); + Assert.Equal("abcd", version2.Metadata); + Assert.True(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.True(version2.HasMinor); + Assert.True(version2.HasPatch); + Assert.False(version2.HasRevision); + + + Assert.Null(version3.Prefix); + Assert.Equal(1U, version3.Major); + Assert.Equal(2U, version3.Minor); + Assert.Equal(3U, version3.Patch); + Assert.Equal(0U, version3.Revision); + Assert.Null(version3.Labels); + Assert.Equal("-abcd", version3.Metadata); + Assert.True(version3.Invalid); + Assert.True(version3.HasMajor); + Assert.True(version3.HasMinor); + Assert.True(version3.HasPatch); + Assert.False(version3.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, 1); + TestVerutilCompareParsedVersions(version1, version3, 1); + TestVerutilCompareParsedVersions(version2, version3, 1); + } + + [Fact] + public void VerCompareVersionsIgnoresLeadingV() + { + var version1 = WixVersion.Parse("10.20.30.40"); + var version2 = WixVersion.Parse("v10.20.30.40"); + var version3 = WixVersion.Parse("V10.20.30.40"); + var version4 = WixVersion.Parse("v10.20.30.40-abc"); + var version5 = WixVersion.Parse("vvv"); + + Assert.Null(version1.Prefix); + Assert.Equal(10U, version1.Major); + Assert.Equal(20U, version1.Minor); + Assert.Equal(30U, version1.Patch); + Assert.Equal(40U, version1.Revision); + Assert.Null(version1.Labels); + Assert.Null(version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.True(version1.HasPatch); + Assert.True(version1.HasRevision); + + Assert.Equal('v', version2.Prefix); + Assert.Equal(10U, version2.Major); + Assert.Equal(20U, version2.Minor); + Assert.Equal(30U, version2.Patch); + Assert.Equal(40U, version2.Revision); + Assert.Null(version2.Labels); + Assert.Null(version2.Metadata); + Assert.False(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.True(version2.HasMinor); + Assert.True(version2.HasPatch); + Assert.True(version2.HasRevision); + + Assert.Equal('V', version3.Prefix); + Assert.Equal(10U, version3.Major); + Assert.Equal(20U, version3.Minor); + Assert.Equal(30U, version3.Patch); + Assert.Equal(40U, version3.Revision); + Assert.Null(version3.Labels); + Assert.Null(version3.Metadata); + Assert.False(version3.Invalid); + Assert.True(version3.HasMajor); + Assert.True(version3.HasMinor); + Assert.True(version3.HasPatch); + Assert.True(version3.HasRevision); + + Assert.Equal('v', version4.Prefix); + Assert.Equal(10U, version4.Major); + Assert.Equal(20U, version4.Minor); + Assert.Equal(30U, version4.Patch); + Assert.Equal(40U, version4.Revision); + Assert.Single(version4.Labels); + Assert.Null(version4.Labels[0].Numeric); + Assert.Equal("abc", version4.Labels[0].Label); + + Assert.Null(version4.Metadata); + Assert.False(version4.Invalid); + Assert.True(version4.HasMajor); + Assert.True(version4.HasMinor); + Assert.True(version4.HasPatch); + Assert.True(version4.HasRevision); + + Assert.Null(version5.Prefix); + Assert.Equal(0U, version5.Major); + Assert.Equal(0U, version5.Minor); + Assert.Equal(0U, version5.Patch); + Assert.Equal(0U, version5.Revision); + Assert.Null(version5.Labels); + Assert.Equal("vvv", version5.Metadata); + Assert.True(version5.Invalid); + Assert.False(version5.HasMajor); + Assert.False(version5.HasMinor); + Assert.False(version5.HasPatch); + Assert.False(version5.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, 0); + TestVerutilCompareParsedVersions(version1, version3, 0); + TestVerutilCompareParsedVersions(version1, version4, 1); + } + + [Fact] + public void VerCompareVersionsHandlesTooLargeNumbers() + { + var version1 = WixVersion.Parse("4294967295.4294967295.4294967295.4294967295"); + var version2 = WixVersion.Parse("4294967296.4294967296.4294967296.4294967296"); + + Assert.Null(version1.Prefix); + Assert.Equal(4294967295, version1.Major); + Assert.Equal(4294967295, version1.Minor); + Assert.Equal(4294967295, version1.Patch); + Assert.Equal(4294967295, version1.Revision); + Assert.Null(version1.Labels); + Assert.Null(version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.True(version1.HasPatch); + Assert.True(version1.HasRevision); + + Assert.Null(version2.Prefix); + Assert.Equal(0U, version2.Major); + Assert.Equal(0U, version2.Minor); + Assert.Equal(0U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Null(version2.Labels); + Assert.Equal("4294967296.4294967296.4294967296.4294967296", version2.Metadata); + Assert.True(version2.Invalid); + Assert.False(version2.HasMajor); + Assert.False(version2.HasMinor); + Assert.False(version2.HasPatch); + Assert.False(version2.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, 1); + } + + [Fact] + public void VerCompareVersionsIgnoresMetadataForValidVersions() + { + var version1 = WixVersion.Parse("1.2.3+abc"); + var version2 = WixVersion.Parse("1.2.3+xyz"); + + Assert.Null(version1.Prefix); + Assert.Equal(1U, version1.Major); + Assert.Equal(2U, version1.Minor); + Assert.Equal(3U, version1.Patch); + Assert.Equal(0U, version1.Revision); + Assert.Null(version1.Labels); + Assert.Equal("abc", version1.Metadata); + Assert.False(version1.Invalid); + Assert.True(version1.HasMajor); + Assert.True(version1.HasMinor); + Assert.True(version1.HasPatch); + Assert.False(version1.HasRevision); + + + Assert.Null(version2.Prefix); + Assert.Equal(1U, version2.Major); + Assert.Equal(2U, version2.Minor); + Assert.Equal(3U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Null(version2.Labels); + Assert.Equal("xyz", version2.Metadata); + Assert.False(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.True(version2.HasMinor); + Assert.True(version2.HasPatch); + Assert.False(version2.HasRevision); + + TestVerutilCompareParsedVersions(version1, version2, 0); + } + + [Fact] + public void VerParseVersionTreatsTrailingDotsAsInvalid() + { + var version1 = WixVersion.Parse("."); + var version2 = WixVersion.Parse("1."); + var version3 = WixVersion.Parse("2.1."); + var version4 = WixVersion.Parse("3.2.1."); + var version5 = WixVersion.Parse("4.3.2.1."); + var version6 = WixVersion.Parse("5-."); + var version7 = WixVersion.Parse("6-a."); + + Assert.Null(version1.Prefix); + Assert.Equal(0U, version1.Major); + Assert.Equal(0U, version1.Minor); + Assert.Equal(0U, version1.Patch); + Assert.Equal(0U, version1.Revision); + Assert.Null(version1.Labels); + Assert.Equal(".", version1.Metadata); + Assert.True(version1.Invalid); + Assert.False(version1.HasMajor); + Assert.False(version1.HasMinor); + Assert.False(version1.HasPatch); + Assert.False(version1.HasRevision); + + + Assert.Null(version2.Prefix); + Assert.Equal(1U, version2.Major); + Assert.Equal(0U, version2.Minor); + Assert.Equal(0U, version2.Patch); + Assert.Equal(0U, version2.Revision); + Assert.Null(version2.Labels); + Assert.Empty(version2.Metadata); + Assert.True(version2.Invalid); + Assert.True(version2.HasMajor); + Assert.False(version2.HasMinor); + Assert.False(version2.HasPatch); + Assert.False(version2.HasRevision); + + + Assert.Null(version3.Prefix); + Assert.Equal(2U, version3.Major); + Assert.Equal(1U, version3.Minor); + Assert.Equal(0U, version3.Patch); + Assert.Equal(0U, version3.Revision); + Assert.Null(version3.Labels); + Assert.Empty(version3.Metadata); + Assert.True(version3.Invalid); + Assert.True(version3.HasMajor); + Assert.True(version3.HasMinor); + Assert.False(version3.HasPatch); + Assert.False(version3.HasRevision); + + Assert.Null(version4.Prefix); + Assert.Equal(3U, version4.Major); + Assert.Equal(2U, version4.Minor); + Assert.Equal(1U, version4.Patch); + Assert.Equal(0U, version4.Revision); + Assert.Null(version4.Labels); + Assert.Empty(version4.Metadata); + Assert.True(version4.Invalid); + Assert.True(version4.HasMajor); + Assert.True(version4.HasMinor); + Assert.True(version4.HasPatch); + Assert.False(version4.HasRevision); + + Assert.Null(version5.Prefix); + Assert.Equal(4U, version5.Major); + Assert.Equal(3U, version5.Minor); + Assert.Equal(2U, version5.Patch); + Assert.Equal(1U, version5.Revision); + Assert.Null(version5.Labels); + Assert.Empty(version5.Metadata); + Assert.True(version5.Invalid); + Assert.True(version5.HasMajor); + Assert.True(version5.HasMinor); + Assert.True(version5.HasPatch); + Assert.True(version5.HasRevision); + + Assert.Null(version6.Prefix); + Assert.Equal(5U, version6.Major); + Assert.Equal(0U, version6.Minor); + Assert.Equal(0U, version6.Patch); + Assert.Equal(0U, version6.Revision); + Assert.Null(version6.Labels); + Assert.Equal(".", version6.Metadata); + Assert.True(version6.Invalid); + Assert.True(version6.HasMajor); + Assert.False(version6.HasMinor); + Assert.False(version6.HasPatch); + Assert.False(version6.HasRevision); + + Assert.Null(version7.Prefix); + Assert.Equal(6U, version7.Major); + Assert.Equal(0U, version7.Minor); + Assert.Equal(0U, version7.Patch); + Assert.Equal(0U, version7.Revision); + Assert.Single(version7.Labels); + Assert.Null(version7.Labels[0].Numeric); + Assert.Equal("a", version7.Labels[0].Label); + Assert.Empty(version7.Metadata); + Assert.True(version7.Invalid); + Assert.True(version7.HasMajor); + Assert.False(version7.HasMinor); + Assert.False(version7.HasPatch); + Assert.False(version7.HasRevision); + } + + private static void TestVerutilCompareParsedVersions(WixVersion version1, WixVersion version2, int expectedResult) + { + var result = version1.CompareTo(version2); + Assert.Equal(expectedResult, result); + + result = version2.CompareTo(version1); + Assert.Equal(expectedResult, -result); + + var equal = version1.Equals(version2); + Assert.Equal(expectedResult == 0, equal); + } + } +} -- cgit v1.2.3-55-g6feb