3
3
4
4
using System ;
5
5
using System . Collections . Generic ;
6
+ using System . Globalization ;
6
7
using Newtonsoft . Json ;
7
8
using Newtonsoft . Json . Converters ;
8
9
using Newtonsoft . Json . Linq ;
@@ -13,38 +14,47 @@ namespace UnitsNet.Serialization.JsonNet.Tests
13
14
{
14
15
public sealed class UnitsNetBaseJsonConverterTest
15
16
{
16
- private TestConverter _sut ;
17
+ private readonly TestConverter _sut ;
17
18
18
19
public UnitsNetBaseJsonConverterTest ( )
19
20
{
20
21
_sut = new TestConverter ( ) ;
21
22
}
22
23
23
24
[ Fact ]
24
- public void UnitsNetBaseJsonConverter_ConvertIQuantity_works_as_expected ( )
25
+ public void UnitsNetBaseJsonConverter_ConvertIQuantity_works_with_double_type ( )
25
26
{
26
- var result = _sut . Test_ConvertIQuantity ( Power . FromWatts ( 10.2365D ) ) ;
27
+ var result = _sut . Test_ConvertDoubleIQuantity ( Length . FromMeters ( 10.2365 ) ) ;
28
+
29
+ Assert . Equal ( "LengthUnit.Meter" , result . Unit ) ;
30
+ Assert . Equal ( 10.2365 , result . Value ) ;
31
+ }
32
+
33
+ [ Fact ]
34
+ public void UnitsNetBaseJsonConverter_ConvertIQuantity_works_with_decimal_type ( )
35
+ {
36
+ var result = _sut . Test_ConvertDecimalIQuantity ( Power . FromWatts ( 10.2365m ) ) ;
27
37
28
38
Assert . Equal ( "PowerUnit.Watt" , result . Unit ) ;
29
- Assert . Equal ( 10.2365D , result . Value ) ;
39
+ Assert . Equal ( 10.2365m , result . Value ) ;
30
40
}
31
41
32
42
[ Fact ]
33
43
public void UnitsNetBaseJsonConverter_ConvertIQuantity_throws_ArgumentNullException_when_quantity_is_NULL ( )
34
44
{
35
- var result = Assert . Throws < ArgumentNullException > ( ( ) => _sut . Test_ConvertIQuantity ( null ) ) ;
45
+ var result = Assert . Throws < ArgumentNullException > ( ( ) => _sut . Test_ConvertDoubleIQuantity ( null ) ) ;
36
46
37
47
Assert . Equal ( "Value cannot be null.\r \n Parameter name: quantity" , result . Message ) ;
38
48
}
39
49
40
50
[ Fact ]
41
51
public void UnitsNetBaseJsonConverter_ConvertValueUnit_works_as_expected ( )
42
52
{
43
- var result = _sut . Test_ConvertValueUnit ( "PowerUnit.Watt" , 10.2365D ) ;
53
+ var result = _sut . Test_ConvertDecimalValueUnit ( "PowerUnit.Watt" , 10.2365m ) ;
44
54
45
55
Assert . NotNull ( result ) ;
46
56
Assert . IsType < Power > ( result ) ;
47
- Assert . True ( Power . FromWatts ( 10.2365D ) . Equals ( ( Power ) result , 1E-5 , ComparisonType . Absolute ) ) ;
57
+ Assert . True ( Power . FromWatts ( 10.2365m ) . Equals ( ( Power ) result , 1E-5 , ComparisonType . Absolute ) ) ;
48
58
49
59
}
50
60
@@ -59,7 +69,7 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_works_with_NULL_value()
59
69
[ Fact ]
60
70
public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_when_unit_does_not_exist ( )
61
71
{
62
- var result = Assert . Throws < UnitsNetException > ( ( ) => _sut . Test_ConvertValueUnit ( "SomeImaginaryUnit.Watt" , 10.2365D ) ) ;
72
+ var result = Assert . Throws < UnitsNetException > ( ( ) => _sut . Test_ConvertDoubleValueUnit ( "SomeImaginaryUnit.Watt" , 10.2365D ) ) ;
63
73
64
74
Assert . Equal ( "Unable to find enum type." , result . Message ) ;
65
75
Assert . True ( result . Data . Contains ( "type" ) ) ;
@@ -69,7 +79,7 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_
69
79
[ Fact ]
70
80
public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_when_unit_is_in_unexpected_format ( )
71
81
{
72
- var result = Assert . Throws < UnitsNetException > ( ( ) => _sut . Test_ConvertValueUnit ( "PowerUnit Watt" , 10.2365D ) ) ;
82
+ var result = Assert . Throws < UnitsNetException > ( ( ) => _sut . Test_ConvertDecimalValueUnit ( "PowerUnit Watt" , 10.2365m ) ) ;
73
83
74
84
Assert . Equal ( "\" PowerUnit Watt\" is not a valid unit." , result . Message ) ;
75
85
Assert . True ( result . Data . Contains ( "type" ) ) ;
@@ -85,7 +95,7 @@ public void UnitsNetBaseJsonConverter_CreateLocalSerializer_works_as_expected()
85
95
TypeNameHandling = TypeNameHandling . Arrays ,
86
96
Converters = new List < JsonConverter > ( )
87
97
{
88
-
98
+
89
99
new BinaryConverter ( ) ,
90
100
_sut ,
91
101
new DataTableConverter ( )
@@ -109,21 +119,21 @@ public void UnitsNetBaseJsonConverter_ReadValueUnit_work_as_expected()
109
119
var token = new JObject ( ) ;
110
120
111
121
token . Add ( "Unit" , "PowerUnit.Watt" ) ;
112
- token . Add ( "Value" , 10.2365D ) ;
122
+ token . Add ( "Value" , " 10.2365" ) ;
113
123
114
- var result = _sut . Test_ReadValueUnit ( token ) ;
124
+ var result = _sut . Test_ReadDecimalValueUnit ( token ) ;
115
125
116
126
Assert . NotNull ( result ) ;
117
127
Assert . Equal ( "PowerUnit.Watt" , result ? . Unit ) ;
118
- Assert . Equal ( 10.2365D , result ? . Value ) ;
128
+ Assert . Equal ( 10.2365m , result ? . Value ) ;
119
129
}
120
130
121
131
[ Fact ]
122
132
public void UnitsNetBaseJsonConverter_ReadValueUnit_works_with_empty_token ( )
123
133
{
124
134
var token = new JObject ( ) ;
125
135
126
- var result = _sut . Test_ReadValueUnit ( token ) ;
136
+ var result = _sut . Test_ReadDoubleValueUnit ( token ) ;
127
137
128
138
Assert . Null ( result ) ;
129
139
}
@@ -142,10 +152,10 @@ public void UnitsNetBaseJsonConverter_ReadValueUnit_returns_null_when_unit_or_va
142
152
143
153
if ( withValue )
144
154
{
145
- token . Add ( "Value" , 10.2365D ) ;
155
+ token . Add ( "Value" , 10.2365m ) ;
146
156
}
147
157
148
- var result = _sut . Test_ReadValueUnit ( token ) ;
158
+ var result = _sut . Test_ReadDecimalValueUnit ( token ) ;
149
159
150
160
Assert . Null ( result ) ;
151
161
}
@@ -161,13 +171,13 @@ public void UnitsNetBaseJsonConverter_ReadValueUnit_works_case_insensitive(strin
161
171
var token = new JObject ( ) ;
162
172
163
173
token . Add ( unitPropertyName , "PowerUnit.Watt" ) ;
164
- token . Add ( valuePropertyName , 10.2365D ) ;
174
+ token . Add ( valuePropertyName , 10.2365m . ToString ( CultureInfo . InvariantCulture ) ) ;
165
175
166
- var result = _sut . Test_ReadValueUnit ( token ) ;
176
+ var result = _sut . Test_ReadDecimalValueUnit ( token ) ;
167
177
168
178
Assert . NotNull ( result ) ;
169
179
Assert . Equal ( "PowerUnit.Watt" , result ? . Unit ) ;
170
- Assert . Equal ( 10.2365D , result ? . Value ) ;
180
+ Assert . Equal ( 10.2365m , result ? . Value ) ;
171
181
}
172
182
173
183
/// <summary>
@@ -180,30 +190,58 @@ private class TestConverter : UnitsNetBaseJsonConverter<string>
180
190
public override void WriteJson ( JsonWriter writer , string value , JsonSerializer serializer ) => throw new NotImplementedException ( ) ;
181
191
public override string ReadJson ( JsonReader reader , Type objectType , string existingValue , bool hasExistingValue , JsonSerializer serializer ) => throw new NotImplementedException ( ) ;
182
192
183
- public ( string Unit , double Value ) Test_ConvertIQuantity ( IQuantity value )
193
+ public ( string Unit , double Value ) Test_ConvertDoubleIQuantity ( IQuantity value )
184
194
{
185
195
var result = ConvertIQuantity ( value ) ;
196
+ if ( result is DoubleValueUnit doubleResult )
197
+ {
198
+ return ( result . Unit , doubleResult . Value ) ;
199
+ }
186
200
187
- return ( result . Unit , result . Value ) ;
201
+ throw new ArgumentException ( "The quantity does not have a double value" , nameof ( value ) ) ;
188
202
}
189
203
190
- public IQuantity Test_ConvertValueUnit ( string unit , double value ) => Test_ConvertValueUnit ( new ValueUnit ( ) { Unit = unit , Value = value } ) ;
204
+ public ( string Unit , decimal Value ) Test_ConvertDecimalIQuantity ( IQuantity value )
205
+ {
206
+ var result = ConvertIQuantity ( value ) ;
207
+ if ( result is DecimalValueUnit decimalResult )
208
+ {
209
+ return ( result . Unit , decimal . Parse ( decimalResult . Value ) ) ;
210
+ }
211
+
212
+ throw new ArgumentException ( "The quantity does not have a decimal value" , nameof ( value ) ) ;
213
+ }
214
+
215
+ public IQuantity Test_ConvertDoubleValueUnit ( string unit , double value ) => Test_ConvertValueUnit ( new DoubleValueUnit { Unit = unit , Value = value } ) ;
216
+ public IQuantity Test_ConvertDecimalValueUnit ( string unit , decimal value ) => Test_ConvertValueUnit ( new DecimalValueUnit { Unit = unit , Value = value . ToString ( CultureInfo . InvariantCulture ) } ) ;
191
217
public IQuantity Test_ConvertValueUnit ( ) => Test_ConvertValueUnit ( null ) ;
192
218
private IQuantity Test_ConvertValueUnit ( ValueUnit valueUnit ) => ConvertValueUnit ( valueUnit ) ;
193
219
194
220
public JsonSerializer Test_CreateLocalSerializer ( JsonSerializer serializer ) => CreateLocalSerializer ( serializer , this ) ;
195
221
196
- public ( string Unit , double Value ) ? Test_ReadValueUnit ( JToken jsonToken )
222
+ public ( string Unit , double Value ) ? Test_ReadDoubleValueUnit ( JToken jsonToken )
197
223
{
198
224
var result = ReadValueUnit ( jsonToken ) ;
225
+ if ( result is DoubleValueUnit doubleResult )
226
+ {
227
+ return ( result . Unit , doubleResult . Value ) ;
228
+ }
199
229
200
- if ( result == null )
230
+ return null ;
231
+ }
232
+
233
+ public ( string Unit , decimal Value ) ? Test_ReadDecimalValueUnit ( JToken jsonToken )
234
+ {
235
+ var result = ReadValueUnit ( jsonToken ) ;
236
+
237
+ if ( result is DecimalValueUnit decimalResult )
201
238
{
202
- return null ;
239
+ return ( result . Unit , decimal . Parse ( decimalResult . Value ) ) ;
203
240
}
204
241
205
- return ( result . Unit , result . Value ) ;
242
+ return null ;
206
243
}
244
+
207
245
}
208
246
}
209
247
}
0 commit comments