Skip to content

Commit a93fc31

Browse files
committed
Fix tests failing due to manipulating shared static state
Move unit abbreviations out of UnitInfo and into UnitAbbreviationsCache, so manipulating one cache instance won't affect another instance.
1 parent e00aadd commit a93fc31

8 files changed

+283
-124
lines changed

UnitsNet.Serialization.JsonNet/AbbreviatedUnitsConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public AbbreviatedUnitsConverter()
4545
/// </summary>
4646
/// <param name="comparer">The comparer used to compare the property/quantity names (e.g. StringComparer.OrdinalIgnoreCase) </param>
4747
public AbbreviatedUnitsConverter(IEqualityComparer<string?> comparer)
48-
: this(new Dictionary<string, QuantityInfo>(Quantity.ByName, comparer), UnitAbbreviationsCache.Default, comparer)
48+
: this(new Dictionary<string, QuantityInfo>(Quantity.ByName, comparer), UnitsNetSetup.Default.UnitAbbreviations, comparer)
4949
{
5050
}
5151

UnitsNet.Tests/AlphabeticalOrderer.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Licensed under MIT No Attribution, see LICENSE file at the root.
2+
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.
3+
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using Xunit.Abstractions;
7+
using Xunit.Sdk;
8+
9+
namespace UnitsNet.Tests;
10+
11+
/// <summary>
12+
/// Useful for debugging tests where a particular order of tests is required.
13+
/// </summary>
14+
/// <example>
15+
/// Add the attribute to your test class:
16+
/// <code>
17+
/// <![CDATA[
18+
/// [TestCaseOrderer(
19+
/// ordererTypeName: "UnitsNet.Tests.AlphabeticalOrderer",
20+
/// ordererAssemblyName: "UnitsNet.Tests")]
21+
/// ]]>
22+
/// </code>
23+
/// </example>
24+
public class AlphabeticalOrderer : ITestCaseOrderer
25+
{
26+
public IEnumerable<TTestCase> OrderTestCases<TTestCase>(
27+
IEnumerable<TTestCase> testCases) where TTestCase : ITestCase =>
28+
testCases.OrderBy(testCase => testCase.TestMethod.Method.Name);
29+
}

UnitsNet.Tests/BaseUnitsTests.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,14 @@ public void ToStringGivesExpectedResult()
140140
AmountOfSubstanceUnit.Mole,
141141
LuminousIntensityUnit.Candela);
142142

143-
var m = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(LengthUnit.Meter);
144-
var kg = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(MassUnit.Kilogram);
145-
var s = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(DurationUnit.Second);
146-
var A = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(ElectricCurrentUnit.Ampere);
147-
var K = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(TemperatureUnit.Kelvin);
148-
var mol = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(AmountOfSubstanceUnit.Mole);
149-
var cd = UnitAbbreviationsCache.Default.GetDefaultAbbreviation(LuminousIntensityUnit.Candela);
143+
UnitAbbreviationsCache cache = UnitsNetSetup.Default.UnitAbbreviations;
144+
var m = cache.GetDefaultAbbreviation(LengthUnit.Meter);
145+
var kg = cache.GetDefaultAbbreviation(MassUnit.Kilogram);
146+
var s = cache.GetDefaultAbbreviation(DurationUnit.Second);
147+
var A = cache.GetDefaultAbbreviation(ElectricCurrentUnit.Ampere);
148+
var K = cache.GetDefaultAbbreviation(TemperatureUnit.Kelvin);
149+
var mol = cache.GetDefaultAbbreviation(AmountOfSubstanceUnit.Mole);
150+
var cd = cache.GetDefaultAbbreviation(LuminousIntensityUnit.Candela);
150151

151152
Assert.Equal($"[Length]: {m}, [Mass]: {kg}, [Time]: {s}, [Current]: {A}, [Temperature]: {K}, [Amount]: {mol}, [LuminousIntensity]: {cd}", siBaseUnits.ToString());
152153
}

UnitsNet.Tests/QuantityIFormattableTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ public void EmptyOrNullFormatStringEqualsGFormat()
2727
[Fact]
2828
public void AFormatGetsAbbreviations()
2929
{
30-
Assert.Equal(UnitAbbreviationsCache.Default.GetDefaultAbbreviation(MyLength.Unit, CultureInfo.InvariantCulture), MyLength.ToString("a", CultureInfo.InvariantCulture));
31-
Assert.Equal(UnitAbbreviationsCache.Default.GetDefaultAbbreviation(MyLength.Unit, CultureInfo.InvariantCulture), MyLength.ToString("a0", CultureInfo.InvariantCulture));
30+
UnitAbbreviationsCache cache = UnitsNetSetup.Default.UnitAbbreviations;
31+
Assert.Equal(cache.GetDefaultAbbreviation(MyLength.Unit, CultureInfo.InvariantCulture), MyLength.ToString("a", CultureInfo.InvariantCulture));
32+
Assert.Equal(cache.GetDefaultAbbreviation(MyLength.Unit, CultureInfo.InvariantCulture), MyLength.ToString("a0", CultureInfo.InvariantCulture));
3233

33-
Assert.Equal(UnitAbbreviationsCache.Default.GetUnitAbbreviations(MyLength.Unit, CultureInfo.InvariantCulture)[1], MyLength.ToString("a1", CultureInfo.InvariantCulture));
34-
Assert.Equal(UnitAbbreviationsCache.Default.GetUnitAbbreviations(MyLength.Unit, CultureInfo.InvariantCulture)[2], MyLength.ToString("a2", CultureInfo.InvariantCulture));
34+
Assert.Equal(cache.GetUnitAbbreviations(MyLength.Unit, CultureInfo.InvariantCulture)[1], MyLength.ToString("a1", CultureInfo.InvariantCulture));
35+
Assert.Equal(cache.GetUnitAbbreviations(MyLength.Unit, CultureInfo.InvariantCulture)[2], MyLength.ToString("a2", CultureInfo.InvariantCulture));
3536
}
3637

3738
[Fact]

UnitsNet.Tests/UnitAbbreviationsCacheTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,24 @@ public void GetDefaultAbbreviationFallsBackToUsEnglishCulture()
229229
Assert.Equal("US english abbreviation for Unit1", abbreviation);
230230
}
231231

232+
[Fact]
233+
public void MapUnitToAbbreviation_DoesNotAffectOtherCacheInstances()
234+
{
235+
var culture = AmericanCulture;
236+
var unit = AreaUnit.SquareMeter;
237+
238+
var cache1 = new UnitAbbreviationsCache();
239+
cache1.MapUnitToAbbreviation(unit, culture, "m^2");
240+
241+
var cache2 = new UnitAbbreviationsCache();
242+
cache2.MapUnitToAbbreviation(unit, culture, "m2");
243+
244+
Assert.Equal(new[] { "m²", "m^2" }, cache1.GetUnitAbbreviations(unit, culture));
245+
Assert.Equal(new[] { "m²", "m2" }, cache2.GetUnitAbbreviations(unit, culture));
246+
Assert.Equal("m²", cache1.GetDefaultAbbreviation(unit, culture));
247+
Assert.Equal("m²", cache2.GetDefaultAbbreviation(unit, culture));
248+
}
249+
232250
[Fact]
233251
public void MapUnitToAbbreviation_AddCustomUnit_DoesNotOverrideDefaultAbbreviationForAlreadyMappedUnits()
234252
{

0 commit comments

Comments
 (0)