From 46fb0597d4d6192833ddcf836f4bcf6295ef0aaf Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 16 May 2022 16:07:43 -0500 Subject: Keep track of when parts of verutil/WixVersions are missing. Return null when WixVersion.TryParse returns false. 6776 --- src/api/burn/WixToolset.Mba.Core/VerUtil.cs | 4 ++ src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs | 24 +++++++ .../test/WixToolsetTest.Mba.Core/VerUtilFixture.cs | 8 +++ src/api/wix/WixToolset.Data/WixVersion.cs | 33 +++++++-- .../wix/test/WixToolsetTest.Data/WixVerFixture.cs | 80 ++++++++++++++++++---- 5 files changed, 132 insertions(+), 17 deletions(-) (limited to 'src/api') diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs index 611f9710..14552310 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs @@ -68,6 +68,10 @@ namespace WixToolset.Mba.Core public IntPtr rgReleaseLabels; public IntPtr cchMetadataOffset; public bool fInvalid; + public bool fHasMajor; + public bool fHasMinor; + public bool fHasPatch; + public bool fHasRevision; } internal static string VersionStringFromOffset(IntPtr wzVersion, IntPtr cchOffset, int? cchLength = null) diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs index 731dedaf..e0312474 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs @@ -25,6 +25,10 @@ namespace WixToolset.Mba.Core this.ReleaseLabels = new VerUtilVersionReleaseLabel[version.cReleaseLabels]; this.Metadata = VerUtil.VersionStringFromOffset(version.sczVersion, version.cchMetadataOffset); this.IsInvalid = version.fInvalid; + this.HasMajor = version.fHasMajor; + this.HasMinor = version.fHasMinor; + this.HasPatch = version.fHasPatch; + this.HasRevision = version.fHasRevision; for (var i = 0; i < version.cReleaseLabels; ++i) { @@ -80,6 +84,26 @@ namespace WixToolset.Mba.Core /// public bool IsInvalid { get; private set; } + /// + /// Whether the Major part was specified. + /// + public bool HasMajor { get; private set; } + + /// + /// Whether the Minor part was specified. + /// + public bool HasMinor { get; private set; } + + /// + /// Whether the Patch part was specified. + /// + public bool HasPatch { get; private set; } + + /// + /// Whether the Revision part was specified. + /// + public bool HasRevision { get; private set; } + /// public void Dispose() { diff --git a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs index ceb1b12a..6fb8aced 100644 --- a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs +++ b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs @@ -57,6 +57,10 @@ namespace WixToolsetTest.Mba.Core Assert.Empty(parsedVersion.ReleaseLabels); Assert.Equal("", parsedVersion.Metadata); Assert.False(parsedVersion.IsInvalid); + Assert.True(parsedVersion.HasMajor); + Assert.True(parsedVersion.HasMinor); + Assert.True(parsedVersion.HasPatch); + Assert.True(parsedVersion.HasRevision); } [Fact] @@ -74,6 +78,10 @@ namespace WixToolsetTest.Mba.Core Assert.Equal(5, parsedVersion.ReleaseLabels.Length); Assert.Equal("+abc123", parsedVersion.Metadata); Assert.True(parsedVersion.IsInvalid); + Assert.True(parsedVersion.HasMajor); + Assert.True(parsedVersion.HasMinor); + Assert.True(parsedVersion.HasPatch); + Assert.True(parsedVersion.HasRevision); Assert.Equal("a", parsedVersion.ReleaseLabels[0].Label); Assert.False(parsedVersion.ReleaseLabels[0].IsNumeric); diff --git a/src/api/wix/WixToolset.Data/WixVersion.cs b/src/api/wix/WixToolset.Data/WixVersion.cs index 2b02bd7d..ab68b55a 100644 --- a/src/api/wix/WixToolset.Data/WixVersion.cs +++ b/src/api/wix/WixToolset.Data/WixVersion.cs @@ -22,22 +22,42 @@ namespace WixToolset.Data /// /// Gets or sets the major version. /// - public uint? Major { get; set; } + public uint Major { get; set; } /// /// Gets or sets the minor version. /// - public uint? Minor { get; set; } + public uint Minor { get; set; } /// /// Gets or sets the patch version. /// - public uint? Patch { get; set; } + public uint Patch { get; set; } /// /// Gets or sets the revision version. /// - public uint? Revision { get; set; } + public uint Revision { get; set; } + + /// + /// Gets or sets whether the major version was defined. + /// + public bool HasMajor { get; set; } + + /// + /// Gets or sets the whether the minor version was defined. + /// + public bool HasMinor { get; set; } + + /// + /// Gets or sets the whether the patch version was defined. + /// + public bool HasPatch { get; set; } + + /// + /// Gets or sets the whether the revision version was defined. + /// + public bool HasRevision { get; set; } /// /// Gets or sets the labels in the version. @@ -143,15 +163,19 @@ namespace WixToolset.Data { case 0: version.Major = part; + version.HasMajor = true; break; case 1: version.Minor = part; + version.HasMinor = true; break; case 2: version.Patch = part; + version.HasPatch = true; break; case 3: version.Revision = part; + version.HasRevision = true; break; } @@ -264,6 +288,7 @@ namespace WixToolset.Data if (invalid) { + version = null; return false; } diff --git a/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs b/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs index 45253460..ffa3213a 100644 --- a/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs +++ b/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs @@ -11,13 +11,15 @@ namespace WixToolsetTest.Data [Fact] public void CannotParseEmptyStringAsVersion() { - Assert.False(WixVersion.TryParse(String.Empty, out var _)); + Assert.False(WixVersion.TryParse(String.Empty, out var version)); + Assert.Null(version); } [Fact] public void CannotParseInvalidStringAsVersion() { - Assert.False(WixVersion.TryParse("invalid", out var _)); + Assert.False(WixVersion.TryParse("invalid", out var version)); + Assert.Null(version); } [Fact] @@ -29,6 +31,10 @@ namespace WixToolsetTest.Data Assert.Equal((uint)2, version.Minor); Assert.Equal((uint)3, version.Patch); Assert.Equal((uint)4, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.True(version.HasRevision); Assert.Null(version.Labels); Assert.Null(version.Metadata); } @@ -41,7 +47,11 @@ namespace WixToolsetTest.Data Assert.Equal((uint)1, version.Major); Assert.Equal((uint)2, version.Minor); Assert.Equal((uint)3, version.Patch); - Assert.Null(version.Revision); + Assert.Equal((uint)0, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.False(version.HasRevision); Assert.Null(version.Labels); Assert.Null(version.Metadata); } @@ -55,6 +65,10 @@ namespace WixToolsetTest.Data Assert.Equal((uint)2, version.Minor); Assert.Equal((uint)3, version.Patch); Assert.Equal((uint)0, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.True(version.HasRevision); Assert.Null(version.Labels); Assert.Null(version.Metadata); } @@ -66,8 +80,12 @@ namespace WixToolsetTest.Data Assert.Null(version.Prefix); Assert.Equal((uint)1, version.Major); Assert.Equal((uint)2, version.Minor); - Assert.Null(version.Patch); - Assert.Null(version.Revision); + Assert.Equal((uint)0, version.Patch); + Assert.Equal((uint)0, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.False(version.HasPatch); + Assert.False(version.HasRevision); Assert.Equal("19", version.Labels[0].Label); Assert.Equal((uint)19, version.Labels[0].Numeric); Assert.Null(version.Metadata); @@ -80,8 +98,12 @@ namespace WixToolsetTest.Data Assert.Null(version.Prefix); Assert.Equal((uint)1, version.Major); Assert.Equal((uint)2, version.Minor); - Assert.Null(version.Patch); - Assert.Null(version.Revision); + Assert.Equal((uint)0, version.Patch); + Assert.Equal((uint)0, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.False(version.HasPatch); + Assert.False(version.HasRevision); Assert.Equal("2", version.Labels[0].Label); Assert.Equal((uint)2, version.Labels[0].Numeric); Assert.Equal("0", version.Labels[1].Label); @@ -97,6 +119,11 @@ namespace WixToolsetTest.Data Assert.Equal((uint)0, version.Major); Assert.Equal((uint)0, version.Minor); Assert.Equal((uint)1, version.Patch); + Assert.Equal((uint)0, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.False(version.HasRevision); Assert.Equal("a", version.Labels[0].Label); Assert.Null(version.Labels[0].Numeric); Assert.Null(version.Metadata); @@ -109,8 +136,12 @@ namespace WixToolsetTest.Data Assert.Null(version.Prefix); Assert.Equal((uint)0, version.Major); Assert.Equal((uint)1, version.Minor); - Assert.Null(version.Patch); - Assert.Null(version.Revision); + Assert.Equal((uint)0, version.Patch); + Assert.Equal((uint)0, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.False(version.HasPatch); + Assert.False(version.HasRevision); Assert.Equal("a", version.Labels[0].Label); Assert.Null(version.Labels[0].Numeric); Assert.Equal("000", version.Labels[1].Label); @@ -126,7 +157,11 @@ namespace WixToolsetTest.Data Assert.Equal((uint)1, version.Major); Assert.Equal((uint)2, version.Minor); Assert.Equal((uint)3, version.Patch); - Assert.Null(version.Revision); + Assert.Equal((uint)0, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.False(version.HasRevision); Assert.Null(version.Labels); Assert.Equal("abcd", version.Metadata); } @@ -134,8 +169,10 @@ namespace WixToolsetTest.Data [Fact] public void CannotParseUnexpectedContentAsMetadata() { - Assert.False(WixVersion.TryParse("1.2.3.abcd", out var _)); - Assert.False(WixVersion.TryParse("1.2.3.-abcd", out var _)); + Assert.False(WixVersion.TryParse("1.2.3.abcd", out var version)); + Assert.Null(version); + Assert.False(WixVersion.TryParse("1.2.3.-abcd", out version)); + Assert.Null(version); } [Fact] @@ -147,6 +184,10 @@ namespace WixToolsetTest.Data Assert.Equal((uint)20, version.Minor); Assert.Equal((uint)30, version.Patch); Assert.Equal((uint)40, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.True(version.HasRevision); Assert.Null(version.Labels); Assert.Null(version.Metadata); @@ -156,6 +197,10 @@ namespace WixToolsetTest.Data Assert.Equal((uint)200, version2.Minor); Assert.Equal((uint)300, version2.Patch); Assert.Equal((uint)400, version2.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.True(version.HasRevision); Assert.Null(version2.Labels); Assert.Null(version2.Metadata); } @@ -169,6 +214,10 @@ namespace WixToolsetTest.Data Assert.Equal(4294967295, version.Minor); Assert.Equal(4294967295, version.Patch); Assert.Equal(4294967295, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.True(version.HasRevision); Assert.Null(version.Labels); Assert.Null(version.Metadata); } @@ -176,7 +225,8 @@ namespace WixToolsetTest.Data [Fact] public void CannotParseTooLargeNumbers() { - Assert.False(WixVersion.TryParse("4294967296.4294967296.4294967296.4294967296", out var _)); + Assert.False(WixVersion.TryParse("4294967296.4294967296.4294967296.4294967296", out var version)); + Assert.Null(version); } [Fact] @@ -188,6 +238,10 @@ namespace WixToolsetTest.Data Assert.Equal((uint)2, version.Minor); Assert.Equal((uint)3, version.Patch); Assert.Equal((uint)4, version.Revision); + Assert.True(version.HasMajor); + Assert.True(version.HasMinor); + Assert.True(version.HasPatch); + Assert.True(version.HasRevision); Assert.Equal("a", version.Labels[0].Label); Assert.Null(version.Labels[0].Numeric); Assert.Equal("b", version.Labels[1].Label); -- cgit v1.2.3-55-g6feb