-
Notifications
You must be signed in to change notification settings - Fork 14
/
MoneyTester.Formatting.cs
151 lines (119 loc) · 4.54 KB
/
MoneyTester.Formatting.cs
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using System.Globalization;
using NMoneys.Extensions;
using NMoneys.Support;
using NUnit.Framework;
namespace NMoneys.Tests
{
[TestFixture]
public partial class MoneyTester
{
[Test]
public void ToString_Default_CurrencyFormat()
{
var subject = new Money(5, CurrencyIsoCode.GBP);
Assert.That(subject.ToString(), Is.EqualTo("£5.00"));
subject = new Money(5, CurrencyIsoCode.DKK);
Assert.That(subject.ToString(), Is.EqualTo("kr 5,00"), "Kroner symbol DOES not include dot. Mistake in Vista and newer.");
subject = new Money(5, CurrencyIsoCode.USD);
Assert.That(subject.ToString(), Is.EqualTo("$5.00"));
subject = new Money(5, CurrencyIsoCode.EUR);
Assert.That(subject.ToString(), Is.EqualTo("5,00 €"));
}
[Test]
public void ToString_WithCustomFormat_CurrencyDependentFormat()
{
var subject = new Money(1000, Currency.Gbp);
Assert.That(subject.ToString("C"), Is.EqualTo("£1,000.00"));
Assert.That(subject.ToString("N"), Is.EqualTo("1,000.00"));
subject = new Money(1000, CurrencyIsoCode.DKK);
Assert.That(subject.ToString("C"), Is.EqualTo("kr 1.000,00"), "Kroner symbol DOES not include dot. Mistake in Vista and newer.");
Assert.That(subject.ToString("00.000"), Is.EqualTo("1000,000"));
}
[Test]
public void ToString_CulturesWithSameCurrencyAndDifferentFormat_FormatHonored()
{
var subject = new Money(1000, CurrencyIsoCode.EUR);
Assert.That(subject.ToString(), Is.EqualTo("1.000,00 €"));
Assert.That(subject.ToString(Culture.Get("fr-FR")),
Is.Not.EqualTo(subject.ToString()),
"Germany has different format than France");
}
[Test]
public void ToString_CultureWithDifferentCurrency_FormatWithNewCulture()
{
var subject = new Money(1000, CurrencyIsoCode.EUR);
Assert.That(subject.ToString(Culture.Get("en-GB")), Is.EqualTo("£1,000.00"));
}
[Test]
public void Format_PatternWith2Placeholders_RichFormatting()
{
var subject = new Money(5, CurrencyIsoCode.USD);
Assert.That(subject.Format("{0} {1}"), Is.EqualTo("5 $"));
Assert.That(subject.Format("{1} {0:00.00}"), Is.EqualTo("$ 05.00"));
subject = new Money(1000, CurrencyIsoCode.SEK);
Assert.That(subject.Format("{1}. {0:000}"), Is.EqualTo("kr. 1000"));
}
[Test]
public void Format_PatternWith1PlaceHolder_CurrencySymbolIgnored()
{
var subject = new Money(5, CurrencyIsoCode.USD);
Assert.That(subject.Format("{0}"), Is.EqualTo("5"));
Assert.That(subject.Format("{0:00.00}"), Is.EqualTo("05.00"));
subject = new Money(1000, CurrencyIsoCode.SEK);
Assert.That(subject.Format(". {0:000}"), Is.EqualTo(". 1000"));
}
[Test]
public void Format_SameCurrencyCulture_Richformatting()
{
var subject = new Money(1500, CurrencyIsoCode.EUR);
string format = "{1} {0:#,#.00}";
Assert.That(subject.Format(format), Is.EqualTo("€ 1.500,00"));
}
[Test]
public void Format_CulturesWithSameCurrencyAndDifferentFormat_FormatHonored()
{
var subject = new Money(1500, CurrencyIsoCode.EUR);
string format = "{1} {0:#,#.00}";
Assert.That(subject.Format(format, Culture.Get("fr-FR")),
Is.Not.EqualTo(subject.Format(format)),
"Germany has different format than France");
}
[Test]
public void Format_DifferentCurrencyCulture_RichFormatting()
{
var subject = new Money(1500, CurrencyIsoCode.EUR);
string format = "{1} {0:#,#.00}";
Assert.That(subject.Format(format, Culture.Get("en-US")), Is.EqualTo("€ 1,500.00"));
}
#region Issue 22. Default number formatting. Default does not include group separation
[Test]
public void Format_AmountWithoutFormatting_NumberWithoutSperators()
{
Assert.That(1500m.Dkk().Format("{0}"), Is.EqualTo("1500"));
}
[Test]
public void Format_AmountWithCustomFormatting_NumberWithSperators()
{
Assert.That(1500m.Dkk().Format("{0:N}"), Is.EqualTo("1.500,00"));
}
#endregion
#region Issue 29. Allow empty currency symbols
[Test]
public void ToString_SymbolLessCurrency_NoSymbol()
{
Money positive = new Money(12.25m, CurrencyIsoCode.CVE),
negative = new Money(-12.25m, CurrencyIsoCode.CVE);
Assert.That(positive.ToString(), Is.EqualTo("12$25"));
Assert.That(negative.ToString(), Is.EqualTo("-12$25"));
}
#endregion
#region change SEK formatting
[Test]
public void ToString_BigSEK_ThousandSeparatorIsDotAgain()
{
var big = new Money(12345.67m, Currency.Sek);
Assert.That(big.ToString(), Is.EqualTo("12.345,67 kr"));
}
#endregion
}
}