Skip to content

Commit 49637cf

Browse files
authored
Updated dependencies. (#29)
* This generally impacts only the testing as the test adapter and framework are bumped. * Resolved MSTEST* analyzer warnings by adjusting code to use new APIs * Added parallelization optimizations for the test runs. - on a 24 Core machine this amounted to ~70% improvement in completion time - Though the total time was under 1s, it is now under 100ms * Adjusted repo wide targets to ensure `NuGet` forlder exists - This ensures that it exists for any restore so that it is considered as a valid source of packages. - This is useful for debugging/testing of CI variants of dependent packages * Made comparison CaseSensitive static class public so it is usable by callers that need explicit handling of potentially mixed sources. - This can lead to unexpected results even if consistent. The use of case in SemVer is sadly ambiguos and different major public repos (NuGet and npm as examples) have chosen different behaviors so users need to be clear on the behavior. Use of explicit overrides allows such a thing in the case of mixed case expectation. - Renamed `ResourcesExtensions.AsFormat()` -> `ResourcesExtensions.ParseAsFormat()` for greater clarity of intent/behavior. * Added use of `StringSyntaxAttribute` to resource extensions. * Added check for formatter support of ordering to ensure it reports an error message that hopefully makes sense. * General re-formatting and docs clarifications
1 parent 2a85a42 commit 49637cf

File tree

12 files changed

+105
-80
lines changed

12 files changed

+105
-80
lines changed

Directory.Build.targets

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<Project InitialTargets="VerifyProjectSettings;ShowBuildParameters">
2-
<Target Name="EnsureBuildOutputPaths" Condition="!EXISTS($(PackageOutputPath))" BeforeTargets="Build;Restore">
3-
<MakeDir Directories="$(PackageOutputPath)"/>
1+
<Project InitialTargets="VerifyProjectSettings;ShowBuildParameters;EnsureBuildOutputPaths">
2+
<Target Name="EnsureBuildOutputPaths">
3+
<MakeDir Condition="!EXISTS($(PackageOutputPath))" Directories="$(PackageOutputPath)"/>
44
</Target>
55

66
<Target Name="ShowBuildParameters">

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
<ItemGroup>
1919
<PackageVersion Include="Sprache" Version="2.3.1" />
2020
<!-- Tests all use the same framework versions -->
21-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
22-
<PackageVersion Include="MSTest.TestAdapter" Version="3.9.1" />
23-
<PackageVersion Include="MSTest.TestFramework" Version="3.9.1" />
21+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
22+
<PackageVersion Include="MSTest.TestAdapter" Version="4.0.1" />
23+
<PackageVersion Include="MSTest.TestFramework" Version="4.0.1" />
2424
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
2525
</ItemGroup>
2626
</Project>

src/Ubiquity.NET.Versioning.UT/AssemblyInfo.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using System.Diagnostics.CodeAnalysis;
99
using System.Runtime.InteropServices;
1010

11+
using Microsoft.VisualStudio.TestTools.UnitTesting;
12+
1113
// In SDK-style projects such as this one, several assembly attributes that were historically
1214
// defined in this file are now automatically added during build and populated with
1315
// values defined in project properties. For details of which attributes are included
@@ -24,3 +26,11 @@
2426
[assembly: CLSCompliant( false )]
2527

2628
[assembly: ExcludeFromCodeCoverage]
29+
30+
// Resolve MSTEST001 - explicitly declare parallelization
31+
// There are enough tests at the method level to warrant some
32+
// level of parallelization. However, the class level is the
33+
// optimal granularity for these tests. The method level ends
34+
// up with more overhead per thread since the test methods are
35+
// so small, diminishing the value of parallelization.
36+
[assembly: Parallelize( Scope = ExecutionScope.ClassLevel )]

src/Ubiquity.NET.Versioning.UT/CSemVerCITests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ public void CompareToTestsNoPrelNoMeta( )
205205
var ver_name_1_same = new CSemVerCI( new CSemVer( 20, 1, 4 ), "BuildIndex01", "BuildName01" );
206206
var ver_name_2 = new CSemVerCI( new CSemVer( 20, 1, 4 ), "BuildIndex01", "BuildName02" );
207207

208-
Assert.IsTrue(ver_name_1.CompareTo(ver_name_2) < 0);
209-
Assert.IsTrue(ver_name_2.CompareTo(ver_name_1) > 0);
208+
Assert.IsLessThan( 0, ver_name_1.CompareTo( ver_name_2 ) );
209+
Assert.IsGreaterThan( 0, ver_name_2.CompareTo( ver_name_1 ) );
210210

211211
Assert.AreEqual(0, ver_name_1.CompareTo( ver_name_1_same ));
212212
Assert.AreEqual(0, ver_name_1_same.CompareTo( ver_name_1 ));
@@ -221,8 +221,8 @@ public void CompareToTestsNoPrelWithMeta( )
221221
var ver_name_1_same = new CSemVerCI( new CSemVer( 20, 1, 4, null, [ "buildMeta" ] ), "BuildIndex01", "BuildName01" );
222222
var ver_name_2 = new CSemVerCI( new CSemVer( 20, 1, 4, null, [ "buildMeta" ] ), "BuildIndex01", "BuildName02" );
223223

224-
Assert.IsTrue(ver_name_1.CompareTo(ver_name_2) < 0);
225-
Assert.IsTrue(ver_name_2.CompareTo(ver_name_1) > 0);
224+
Assert.IsLessThan( 0, ver_name_1.CompareTo( ver_name_2 ) );
225+
Assert.IsGreaterThan( 0, ver_name_2.CompareTo( ver_name_1 ) );
226226

227227
Assert.AreEqual(0, ver_name_1.CompareTo( ver_name_1_same ));
228228
Assert.AreEqual(0, ver_name_1_same.CompareTo( ver_name_1 ));
@@ -238,8 +238,8 @@ public void CompareToTestsWithPrelNoMeta( )
238238
var ver_name_1_same = new CSemVerCI( new CSemVer( 1, 2, 3, alpha_0_1 ), "BuildIndex01", "BuildName01" );
239239
var ver_name_2 = new CSemVerCI( new CSemVer( 1, 2, 3, alpha_0_1 ), "BuildIndex01", "BuildName02" );
240240

241-
Assert.IsTrue(ver_name_1.CompareTo(ver_name_2) < 0);
242-
Assert.IsTrue(ver_name_2.CompareTo(ver_name_1) > 0);
241+
Assert.IsLessThan( 0, ver_name_1.CompareTo( ver_name_2 ) );
242+
Assert.IsGreaterThan( 0, ver_name_2.CompareTo( ver_name_1 ) );
243243

244244
Assert.AreEqual(0, ver_name_1.CompareTo( ver_name_1_same ));
245245
Assert.AreEqual(0, ver_name_1_same.CompareTo( ver_name_1 ));
@@ -257,8 +257,8 @@ public void CompareToTestsWithPrelWithMeta( )
257257
var ver_name_1_same = new CSemVerCI( new CSemVer( 1, 2, 3, alpha_0_1, ["BuildMeta", "MoreMeta"] ), "BuildIndex01", "BuildName01" );
258258
var ver_name_2 = new CSemVerCI( new CSemVer( 1, 2, 3, alpha_0_1, ["SomeOhterMeta"] ), "BuildIndex01", "BuildName02" );
259259

260-
Assert.IsTrue(ver_name_1.CompareTo(ver_name_2) < 0);
261-
Assert.IsTrue(ver_name_2.CompareTo(ver_name_1) > 0);
260+
Assert.IsLessThan( 0, ver_name_1.CompareTo( ver_name_2 ) );
261+
Assert.IsGreaterThan( 0, ver_name_2.CompareTo( ver_name_1 ) );
262262

263263
Assert.AreEqual(0, ver_name_1.CompareTo( ver_name_1_same ));
264264
Assert.AreEqual(0, ver_name_1_same.CompareTo( ver_name_1 ));

src/Ubiquity.NET.Versioning.UT/CSemVerTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void CSemVerTest( )
2626
Assert.AreEqual( 3, ver.Patch );
2727
Assert.IsFalse( ver.IsPrerelease );
2828
Assert.IsFalse( ver.PrereleaseVersion.HasValue);
29-
Assert.AreEqual( 0, ver.BuildMeta.Length);
29+
Assert.IsEmpty( ver.BuildMeta);
3030

3131
var preRelInfo = new PrereleaseVersion(1, 2, 3);
3232
ImmutableArray<string> expectedMeta = ["buildMeta"];
@@ -48,7 +48,7 @@ public void DefaultConstructorTests( )
4848
Assert.AreEqual( 0, ver.Patch );
4949
Assert.IsFalse( ver.IsPrerelease );
5050
Assert.IsFalse( ver.PrereleaseVersion.HasValue);
51-
Assert.AreEqual( 0, ver.BuildMeta.Length);
51+
Assert.IsEmpty( ver.BuildMeta);
5252
}
5353

