Skip to content

Commit

Permalink
Improve test coverage (#694)
Browse files Browse the repository at this point in the history
* Improve test coverage of ctors that take UnitSystem

* Improve test coverage of IQuantity properties

* Add more test coverage to IQuantity
  • Loading branch information
angularsen authored Aug 16, 2019
1 parent e284065 commit a27b2a3
Show file tree
Hide file tree
Showing 6 changed files with 662 additions and 1 deletion.
88 changes: 88 additions & 0 deletions CodeGen/Generators/UnitsNetGen/IQuantityTestClassGenerator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.

using System;
using System.Linq;
using CodeGen.JsonTypes;

namespace CodeGen.Generators.UnitsNetGen
{
internal class IQuantityTestClassGenerator : GeneratorBase
{
private readonly Quantity[] _quantities;

public IQuantityTestClassGenerator(Quantity[] quantities)
{
_quantities = quantities;
}

public override string Generate()
{
Writer.WL(GeneratedFileHeader);
Writer.WL($@"
using System;
using UnitsNet.Units;
using Xunit;
namespace UnitsNet.Tests
{{
public partial class IQuantityTests
{{
[Fact]
public void From_ValueAndUnit_ReturnsQuantityWithSameValueAndUnit()
{{
void Assertion(int expectedValue, Enum expectedUnit, IQuantity quantity)
{{
Assert.Equal(expectedUnit, quantity.Unit);
Assert.Equal(expectedValue, quantity.Value);
}}
");
foreach (var quantity in _quantities)
{
// Pick last one to maybe avoid getting the base unit
var lastUnit = quantity.Units.Last();

// Example: LengthUnit.Centimeter
var unitEnumNameAndValue = $"{quantity.Name}Unit.{lastUnit.SingularName}";
Writer.WL($@"
Assertion(3, {unitEnumNameAndValue}, Quantity.From(3, {unitEnumNameAndValue}));");
}
Writer.WL($@"
}}
[Fact]
public void QuantityInfo_IsSameAsStaticInfoProperty()
{{
void Assertion(QuantityInfo expected, IQuantity quantity) => Assert.Same(expected, quantity.QuantityInfo);
");
foreach (var quantity in _quantities) Writer.WL($@"
Assertion({quantity.Name}.Info, {quantity.Name}.Zero);");
Writer.WL($@"
}}
[Fact]
public void Type_EqualsStaticQuantityTypeProperty()
{{
void Assertion(QuantityType expected, IQuantity quantity) => Assert.Equal(expected, quantity.Type);
");
foreach (var quantity in _quantities) Writer.WL($@"
Assertion({quantity.Name}.QuantityType, {quantity.Name}.Zero);");
Writer.WL($@"
}}
[Fact]
public void Dimensions_IsSameAsStaticBaseDimensions()
{{
void Assertion(BaseDimensions expected, IQuantity quantity) => Assert.Equal(expected, quantity.Dimensions);
");
foreach (var quantity in _quantities) Writer.WL($@"
Assertion({quantity.Name}.BaseDimensions, {quantity.Name}.Zero);");
Writer.WL($@"
}}
}}
}}");

return Writer.ToString();
}
}
}
9 changes: 9 additions & 0 deletions CodeGen/Generators/UnitsNetGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ public static void Generate(string rootDir, Quantity[] quantities)
Log.Information(sb.ToString());
}

GenerateIQuantityTests(quantities, $"{testProjectDir}/GeneratedCode/IQuantityTests.g.cs");

Log.Information("");
GenerateUnitAbbreviationsCache(quantities, $"{outputDir}/UnitAbbreviationsCache.g.cs");
GenerateQuantityType(quantities, $"{outputDir}/QuantityType.g.cs");
Expand Down Expand Up @@ -100,6 +102,13 @@ private static void GenerateUnitTestBaseClass(StringBuilder sb, Quantity quantit
sb.Append("test base(OK) ");
}

private static void GenerateIQuantityTests(Quantity[] quantities, string filePath)
{
var content = new IQuantityTestClassGenerator(quantities).Generate();
File.WriteAllText(filePath, content, Encoding.UTF8);
Log.Information("IQuantityTests.g.cs: ".PadRight(AlignPad) + "(OK)");
}

private static void GenerateUnitAbbreviationsCache(Quantity[] quantities, string filePath)
{
var content = new UnitAbbreviationsCacheGenerator(quantities).Generate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace UnitsNet.Tests
{
public class IQuantityTests
public partial class IQuantityTests
{
[Fact]
public void As_GivenWrongUnitType_ThrowsArgumentException()
Expand Down
Loading

0 comments on commit a27b2a3

Please sign in to comment.