-
Notifications
You must be signed in to change notification settings - Fork 0
/
StringCalculatorTest.cs
130 lines (116 loc) · 3.91 KB
/
StringCalculatorTest.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
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TddKata1
{
[TestClass]
public class StringCalculatorTest
{
private readonly CalculationExpressionParser _calculationExpressionParser = new CalculationExpressionParser();
[TestMethod]
public void Add_SumsEmptyString()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("");
Assert.AreEqual(0, result);
}
[TestMethod]
public void Add_SumsSingleNumber()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("1");
Assert.AreEqual(1, result);
}
[TestMethod]
public void Add_SumsTwoNumbers_SeparatedByComma()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("1,2");
Assert.AreEqual(3, result);
}
[TestMethod]
public void Add_SumsMultipleNumbers_SeparatedByComma()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("1,2,3,4");
Assert.AreEqual(10, result);
}
[TestMethod]
public void Add_Allows_Comma_Or_Newline_Delimiters()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("1\n2,3");
Assert.AreEqual(6, result);
}
[TestMethod]
public void Add_DefaultDelimiterSpecifiedFirstLine()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("//;\n1;2");
Assert.AreEqual(3, result);
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void Add_With_Negative_Number_Throws_Exception()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("-1");
}
[TestMethod]
public void Add_With_Negative_Number_Includes_Number_In_Exception_Message()
{
StringCalculator calc = new StringCalculator();
try
{
int result = calc.Add("-1");
}
catch (Exception exception)
{
Assert.IsTrue(exception.Message.Contains("-1"));
}
}
[TestMethod]
public void Add_With_Multiple_Negative_Numbers_Includes_All_Numbers_In_Exception_Message()
{
StringCalculator calc = new StringCalculator();
try
{
int result = calc.Add("-1,1,-2");
}
catch (Exception exception)
{
Assert.IsTrue(exception.Message.Contains("-1, -2"));
}
}
[TestMethod]
public void Add_Ingores_Numbers_Larger_Than_1000()
{
StringCalculator calc = new StringCalculator();
int result = calc.Add("2,1001");
Assert.AreEqual(2, result);
}
[TestMethod]
public void Add_Handles_Multi_Character_Delimiter()
{
string calcProgram = "//[***]\n1***2***3";
StringCalculator calc = new StringCalculator();
int result = calc.Add(calcProgram);
Assert.AreEqual(6, result);
}
[TestMethod]
public void Add_Handles_Multiple_Single_Character_Delimiters()
{
string calcProgram = "//[*][%]\n1*2%3";
StringCalculator calc = new StringCalculator();
int result = calc.Add(calcProgram);
Assert.AreEqual(6, result);
}
[TestMethod]
public void Add_Handles_Multiple_Multi_Character_Delimiters()
{
string calcProgram = "//[***][%%%]\n1***2%%%3";
StringCalculator calc = new StringCalculator();
int result = calc.Add(calcProgram);
Assert.AreEqual(6, result);
}
}
}