33public class SplitSecondStopwatchTests
44{
55 [ Fact ]
6- public void InitalStateIsReady ( )
6+ public void StateIsInitiallyReady ( )
77 {
88 var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
99 Assert . Equal ( StopwatchState . Ready , stopwatch . State ) ;
1010 }
11+
12+ [ Fact ]
13+ public void LapsIsInitiallyEmpty ( )
14+ {
15+ var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
16+ Assert . Empty ( stopwatch . Laps ) ;
17+ }
18+
19+ [ Fact ]
20+ public void SplitIsInitiallyZero ( )
21+ {
22+ var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
23+ Assert . Equal ( TimeSpan . Zero , stopwatch . Split ) ;
24+ }
25+
26+ [ Fact ]
27+ public void TotalIsInitiallyZero ( )
28+ {
29+ var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
30+ Assert . Equal ( TimeSpan . Zero , stopwatch . Split ) ;
31+ }
1132
1233 [ Fact ]
1334 public void StartChangesStateToRunning ( )
@@ -16,40 +37,149 @@ public void StartChangesStateToRunning()
1637 stopwatch . Start ( ) ;
1738 Assert . Equal ( StopwatchState . Running , stopwatch . State ) ;
1839 }
19-
40+
2041 [ Fact ]
21- public void PauseChangesStateToPaused ( )
42+ public void StartDoesNotChangeLaps ( )
2243 {
2344 var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
2445 stopwatch . Start ( ) ;
25- stopwatch . Pause ( ) ;
26- Assert . Equal ( StopwatchState . Paused , stopwatch . State ) ;
46+ Assert . Empty ( stopwatch . Laps ) ;
2747 }
28-
48+
49+ [ Fact ]
50+ public void StartStartsTimeTrackingInSplit ( )
51+ {
52+ var timeProvider = new FakeTimeProvider ( ) ;
53+ var stopwatch = new SplitSecondStopwatch ( timeProvider ) ;
54+ stopwatch . Start ( ) ;
55+
56+ var elapsed = TimeSpan . FromSeconds ( 55.5 ) ;
57+ timeProvider . Advance ( elapsed ) ;
58+
59+ Assert . Equal ( elapsed , stopwatch . Split ) ;
60+ }
61+
2962 [ Fact ]
30- public void SplitKeepsStateAsRunning ( )
63+ public void StartStartsTimeTrackingInTotal ( )
64+ {
65+ var timeProvider = new FakeTimeProvider ( ) ;
66+ var stopwatch = new SplitSecondStopwatch ( timeProvider ) ;
67+ stopwatch . Start ( ) ;
68+
69+ var elapsed = TimeSpan . FromSeconds ( 55.5 ) ;
70+ timeProvider . Advance ( elapsed ) ;
71+
72+ Assert . Equal ( elapsed , stopwatch . Split ) ;
73+ }
74+
75+ [ Fact ]
76+ public void CannotStartFromRunningState ( )
3177 {
3278 var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
3379 stopwatch . Start ( ) ;
34- stopwatch . Split ( ) ;
35- Assert . Equal ( StopwatchState . Running , stopwatch . State ) ;
80+
81+ Assert . Throws < InvalidOperationException > ( ( ) => stopwatch . Start ( ) ) ;
3682 }
37-
83+
3884 [ Fact ]
39- public void StopChangesStateToStop ( )
85+ public void StopFromRunningStateChangesStateToReady ( )
4086 {
4187 var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
4288 stopwatch . Start ( ) ;
89+
4390 stopwatch . Stop ( ) ;
44- Assert . Equal ( StopwatchState . Stopped , stopwatch . State ) ;
91+
92+ Assert . Equal ( StopwatchState . Ready , stopwatch . State ) ;
4593 }
46-
94+
95+ [ Fact ]
96+ public void StopDoesNotChangeLaps ( )
97+ {
98+ var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
99+ stopwatch . Start ( ) ;
100+
101+ stopwatch . Stop ( ) ;
102+
103+ Assert . Empty ( stopwatch . Laps ) ;
104+ }
105+
106+ [ Fact ]
107+ public void StopStopsTimeTrackingInSplit ( )
108+ {
109+ var timeProvider = new FakeTimeProvider ( ) ;
110+ var stopwatch = new SplitSecondStopwatch ( timeProvider ) ;
111+ stopwatch . Start ( ) ;
112+
113+ var elapsed1 = TimeSpan . FromSeconds ( 22.5 ) ;
114+ timeProvider . Advance ( elapsed1 ) ;
115+
116+ stopwatch . Stop ( ) ;
117+
118+ var elapsed2 = TimeSpan . FromSeconds ( 17.9 ) ;
119+ timeProvider . Advance ( elapsed2 ) ;
120+
121+ Assert . Equal ( elapsed1 , stopwatch . Split ) ;
122+ }
123+
124+ [ Fact ]
125+ public void StopStopsTimeTrackingInTotal ( )
126+ {
127+ var timeProvider = new FakeTimeProvider ( ) ;
128+ var stopwatch = new SplitSecondStopwatch ( timeProvider ) ;
129+ stopwatch . Start ( ) ;
130+
131+ var elapsed1 = TimeSpan . FromSeconds ( 22.5 ) ;
132+ timeProvider . Advance ( elapsed1 ) ;
133+
134+ stopwatch . Stop ( ) ;
135+
136+ var elapsed2 = TimeSpan . FromSeconds ( 17.9 ) ;
137+ timeProvider . Advance ( elapsed2 ) ;
138+
139+ Assert . Equal ( elapsed1 , stopwatch . Total ) ;
140+ }
141+
142+ [ Fact ]
143+ public void CannotStopFromReadyState ( )
144+ {
145+ var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
146+
147+ Assert . Throws < InvalidOperationException > ( ( ) => stopwatch . Stop ( ) ) ;
148+ }
149+
150+ [ Fact ]
151+ public void ResetClearsLaps ( )
152+ {
153+ var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
154+ stopwatch . Start ( ) ;
155+ stopwatch . Stop ( ) ;
156+
157+ stopwatch . Reset ( ) ;
158+
159+ Assert . Empty ( stopwatch . Laps ) ;
160+ }
161+
162+ [ Fact ]
163+ public void ResetSetsSplitToZero ( )
164+ {
165+ var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
166+ stopwatch . Start ( ) ;
167+ stopwatch . Stop ( ) ;
168+
169+ stopwatch . Reset ( ) ;
170+
171+ Assert . Equal ( TimeSpan . Zero , stopwatch . Split ) ;
172+ }
173+
47174 [ Fact ]
48- public void StopAddsLapTime ( )
175+ public void ResetSetsTotalToZero ( )
49176 {
50177 var stopwatch = new SplitSecondStopwatch ( new FakeTimeProvider ( ) ) ;
51178 stopwatch . Start ( ) ;
52179 stopwatch . Stop ( ) ;
53- Assert . Equal ( StopwatchState . Stopped , stopwatch . State ) ;
180+
181+ stopwatch . Reset ( ) ;
182+
183+ Assert . Equal ( TimeSpan . Zero , stopwatch . Total ) ;
54184 }
55185}
0 commit comments