Skip to content

Commit 2329ca0

Browse files
authored
✅ Generate tests for parsing via each quantity type (#1086)
1 parent a743545 commit 2329ca0

File tree

116 files changed

+49536
-45
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+49536
-45
lines changed

CodeGen/Generators/UnitsNetGen/UnitTestBaseClassGenerator.cs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,84 @@ public void As_SIUnitSystem_ThrowsArgumentExceptionIfNotSupported()
281281
}}
282282
}}
283283
284+
[Fact]
285+
public void Parse()
286+
{{");
287+
foreach(var unit in _quantity.Units.Where(u => string.IsNullOrEmpty(u.ObsoleteText)))
288+
foreach(var localization in unit.Localization)
289+
foreach(var abbreviation in localization.Abbreviations)
290+
{
291+
Writer.WL($@"
292+
try
293+
{{
294+
var parsed = {_quantity.Name}.Parse(""1 {abbreviation}"", CultureInfo.GetCultureInfo(""{localization.Culture}""));
295+
AssertEx.EqualTolerance(1, parsed.{unit.PluralName}, {unit.PluralName}Tolerance);
296+
Assert.Equal({GetUnitFullName(unit)}, parsed.Unit);
297+
}} catch (AmbiguousUnitParseException) {{ /* Some units have the same abbreviations */ }}
298+
");
299+
}
300+
Writer.WL($@"
301+
}}
302+
303+
[Fact]
304+
public void TryParse()
305+
{{");
306+
foreach(var unit in _quantity.Units.Where(u => string.IsNullOrEmpty(u.ObsoleteText)))
307+
foreach(var localization in unit.Localization)
308+
foreach(var abbreviation in localization.Abbreviations)
309+
{
310+
// Skip units with ambiguous abbreviations, since there is no exception to describe this is why TryParse failed.
311+
if (IsAmbiguousAbbreviation(localization, abbreviation)) continue;
312+
313+
Writer.WL($@"
314+
{{
315+
Assert.True({_quantity.Name}.TryParse(""1 {abbreviation}"", CultureInfo.GetCultureInfo(""{localization.Culture}""), out var parsed));
316+
AssertEx.EqualTolerance(1, parsed.{unit.PluralName}, {unit.PluralName}Tolerance);
317+
Assert.Equal({GetUnitFullName(unit)}, parsed.Unit);
318+
}}
319+
");
320+
}
321+
Writer.WL($@"
322+
}}
323+
324+
[Fact]
325+
public void ParseUnit()
326+
{{");
327+
foreach(var unit in _quantity.Units.Where(u => string.IsNullOrEmpty(u.ObsoleteText)))
328+
foreach(var localization in unit.Localization)
329+
foreach(var abbreviation in localization.Abbreviations)
330+
{
331+
Writer.WL($@"
332+
try
333+
{{
334+
var parsedUnit = {_quantity.Name}.ParseUnit(""{abbreviation}"", CultureInfo.GetCultureInfo(""{localization.Culture}""));
335+
Assert.Equal({GetUnitFullName(unit)}, parsedUnit);
336+
}} catch (AmbiguousUnitParseException) {{ /* Some units have the same abbreviations */ }}
337+
");
338+
}
339+
Writer.WL($@"
340+
}}
341+
342+
[Fact]
343+
public void TryParseUnit()
344+
{{");
345+
foreach(var unit in _quantity.Units.Where(u => string.IsNullOrEmpty(u.ObsoleteText)))
346+
foreach(var localization in unit.Localization)
347+
foreach(var abbreviation in localization.Abbreviations)
348+
{
349+
// Skip units with ambiguous abbreviations, since there is no exception to describe this is why TryParse failed.
350+
if (IsAmbiguousAbbreviation(localization, abbreviation)) continue;
351+
352+
Writer.WL($@"
353+
{{
354+
Assert.True({_quantity.Name}.TryParseUnit(""{abbreviation}"", CultureInfo.GetCultureInfo(""{localization.Culture}""), out var parsedUnit));
355+
Assert.Equal({GetUnitFullName(unit)}, parsedUnit);
356+
}}
357+
");
358+
}
359+
Writer.WL($@"
360+
}}
361+
284362
[Theory]
285363
[MemberData(nameof(UnitTypes))]
286364
public void ToUnit({_unitEnumName} unit)
@@ -766,5 +844,12 @@ public void NegationOperator_ReturnsQuantity_WithNegatedValue(double value)
766844
}}");
767845
return Writer.ToString();
768846
}
847+
848+
private bool IsAmbiguousAbbreviation(Localization localization, string abbreviation)
849+
{
850+
return _quantity.Units.Count(u =>
851+
u.Localization.SingleOrDefault(l => l.Culture == localization.Culture) is { } otherUnitLocalization &&
852+
otherUnitLocalization.Abbreviations.Contains(abbreviation, StringComparer.OrdinalIgnoreCase)) > 1;
853+
}
769854
}
770855
}

UnitsNet.Tests/CustomCode/PorousMediumPermeabilityTests.cs

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -37,50 +37,5 @@ public class PorousMediumPermeabilityTests : PorousMediumPermeabilityTestsBase
3737
protected override double SquareCentimetersInOneSquareMeter => 10000;
3838

3939
protected override double SquareMetersInOneSquareMeter => 1;
40-
41-
[Theory]
42-
[InlineData("2 D", 2, PorousMediumPermeabilityUnit.Darcy)]
43-
[InlineData("2 mD", 2, PorousMediumPermeabilityUnit.Millidarcy)]
44-
[InlineData("2 µD", 2, PorousMediumPermeabilityUnit.Microdarcy)]
45-
[InlineData("2 m²", 2, PorousMediumPermeabilityUnit.SquareMeter)]
46-
[InlineData("2 cm²", 2, PorousMediumPermeabilityUnit.SquareCentimeter)]
47-
public void Parse(string input, double value, PorousMediumPermeabilityUnit unit)
48-
{
49-
var result = PorousMediumPermeability.Parse(input);
50-
Assert.Equal(value, result.Value);
51-
Assert.Equal(unit, result.Unit);
52-
}
53-
54-
[Theory]
55-
[InlineData("2 D", true)]
56-
[InlineData("2 kD", false)]
57-
public void TryParse(string input, bool successful)
58-
{
59-
PorousMediumPermeability unit;
60-
var result = PorousMediumPermeability.TryParse(input, out unit);
61-
Assert.Equal(successful, result);
62-
}
63-
64-
[Theory]
65-
[InlineData("D", PorousMediumPermeabilityUnit.Darcy)]
66-
[InlineData("mD", PorousMediumPermeabilityUnit.Millidarcy)]
67-
[InlineData("µD", PorousMediumPermeabilityUnit.Microdarcy)]
68-
[InlineData("m²", PorousMediumPermeabilityUnit.SquareMeter)]
69-
[InlineData("cm²", PorousMediumPermeabilityUnit.SquareCentimeter)]
70-
public void ParseUnit(string input, PorousMediumPermeabilityUnit unit)
71-
{
72-
var result = PorousMediumPermeability.ParseUnit(input);
73-
Assert.Equal(unit, result);
74-
}
75-
76-
[Theory]
77-
[InlineData("mD", true)]
78-
[InlineData("kD", false)]
79-
public void TryParseUnit(string input, bool successful)
80-
{
81-
PorousMediumPermeabilityUnit unit;
82-
var result = PorousMediumPermeability.TryParseUnit(input, out unit);
83-
Assert.Equal(successful, result);
84-
}
8540
}
8641
}

0 commit comments

Comments
 (0)