Skip to content

Commit a05a86e

Browse files
tmilnthorpangularsen
authored andcommitted
Removing unit conversion from ToString methods. ToUnit must be called… (#546)
* Removing unit conversion from ToString methods. ToUnit must be called first. ToString now has a single responsibility of converting to quantity into a string representation. * WRC fix
1 parent 9c43523 commit a05a86e

11 files changed

+172
-237
lines changed

UnitsNet.Tests/CustomCode/TemperatureTests.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void DividedByTemperatureDeltaEqualsTemperature(TemperatureUnit unit, int
6161
// Act
6262
Temperature resultTemp = temperature.Divide(divisor, unit);
6363

64-
string actual = resultTemp.ToString(unit, CultureInfo.InvariantCulture, "{0:0} {1}");
64+
string actual = resultTemp.ToUnit(unit).ToString(CultureInfo.InvariantCulture, "{0:0} {1}");
6565
Assert.Equal(expected, actual);
6666
}
6767

@@ -81,7 +81,7 @@ public void MultiplyByTemperatureDeltaEqualsTemperature(TemperatureUnit unit, in
8181
// Act
8282
Temperature resultTemp = temperature.Multiply(factor, unit);
8383

84-
string actual = resultTemp.ToString(unit, CultureInfo.InvariantCulture, "{0:0} {1}");
84+
string actual = resultTemp.ToUnit(unit).ToString(CultureInfo.InvariantCulture, "{0:0} {1}");
8585
Assert.Equal(expected, actual);
8686
}
8787

@@ -100,7 +100,7 @@ public void TemperatureDeltaPlusTemperatureEqualsTemperature(TemperatureUnit uni
100100
// Act
101101
Temperature resultTemp = delta + temperature;
102102

103-
string actual = resultTemp.ToString(unit, CultureInfo.InvariantCulture, "{0:0} {1}");
103+
string actual = resultTemp.ToUnit(unit).ToString(CultureInfo.InvariantCulture, "{0:0} {1}");
104104
Assert.Equal(expected, actual);
105105
}
106106

@@ -119,7 +119,7 @@ public void TemperatureMinusTemperatureDeltaEqualsTemperature(TemperatureUnit un
119119
// Act
120120
Temperature resultTemp = temperature - delta;
121121

122-
string actual = resultTemp.ToString(unit, CultureInfo.InvariantCulture, "{0:0} {1}");
122+
string actual = resultTemp.ToUnit(unit).ToString(CultureInfo.InvariantCulture, "{0:0} {1}");
123123
Assert.Equal(expected, actual);
124124
}
125125

@@ -138,8 +138,8 @@ public void TemperaturePlusTemperatureDeltaEqualsTemperature(TemperatureUnit uni
138138
// Act
139139
Temperature resultTemp = temperature + delta;
140140

141-
string actual = resultTemp.ToString(unit, CultureInfo.InvariantCulture, "{0:0} {1}");
141+
string actual = resultTemp.ToUnit(unit).ToString(CultureInfo.InvariantCulture, "{0:0} {1}");
142142
Assert.Equal(expected, actual);
143143
}
144144
}
145-
}
145+
}

