@@ -31,4 +31,280 @@ public async Task Does_Not_Throw_For_Multiple_And()
3131
3232 await Assert . That ( action ) . ThrowsNothing ( ) ;
3333 }
34+
35+ [ Test ]
36+ public async Task Both_Assertions_Pass ( )
37+ {
38+ var value = 5 ;
39+
40+ await Assert . That ( value )
41+ . IsGreaterThan ( 3 )
42+ . And
43+ . IsLessThan ( 10 ) ;
44+ }
45+
46+ [ Test ]
47+ public async Task Both_Assertions_Are_Evaluated_When_First_Passes ( )
48+ {
49+ var firstEvaluated = false ;
50+ var secondEvaluated = false ;
51+
52+ var value = 5 ;
53+
54+ await Assert . That ( value )
55+ . Satisfies ( _ =>
56+ {
57+ firstEvaluated = true ;
58+ return _ > 3 ;
59+ } )
60+ . And
61+ . Satisfies ( _ =>
62+ {
63+ secondEvaluated = true ;
64+ return _ < 10 ;
65+ } ) ;
66+
67+ await Assert . That ( firstEvaluated ) . IsTrue ( ) ;
68+ await Assert . That ( secondEvaluated ) . IsTrue ( ) ;
69+ }
70+
71+ [ Test ]
72+ public async Task Second_Assertion_Not_Evaluated_When_First_Fails ( )
73+ {
74+ var firstEvaluated = false ;
75+ var secondEvaluated = false ;
76+
77+ var value = 5 ;
78+
79+ var action = async ( ) => await Assert . That ( value )
80+ . Satisfies ( _ =>
81+ {
82+ firstEvaluated = true ;
83+ return _ > 10 ; // This will fail
84+ } )
85+ . And
86+ . Satisfies ( _ =>
87+ {
88+ secondEvaluated = true ;
89+ return _ < 20 ;
90+ } ) ;
91+
92+ await Assert . That ( action ) . Throws < AssertionException > ( ) ;
93+ await Assert . That ( firstEvaluated ) . IsTrue ( ) ;
94+ await Assert . That ( secondEvaluated ) . IsFalse ( ) ;
95+ }
96+
97+ [ Test ]
98+ public async Task Error_Message_Shows_Combined_Expectations_When_Second_Fails ( )
99+ {
100+ var value = 5 ;
101+
102+ var action = async ( ) => await Assert . That ( value )
103+ . IsGreaterThan ( 3 )
104+ . And
105+ . IsLessThan ( 4 ) ;
106+
107+ var exception = await Assert . That ( action ) . Throws < AssertionException > ( ) ;
108+
109+ await Assert . That ( exception . Message )
110+ . Contains ( "to be greater than 3" )
111+ . And
112+ . Contains ( "to be less than 4" ) ;
113+ }
114+
115+ [ Test ]
116+ public async Task Error_Message_Shows_First_Expectation_When_First_Fails ( )
117+ {
118+ var value = 5 ;
119+
120+ var action = async ( ) => await Assert . That ( value )
121+ . IsGreaterThan ( 10 )
122+ . And
123+ . IsLessThan ( 20 ) ;
124+
125+ var exception = await Assert . That ( action ) . Throws < AssertionException > ( ) ;
126+
127+ await Assert . That ( exception . Message )
128+ . Contains ( "to be greater than 10" ) ;
129+ }
130+
131+ [ Test ]
132+ public async Task Three_Way_And_Chain_All_Pass ( )
133+ {
134+ var value = 5 ;
135+
136+ await Assert . That ( value )
137+ . IsGreaterThan ( 3 )
138+ . And
139+ . IsLessThan ( 10 )
140+ . And
141+ . IsEqualTo ( 5 ) ;
142+ }
143+
144+ [ Test ]
145+ public async Task Three_Way_And_Chain_Middle_Fails ( )
146+ {
147+ var firstEvaluated = false ;
148+ var secondEvaluated = false ;
149+ var thirdEvaluated = false ;
150+
151+ var value = 5 ;
152+
153+ var action = async ( ) => await Assert . That ( value )
154+ . Satisfies ( _ =>
155+ {
156+ firstEvaluated = true ;
157+ return _ > 3 ; // Passes
158+ } )
159+ . And
160+ . Satisfies ( _ =>
161+ {
162+ secondEvaluated = true ;
163+ return _ > 10 ; // Fails
164+ } )
165+ . And
166+ . Satisfies ( _ =>
167+ {
168+ thirdEvaluated = true ;
169+ return _ < 20 ;
170+ } ) ;
171+
172+ await Assert . That ( action ) . Throws < AssertionException > ( ) ;
173+ await Assert . That ( firstEvaluated ) . IsTrue ( ) ;
174+ await Assert . That ( secondEvaluated ) . IsTrue ( ) ;
175+ await Assert . That ( thirdEvaluated ) . IsFalse ( ) ;
176+ }
177+
178+ [ Test ]
179+ public async Task Three_Way_And_Chain_Last_Fails ( )
180+ {
181+ var firstEvaluated = false ;
182+ var secondEvaluated = false ;
183+ var thirdEvaluated = false ;
184+
185+ var value = 5 ;
186+
187+ var action = async ( ) => await Assert . That ( value )
188+ . Satisfies ( _ =>
189+ {
190+ firstEvaluated = true ;
191+ return _ > 3 ; // Passes
192+ } )
193+ . And
194+ . Satisfies ( _ =>
195+ {
196+ secondEvaluated = true ;
197+ return _ < 10 ; // Passes
198+ } )
199+ . And
200+ . Satisfies ( _ =>
201+ {
202+ thirdEvaluated = true ;
203+ return _ > 20 ; // Fails
204+ } ) ;
205+
206+ await Assert . That ( action ) . Throws < AssertionException > ( ) ;
207+ await Assert . That ( firstEvaluated ) . IsTrue ( ) ;
208+ await Assert . That ( secondEvaluated ) . IsTrue ( ) ;
209+ await Assert . That ( thirdEvaluated ) . IsTrue ( ) ;
210+ }
211+
212+ [ Test ]
213+ public async Task Within_Assert_Multiple_Both_Assertions_Evaluated ( )
214+ {
215+ var firstEvaluated = false ;
216+ var secondEvaluated = false ;
217+
218+ var action = async ( ) =>
219+ {
220+ using ( Assert . Multiple ( ) )
221+ {
222+ await Assert . That ( 5 )
223+ . Satisfies ( _ =>
224+ {
225+ firstEvaluated = true ;
226+ return _ > 10 ; // Fails
227+ } )
228+ . And
229+ . Satisfies ( _ =>
230+ {
231+ secondEvaluated = true ;
232+ return _ < 20 ;
233+ } ) ;
234+ }
235+ } ;
236+
237+ await Assert . That ( action ) . Throws < Exception > ( ) ;
238+ await Assert . That ( firstEvaluated ) . IsTrue ( ) ;
239+ await Assert . That ( secondEvaluated ) . IsFalse ( ) ;
240+ }
241+
242+ [ Test ]
243+ public async Task Within_Assert_Multiple_Combined_Error_Message_When_Second_Fails ( )
244+ {
245+ var action = async ( ) =>
246+ {
247+ using ( Assert . Multiple ( ) )
248+ {
249+ await Assert . That ( 5 )
250+ . IsGreaterThan ( 3 )
251+ . And
252+ . IsLessThan ( 4 ) ;
253+ }
254+ } ;
255+
256+ var exception = await Assert . That ( action ) . Throws < Exception > ( ) ;
257+
258+ await Assert . That ( exception . Message )
259+ . Contains ( "to be greater than 3" )
260+ . And
261+ . Contains ( "to be less than 4" ) ;
262+ }
263+
264+ [ Test ]
265+ public async Task Evaluation_Order_Verified_With_Counter ( )
266+ {
267+ var evaluationOrder = new List < int > ( ) ;
268+
269+ var value = 5 ;
270+
271+ await Assert . That ( value )
272+ . Satisfies ( _ =>
273+ {
274+ evaluationOrder . Add ( 1 ) ;
275+ return _ > 3 ;
276+ } )
277+ . And
278+ . Satisfies ( _ =>
279+ {
280+ evaluationOrder . Add ( 2 ) ;
281+ return _ < 10 ;
282+ } ) ;
283+
284+ await Assert . That ( evaluationOrder ) . HasCount ( ) . EqualTo ( 2 ) ;
285+ await Assert . That ( evaluationOrder [ 0 ] ) . IsEqualTo ( 1 ) ;
286+ await Assert . That ( evaluationOrder [ 1 ] ) . IsEqualTo ( 2 ) ;
287+ }
288+
289+ [ Test ]
290+ public async Task And_With_Collection_Assertions ( )
291+ {
292+ var collection = new [ ] { 1 , 2 , 3 , 4 , 5 } ;
293+
294+ await Assert . That ( collection )
295+ . Contains ( 3 )
296+ . And
297+ . HasCount ( ) . EqualTo ( 5 ) ;
298+ }
299+
300+ [ Test ]
301+ public async Task And_With_String_Assertions ( )
302+ {
303+ var text = "Hello World" ;
304+
305+ await Assert . That ( text )
306+ . Contains ( "Hello" )
307+ . And
308+ . HasLength ( 11 ) ;
309+ }
34310}
0 commit comments