-
Notifications
You must be signed in to change notification settings - Fork 408
Expand file tree
/
Copy pathIQuantityTestClassGenerator.cs
More file actions
88 lines (78 loc) · 2.86 KB
/
IQuantityTestClassGenerator.cs
File metadata and controls
88 lines (78 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). 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<double>(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}<double>.Info, {quantity.Name}<double>.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}<double>.QuantityType, {quantity.Name}<double>.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}<double>.BaseDimensions, {quantity.Name}<double>.Zero);" );
Writer.WL($@"
}}
}}
}}");
return Writer.ToString();
}
}
}