5454
[TestMethod]
@@ -80,11 +80,11 @@ public void CompareToTest( )
8080
var val = new CSemVer(1,2,3);
8181
var val2 = new CSemVer(1,2,3);
8282
var valp1 = new CSemVer(1,2,4); // "+1"
83-
Assert.IsTrue(val.CompareTo(valm1) > 0, "[CompareTo] val > (val -1)");
84-
Assert.IsTrue(valm1.CompareTo(val) < 0, "[CompareTo] (val - 1) < val");
83+
Assert.IsGreaterThan( 0, val.CompareTo( valm1 ), "[CompareTo] val > (val -1)");
84+
Assert.IsLessThan( 0, valm1.CompareTo( val ), "[CompareTo] (val - 1) < val");
8585
Assert.AreEqual(0, val.CompareTo(val2), "[CompareTo] val == val");
86-
Assert.IsTrue(val.CompareTo(valp1) < 0, "[CompareTo] val < (val + 1)");
87-
Assert.IsTrue(valp1.CompareTo(val) > 0, "[CompareTo] (val + 1) > val");
86+
Assert.IsLessThan( 0, val.CompareTo( valp1 ), "[CompareTo] val < (val + 1)");
87+
Assert.IsGreaterThan( 0, valp1.CompareTo( val ), "[CompareTo] (val + 1) > val");
8888