UnitsNet.Tests/QuantityTests.ToString.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ public void ConvertsToTheGivenUnit()
106106
try
107107
{
108108
GlobalConfiguration.DefaultCulture = CultureInfo.InvariantCulture;
109-
Assert.Equal("5,000 g", Mass.FromKilograms(5).ToString(MassUnit.Gram));
110-
Assert.Equal("5 kg", Mass.FromGrams(5000).ToString(MassUnit.Kilogram));
111-
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToString(LengthUnit.Meter));
112-
Assert.Equal("1.97 in", Length.FromCentimeters(5).ToString(LengthUnit.Inch));
109+
Assert.Equal("5,000 g", Mass.FromKilograms(5).ToUnit(MassUnit.Gram).ToString());
110+
Assert.Equal("5 kg", Mass.FromGrams(5000).ToUnit(MassUnit.Kilogram).ToString());
111+
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToUnit(LengthUnit.Meter).ToString());
112+
Assert.Equal("1.97 in", Length.FromCentimeters(5).ToUnit(LengthUnit.Inch).ToString());
113113
}
114114
finally
115115
{
@@ -124,9 +124,9 @@ public void FormatsNumberUsingGivenCulture()
124124
try
125125
{
126126
GlobalConfiguration.DefaultCulture = CultureInfo.InvariantCulture;
127-
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToString(LengthUnit.Meter, null));
128-
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToString(LengthUnit.Meter, CultureInfo.InvariantCulture));
129-
Assert.Equal("0,05 m", Length.FromCentimeters(5).ToString(LengthUnit.Meter, new CultureInfo("nb-NO")));
127+
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToUnit(LengthUnit.Meter).ToString(null));
128+
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToUnit(LengthUnit.Meter).ToString(CultureInfo.InvariantCulture));
129+
Assert.Equal("0,05 m", Length.FromCentimeters(5).ToUnit(LengthUnit.Meter).ToString(new CultureInfo("nb-NO")));
130130
}
131131
finally
132132
{
@@ -141,9 +141,9 @@ public void FormatsNumberUsingGivenDigitsAfterRadix()
141141
try
142142
{
143143
GlobalConfiguration.DefaultCulture = CultureInfo.InvariantCulture;
144-
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToString(LengthUnit.Meter, null, 4));
145-
Assert.Equal("1.97 in", Length.FromCentimeters(5).ToString(LengthUnit.Inch, null, 2));
146-
Assert.Equal("1.9685 in", Length.FromCentimeters(5).ToString(LengthUnit.Inch, null, 4));
144+
Assert.Equal("0.05 m", Length.FromCentimeters(5).ToUnit(LengthUnit.Meter).ToString(null, 4));
145+
Assert.Equal("1.97 in", Length.FromCentimeters(5).ToUnit(LengthUnit.Inch).ToString(null, 2));
146+
Assert.Equal("1.9685 in", Length.FromCentimeters(5).ToUnit(LengthUnit.Inch).ToString(null, 4));
147147
}
148148
finally
149149
{

UnitsNet.Tests/UnitAbbreviationsCacheTests.cs

+36-36
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public UnitAbbreviationsCacheTests(ITestOutputHelper output)
5555
[InlineData(0.115, "0.12 m")]
5656
public void DefaultToStringFormatting(double value, string expected)
5757
{
58-
string actual = Length.FromMeters(value).ToString(LengthUnit.Meter, AmericanCulture);
58+
string actual = Length.FromMeters(value).ToUnit(LengthUnit.Meter).ToString(AmericanCulture);
5959
Assert.Equal(expected, actual);
6060
}
6161

@@ -77,7 +77,7 @@ private enum CustomUnit
7777
[InlineData("it-IT")]
7878
public void CommaRadixPointCultureFormatting(string culture)
7979
{
80-
Assert.Equal("0,12 m", Length.FromMeters(0.12).ToString(LengthUnit.Meter, GetCulture(culture)));
80+
Assert.Equal("0,12 m", Length.FromMeters(0.12).ToUnit(LengthUnit.Meter).ToString(GetCulture(culture)));
8181
}
8282

8383
// These cultures all use a decimal point for the radix point
@@ -89,7 +89,7 @@ public void CommaRadixPointCultureFormatting(string culture)
8989
[InlineData("es-MX")]
9090
public void DecimalRadixPointCultureFormatting(string culture)
9191
{
92-
Assert.Equal("0.12 m", Length.FromMeters(0.12).ToString(LengthUnit.Meter, GetCulture(culture)));
92+
Assert.Equal("0.12 m", Length.FromMeters(0.12).ToUnit(LengthUnit.Meter).ToString(GetCulture(culture)));
9393
}
9494

9595
// These cultures all use a comma in digit grouping
@@ -102,7 +102,7 @@ public void DecimalRadixPointCultureFormatting(string culture)
102102
public void CommaDigitGroupingCultureFormatting(string cultureName)
103103
{
104104
CultureInfo culture = GetCulture(cultureName);
105-
Assert.Equal("1,111 m", Length.FromMeters(1111).ToString(LengthUnit.Meter, culture));
105+
Assert.Equal("1,111 m", Length.FromMeters(1111).ToUnit(LengthUnit.Meter).ToString(culture));
106106

107107
// Feet/Inch and Stone/Pound combinations are only used (customarily) in the US, UK and maybe Ireland - all English speaking countries.
108108
// FeetInches returns a whole number of feet, with the remainder expressed (rounded) in inches. Same for SonePounds.
@@ -119,7 +119,7 @@ public void CommaDigitGroupingCultureFormatting(string cultureName)
119119
public void SpaceDigitGroupingCultureFormatting(string culture)
120120
{
121121
// Note: the space used in digit groupings is actually a "thin space" Unicode character U+2009
122-
Assert.Equal("1 111 m", Length.FromMeters(1111).ToString(LengthUnit.Meter, GetCulture(culture)));
122+
Assert.Equal("1 111 m", Length.FromMeters(1111).ToUnit(LengthUnit.Meter).ToString(GetCulture(culture)));
123123
}
124124

125125
// These cultures all use a decimal point in digit grouping
@@ -131,7 +131,7 @@ public void SpaceDigitGroupingCultureFormatting(string culture)
131131
[InlineData("it-IT")]
132132
public void DecimalPointDigitGroupingCultureFormatting(string culture)
133133
{
134-
Assert.Equal("1.111 m", Length.FromMeters(1111).ToString(LengthUnit.Meter, GetCulture(culture)));
134+
Assert.Equal("1.111 m", Length.FromMeters(1111).ToUnit(LengthUnit.Meter).ToString(GetCulture(culture)));
135135
}
136136

137137
[Theory]
@@ -143,7 +143,7 @@ public void DecimalPointDigitGroupingCultureFormatting(string culture)
143143
[InlineData(6, "1.123457 m")]
144144
public void CustomNumberOfSignificantDigitsAfterRadixFormatting(int significantDigitsAfterRadix, string expected)
145145
{
146-
string actual = Length.FromMeters(1.123456789).ToString(LengthUnit.Meter, AmericanCulture, significantDigitsAfterRadix);
146+
string actual = Length.FromMeters(1.123456789).ToUnit(LengthUnit.Meter).ToString(AmericanCulture, significantDigitsAfterRadix);
147147
Assert.Equal(expected, actual);
148148
}
149149

@@ -158,7 +158,7 @@ public void CustomNumberOfSignificantDigitsAfterRadixFormatting(int significantD
158158
public void RoundingErrorsWithSignificantDigitsAfterRadixFormatting(double value,
159159
int maxSignificantDigitsAfterRadix, string expected)
160160
{
161-
string actual = Length.FromMeters(value).ToString(LengthUnit.Meter, AmericanCulture, maxSignificantDigitsAfterRadix);
161+
string actual = Length.FromMeters(value).ToUnit(LengthUnit.Meter).ToString(AmericanCulture, maxSignificantDigitsAfterRadix);
162162
Assert.Equal(expected, actual);
163163
}
164164

@@ -170,7 +170,7 @@ public void RoundingErrorsWithSignificantDigitsAfterRadixFormatting(double value
170170
[InlineData(1.99e-4, "1.99e-04 m")]
171171
public void ScientificNotationLowerInterval(double value, string expected)
172172
{
173-
string actual = Length.FromMeters(value).ToString(LengthUnit.Meter, AmericanCulture);
173+
string actual = Length.FromMeters(value).ToUnit(LengthUnit.Meter).ToString(AmericanCulture);
174174
Assert.Equal(expected, actual);
175175
}
176176

@@ -181,7 +181,7 @@ public void ScientificNotationLowerInterval(double value, string expected)
181181
[InlineData(999.99, "999.99 m")]
182182
public void FixedPointNotationIntervalFormatting(double value, string expected)
183183
{
184-
string actual = Length.FromMeters(value).ToString(LengthUnit.Meter, AmericanCulture);
184+
string actual = Length.FromMeters(value).ToUnit(LengthUnit.Meter).ToString(AmericanCulture);
185185
Assert.Equal(expected, actual);
186186
}
187187

@@ -193,7 +193,7 @@ public void FixedPointNotationIntervalFormatting(double value, string expected)
193193
[InlineData(999999.99, "999,999.99 m")]
194194
public void FixedPointNotationWithDigitGroupingIntervalFormatting(double value, string expected)
195195
{
196-
string actual = Length.FromMeters(value).ToString(LengthUnit.Meter, AmericanCulture);
196+
string actual = Length.FromMeters(value).ToUnit(LengthUnit.Meter).ToString(AmericanCulture);
197197
Assert.Equal(expected, actual);
198198
}
199199

@@ -204,7 +204,7 @@ public void FixedPointNotationWithDigitGroupingIntervalFormatting(double value,
204204
[InlineData(double.MaxValue, "1.8e+308 m")]
205205
public void ScientificNotationUpperIntervalFormatting(double value, string expected)
206206
{
207-
string actual = Length.FromMeters(value).ToString(LengthUnit.Meter, AmericanCulture);
207+
string actual = Length.FromMeters(value).ToUnit(LengthUnit.Meter).ToString(AmericanCulture);
208208
Assert.Equal(expected, actual);
209209
}
210210

@@ -231,35 +231,35 @@ public void AllUnitsImplementToStringForInvariantCulture()
231231
[Fact]
232232
public void ToString_WithNorwegianCulture()
233233
{
234-
Assert.Equal("1 °", Angle.FromDegrees(1).ToString(AngleUnit.Degree, NorwegianCulture));
235-
Assert.Equal("1 m²", Area.FromSquareMeters(1).ToString(AreaUnit.SquareMeter, NorwegianCulture));
236-
Assert.Equal("1 V", ElectricPotential.FromVolts(1).ToString(ElectricPotentialUnit.Volt, NorwegianCulture));
237-
Assert.Equal("1 m³/s", VolumeFlow.FromCubicMetersPerSecond(1).ToString(VolumeFlowUnit.CubicMeterPerSecond, NorwegianCulture));
238-
Assert.Equal("1 N", Force.FromNewtons(1).ToString(ForceUnit.Newton, NorwegianCulture));
239-
Assert.Equal("1 m", Length.FromMeters(1).ToString(LengthUnit.Meter, NorwegianCulture));
240-
Assert.Equal("1 kg", Mass.FromKilograms(1).ToString(MassUnit.Kilogram, NorwegianCulture));
241-
Assert.Equal("1 Pa", Pressure.FromPascals(1).ToString(PressureUnit.Pascal, NorwegianCulture));
242-
Assert.Equal("1 rad/s", RotationalSpeed.FromRadiansPerSecond(1).ToString(RotationalSpeedUnit.RadianPerSecond, NorwegianCulture));
243-
Assert.Equal("1 K", Temperature.FromKelvins(1).ToString(TemperatureUnit.Kelvin, NorwegianCulture));
244-
Assert.Equal("1 N·m", Torque.FromNewtonMeters(1).ToString(TorqueUnit.NewtonMeter, NorwegianCulture));
245-
Assert.Equal("1 m³", Volume.FromCubicMeters(1).ToString(VolumeUnit.CubicMeter, NorwegianCulture));
234+
Assert.Equal("1 °", Angle.FromDegrees(1).ToUnit(AngleUnit.Degree).ToString(NorwegianCulture));
235+
Assert.Equal("1 m²", Area.FromSquareMeters(1).ToUnit(AreaUnit.SquareMeter).ToString(NorwegianCulture));
236+
Assert.Equal("1 V", ElectricPotential.FromVolts(1).ToUnit(ElectricPotentialUnit.Volt).ToString(NorwegianCulture));
237+
Assert.Equal("1 m³/s", VolumeFlow.FromCubicMetersPerSecond(1).ToUnit(VolumeFlowUnit.CubicMeterPerSecond).ToString(NorwegianCulture));
238+
Assert.Equal("1 N", Force.FromNewtons(1).ToUnit(ForceUnit.Newton).ToString(NorwegianCulture));
239+
Assert.Equal("1 m", Length.FromMeters(1).ToUnit(LengthUnit.Meter).ToString(NorwegianCulture));
240+
Assert.Equal("1 kg", Mass.FromKilograms(1).ToUnit(MassUnit.Kilogram).ToString(NorwegianCulture));
241+
Assert.Equal("1 Pa", Pressure.FromPascals(1).ToUnit(PressureUnit.Pascal).ToString(NorwegianCulture));
242+
Assert.Equal("1 rad/s", RotationalSpeed.FromRadiansPerSecond(1).ToUnit(RotationalSpeedUnit.RadianPerSecond).ToString(NorwegianCulture));
243+
Assert.Equal("1 K", Temperature.FromKelvins(1).ToUnit(TemperatureUnit.Kelvin).ToString(NorwegianCulture));
244+
Assert.Equal("1 N·m", Torque.FromNewtonMeters(1).ToUnit(TorqueUnit.NewtonMeter).ToString(NorwegianCulture));
245+
Assert.Equal("1 m³", Volume.FromCubicMeters(1).ToUnit(VolumeUnit.CubicMeter).ToString(NorwegianCulture));
246246
}
247247

248248
[Fact]
249249
public void ToString_WithRussianCulture()
250250
{
251-
Assert.Equal("1 °", Angle.FromDegrees(1).ToString(AngleUnit.Degree, RussianCulture));
252-
Assert.Equal("1 м²", Area.FromSquareMeters(1).ToString(AreaUnit.SquareMeter, RussianCulture));
253-
Assert.Equal("1 В", ElectricPotential.FromVolts(1).ToString(ElectricPotentialUnit.Volt, RussianCulture));
254-
Assert.Equal("1 м³/с", VolumeFlow.FromCubicMetersPerSecond(1).ToString(VolumeFlowUnit.CubicMeterPerSecond, RussianCulture));
255-
Assert.Equal("1 Н", Force.FromNewtons(1).ToString(ForceUnit.Newton, RussianCulture));
256-
Assert.Equal("1 м", Length.FromMeters(1).ToString(LengthUnit.Meter, RussianCulture));
257-
Assert.Equal("1 кг", Mass.FromKilograms(1).ToString(MassUnit.Kilogram, RussianCulture));
258-
Assert.Equal("1 Па", Pressure.FromPascals(1).ToString(PressureUnit.Pascal, RussianCulture));
259-
Assert.Equal("1 рад/с", RotationalSpeed.FromRadiansPerSecond(1).ToString(RotationalSpeedUnit.RadianPerSecond, RussianCulture));
260-
Assert.Equal("1 K", Temperature.FromKelvins(1).ToString(TemperatureUnit.Kelvin, RussianCulture));
261-
Assert.Equal("1 Н·м", Torque.FromNewtonMeters(1).ToString(TorqueUnit.NewtonMeter, RussianCulture));
262-
Assert.Equal("1 м³", Volume.FromCubicMeters(1).ToString(VolumeUnit.CubicMeter, RussianCulture));
251+
Assert.Equal("1 °", Angle.FromDegrees(1).ToUnit(AngleUnit.Degree).ToString(RussianCulture));
252+
Assert.Equal("1 м²", Area.FromSquareMeters(1).ToUnit(AreaUnit.SquareMeter).ToString(RussianCulture));
253+
Assert.Equal("1 В", ElectricPotential.FromVolts(1).ToUnit(ElectricPotentialUnit.Volt).ToString(RussianCulture));
254+
Assert.Equal("1 м³/с", VolumeFlow.FromCubicMetersPerSecond(1).ToUnit(VolumeFlowUnit.CubicMeterPerSecond).ToString(RussianCulture));
255+
Assert.Equal("1 Н", Force.FromNewtons(1).ToUnit(ForceUnit.Newton).ToString(RussianCulture));
256+
Assert.Equal("1 м", Length.FromMeters(1).ToUnit(LengthUnit.Meter).ToString(RussianCulture));
257+
Assert.Equal("1 кг", Mass.FromKilograms(1).ToUnit(MassUnit.Kilogram).ToString(RussianCulture));
258+
Assert.Equal("1 Па", Pressure.FromPascals(1).ToUnit(PressureUnit.Pascal).ToString(RussianCulture));
259+
Assert.Equal("1 рад/с", RotationalSpeed.FromRadiansPerSecond(1).ToUnit(RotationalSpeedUnit.RadianPerSecond).ToString(RussianCulture));
260+
Assert.Equal("1 K", Temperature.FromKelvins(1).ToUnit(TemperatureUnit.Kelvin).ToString(RussianCulture));
261+
Assert.Equal("1 Н·м", Torque.FromNewtonMeters(1).ToUnit(TorqueUnit.NewtonMeter).ToString(RussianCulture));
262+
Assert.Equal("1 м³", Volume.FromCubicMeters(1).ToUnit(VolumeUnit.CubicMeter).ToString(RussianCulture));
263263
}
264264

265265
[Fact]

0 commit comments

Comments
 (0)