8989
// Ensure operator variants are correct
9090
// (They should internally use CompareTo, this verifies correct behavior
@@ -149,7 +149,7 @@ public static void VerifyOrderedVersion(
149149
Assert.AreEqual(number, ver.PrereleaseVersion.Value.Number, exp);
150150
Assert.AreEqual(fix, ver.PrereleaseVersion.Value.Fix, exp);
151151
Assert.IsNotNull(ver.BuildMeta, $"non-nullable property should not be null for '{exp}'");
152-
Assert.AreEqual(0, ver.BuildMeta.Length, $"non-nullable property should be empty if not set for '{exp}'");
152+
Assert.IsEmpty( ver.BuildMeta, $"non-nullable property should be empty if not set for '{exp}'");
153153
Assert.AreEqual(orderedVersion, ver.OrderedVersion , $"builds should have the same ordered version number provided for '{exp}'");
154154
}
155155

@@ -168,7 +168,7 @@ public static void VerifyOrderedVersion(
168168
Assert.IsFalse(ver.PrereleaseVersion.HasValue, exp);
169169
Assert.IsFalse(ver.IsPrerelease, exp);
170170
Assert.IsNotNull(ver.BuildMeta, $"non-nullable property should not be null for '{exp}'");
171-
Assert.AreEqual(0, ver.BuildMeta.Length, $"non-nullable property should be empty if not set for '{exp}'");
171+
Assert.IsEmpty( ver.BuildMeta, $"non-nullable property should be empty if not set for '{exp}'");
172172
Assert.AreEqual(orderedVersion, ver.OrderedVersion , $"should have the same ordered version number as provided for '{exp}'");
173173
}
174174
}

src/Ubiquity.NET.Versioning.UT/SemVerTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@ public void SemVerTest( )
2525
Assert.AreEqual( 1, sv1.Major );
2626
Assert.AreEqual( 2, sv1.Minor );
2727
Assert.AreEqual( 3, sv1.Patch );
28-
Assert.AreEqual( 0, sv1.PreRelease.Length );
29-
Assert.AreEqual( 0, sv1.BuildMeta.Length );
28+
Assert.IsEmpty( sv1.PreRelease);
29+
Assert.IsEmpty( sv1.BuildMeta);
3030

3131
var sv2 = new SemVer(1, 2, 3, AlphaNumericOrdering.CaseSensitive, ["pre-rel"]);
3232
Assert.AreEqual( 1, sv2.Major );
3333
Assert.AreEqual( 2, sv2.Minor );
3434
Assert.AreEqual( 3, sv2.Patch );
35-
Assert.AreEqual( 1, sv2.PreRelease.Length );
35+
Assert.HasCount( 1, sv2.PreRelease );
3636
Assert.AreEqual( "pre-rel", sv2.PreRelease[ 0 ] );
37-
Assert.AreEqual( 0, sv2.BuildMeta.Length );
37+
Assert.IsEmpty( sv2.BuildMeta);
3838

3939
var sv3 = new SemVer(1, 2, 3, AlphaNumericOrdering.CaseSensitive, [], ["meta"]);
4040
Assert.AreEqual( 1, sv3.Major );
4141
Assert.AreEqual( 2, sv3.Minor );
4242
Assert.AreEqual( 3, sv3.Patch );
43-
Assert.AreEqual( 0, sv3.PreRelease.Length );
44-
Assert.AreEqual( 1, sv3.BuildMeta.Length );
43+
Assert.IsEmpty( sv3.PreRelease);
44+
Assert.HasCount( 1, sv3.BuildMeta );
4545
Assert.AreEqual( "meta", sv3.BuildMeta[ 0 ] );
4646
}
4747

@@ -73,12 +73,12 @@ public void SortOrderIng_is_CaseSensitive_works_as_expected( )
7373
var lhs = sample[i-1];
7474
var rhs = sample[i];
7575

76-
Assert.IsTrue( lhs.CompareTo( rhs ) < 0, $"'{lhs}' should compare less than '{rhs}'" );
76+
Assert.IsLessThan( 0, lhs.CompareTo( rhs ), $"'{lhs}' should compare less than '{rhs}'" );
7777

7878
// inverted should produce correct results too.
79-
Assert.IsTrue( rhs.CompareTo( lhs ) > 0, $"'{rhs}' should compare greater than '{lhs}'" );
79+
Assert.IsGreaterThan( 0, rhs.CompareTo( lhs ), $"'{rhs}' should compare greater than '{lhs}'" );
8080

81-
Assert.IsTrue( lhs.CompareTo( null ) > 0, "Any version should compare greater than null" );
81+
Assert.IsGreaterThan( 0, lhs.CompareTo( null ), "Any version should compare greater than null" );
8282
#pragma warning disable IDE0002 // Simplify Member Access
8383
// Simplification results in a different API call! Test is for a specific case
8484
Assert.IsTrue( SemVer.Equals( null, null ) );
@@ -163,8 +163,8 @@ private static void ValidateEquavalent( SemVer expected, SemVer actual, string i
163163
Assert.AreEqual( expected.Major, actual.Major, $"Major should match for '{input}'" );
164164
Assert.AreEqual( expected.Minor, actual.Minor, $"Minor should match for '{input}'" );
165165
Assert.AreEqual( expected.Patch, actual.Patch, $"Patch should match for '{input}'" );
166-
Assert.AreEqual( expected.PreRelease.Length, actual.PreRelease.Length, $"PreRelease.Count should match for '{input}'" );
167-
Assert.AreEqual( expected.BuildMeta.Length, actual.BuildMeta.Length, $"BuildMeta.Count should match for '{input}'" );
166+
Assert.HasCount( expected.PreRelease.Length, actual.PreRelease, $"PreRelease.Count should match for '{input}'" );
167+
Assert.HasCount( expected.BuildMeta.Length, actual.BuildMeta, $"BuildMeta.Count should match for '{input}'" );
168168
for(int i = 0; i < expected.PreRelease.Length; ++i)
169169
{
170170
Assert.AreEqual( expected.PreRelease[ i ], actual.PreRelease[ i ], $"PreRelease[{i}] should match for '{input}'" );

src/Ubiquity.NET.Versioning.UT/ValidationWithTask.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void ValidateRepoAssemblyVersion( )
102102
// Assert.AreEqual( expectedVersion.Index, actualCI.Index);
103103
Assert.AreEqual( expectedVersion.Name, actualCI.Name);
104104

105-
Assert.AreEqual( expectedVersion.PreRelease.Length, actualCI.PreRelease.Length, "prerelease sequence should have matching element count" );
105+
Assert.HasCount( expectedVersion.PreRelease.Length, actualCI.PreRelease, "prerelease sequence should have matching element count" );
106106
}
107107
else
108108
{

src/Ubiquity.NET.Versioning/Comparison/SemVerComparer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace Ubiquity.NET.Versioning.Comparison
2222
/// </remarks>
2323
[SuppressMessage( "StyleCop.CSharp.DocumentationRules", "SA1649:File name should match first type name", Justification = "File name reflects purpose of these classes" )]
2424
[SuppressMessage( "StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "Tightly coupled types share file scoped implementations" )]
25-
internal static class CaseSensitive
25+
public static class CaseSensitive
2626
{
2727
/// <summary>Gets a comparer that compares the values of pre-release identifier</summary>
2828
/// <remarks>

src/Ubiquity.NET.Versioning/Properties/Resources.Designer.cs

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Ubiquity.NET.Versioning/Properties/Resources.resx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,4 +145,8 @@
145145
<value>'{0}' must be in range {1}. {2}</value>
146146
<comment>{0} - Value name; {1} - range notation for the value; {2} post message text (Usually a spec reference)</comment>
147147
</data>
148-
</root>
148+
<data name="Unrecognized_format_provider_Provider_must_provide_formatting_for_0" xml:space="preserve">
149+
<value>Unrecognized format provider. Provider must provide formatting for {0}</value>
150+
<comment>Format provider for a parse of a SemVer string doesn't report the ordering required.</comment>
151+
</data>
152+
</root>

0 commit comments

Comments
 (0)