11using System ;
22using System . Threading . Tasks ;
3- using AsyncAwaitBestPractices . MVVM ;
3+ using AsyncAwaitBestPractices . MVVM ;
44using NUnit . Framework ;
5-
6- namespace AsyncAwaitBestPractices . UnitTests ;
7-
8- class Tests_AsyncCommand : BaseAsyncCommandTest
9- {
10- [ Test ]
11- public void AsyncCommand_NullExecuteParameter ( )
12- {
13- //Arrange
14-
15- //Act
16-
17- //Assert
18- #pragma warning disable CS8625 //Cannot convert null literal to non-nullable reference type
19- Assert . Throws < ArgumentNullException > ( ( ) => new AsyncCommand ( null ) ) ;
20- Assert . Throws < ArgumentNullException > ( ( ) => new AsyncCommand < string > ( null ) ) ;
21- Assert . Throws < ArgumentNullException > ( ( ) => new AsyncCommand < string , string ? > ( null ) ) ;
22- #pragma warning restore CS8625
23- }
24-
25- [ TestCase ( 500 ) ]
26- [ TestCase ( default ) ]
27- public async Task AsyncCommand_ExecuteAsync_IntParameter_Test ( int parameter )
28- {
29- //Arrange
30- AsyncCommand < int > command = new AsyncCommand < int > ( IntParameterTask ) ;
31- AsyncCommand < int , int > command2 = new AsyncCommand < int , int > ( IntParameterTask ) ;
32-
33- //Act
34- await command . ExecuteAsync ( parameter ) ;
35- await command2 . ExecuteAsync ( parameter ) ;
36-
37- //Assert
38-
39- }
40-
41- [ TestCase ( "Hello" ) ]
42- [ TestCase ( default ) ]
43- public async Task AsyncCommand_ExecuteAsync_StringParameter_Test ( string parameter )
44- {
45- //Arrange
46- AsyncCommand < string > command = new AsyncCommand < string > ( StringParameterTask ) ;
47- AsyncCommand < string , string > command2 = new AsyncCommand < string , string > ( StringParameterTask ) ;
48-
49- //Act
50- await command . ExecuteAsync ( parameter ) ;
51- await command2 . ExecuteAsync ( parameter ) ;
52-
53- //Assert
54-
55- }
56-
57- [ Test ]
58- public void AsyncCommand_Parameter_CanExecuteTrue_Test ( )
59- {
60- //Arrange
61- AsyncCommand < int > command = new AsyncCommand < int > ( IntParameterTask , CanExecuteTrue ) ;
62- AsyncCommand < int , bool > command2 = new AsyncCommand < int , bool > ( IntParameterTask , CanExecuteTrue ) ;
63-
64- //Act
65-
66- //Assert
67- Assert . IsTrue ( command . CanExecute ( null ) ) ;
68- Assert . IsTrue ( command2 . CanExecute ( true ) ) ;
69- }
70-
71- [ Test ]
72- public void AsyncCommand_Parameter_CanExecuteFalse_Test ( )
73- {
74- //Arrange
75- AsyncCommand < int > command = new AsyncCommand < int > ( IntParameterTask , CanExecuteFalse ) ;
76- AsyncCommand < int , int > command2 = new AsyncCommand < int , int > ( IntParameterTask , CanExecuteFalse ) ;
77-
78- //Act
79-
80- //Assert
81-
82- Assert . False ( command . CanExecute ( null ) ) ;
83- Assert . False ( command2 . CanExecute ( 0 ) ) ;
84- }
85-
86- [ Test ]
87- public void AsyncCommand_NoParameter_CanExecuteTrue_Test ( )
88- {
89- //Arrange
90- AsyncCommand command = new AsyncCommand ( NoParameterTask , CanExecuteTrue ) ;
91-
92- //Act
93-
94- //Assert
95-
96- Assert . IsTrue ( command . CanExecute ( null ) ) ;
97- }
98-
99- [ Test ]
100- public void AsyncCommand_NoParameter_CanExecuteFalse_Test ( )
101- {
102- //Arrange
103- AsyncCommand command = new AsyncCommand ( NoParameterTask , CanExecuteFalse ) ;
104-
105- //Act
106-
107- //Assert
108- Assert . False ( command . CanExecute ( null ) ) ;
109- }
110-
111-
112- [ Test ]
113- public void AsyncCommand_CanExecuteChanged_Test ( )
114- {
115- //Arrange
116- bool canCommandExecute = false ;
117- bool didCanExecuteChangeFire = false ;
118-
119- AsyncCommand command = new AsyncCommand ( NoParameterTask , commandCanExecute ) ;
120- command . CanExecuteChanged += handleCanExecuteChanged ;
121-
122- void handleCanExecuteChanged ( object ? sender , EventArgs e ) => didCanExecuteChangeFire = true ;
123- bool commandCanExecute ( object ? parameter ) => canCommandExecute ;
124-
125-
126- Assert . False ( command . CanExecute ( null ) ) ;
127-
128-
129- //Act
130- canCommandExecute = true ;
131-
132- //Assert
133-
134- Assert . True ( command . CanExecute ( null ) ) ;
135-
136- Assert . False ( didCanExecuteChangeFire ) ;
137-
138- //Act
139- command . RaiseCanExecuteChanged ( ) ;
140-
141- //Assert
142- Assert . True ( didCanExecuteChangeFire ) ;
143- Assert . True ( command . CanExecute ( null ) ) ;
144- }
5+
6+ namespace AsyncAwaitBestPractices . UnitTests ;
7+
8+ class Tests_AsyncCommand : BaseAsyncCommandTest
9+ {
10+ [ Test ]
11+ public void AsyncCommand_NullExecuteParameter ( )
12+ {
13+ //Arrange
14+
15+ //Act
16+
17+ //Assert
18+ #pragma warning disable CS8625 //Cannot convert null literal to non-nullable reference type
19+ Assert . Throws < ArgumentNullException > ( ( ) => new AsyncCommand ( null ) ) ;
20+ Assert . Throws < ArgumentNullException > ( ( ) => new AsyncCommand < string > ( null ) ) ;
21+ Assert . Throws < ArgumentNullException > ( ( ) => new AsyncCommand < string , string ? > ( null ) ) ;
22+ #pragma warning restore CS8625
23+ }
24+
25+ [ TestCase ( 500 ) ]
26+ [ TestCase ( 0 ) ]
27+ public async Task AsyncCommand_ExecuteAsync_IntParameter_Test ( int parameter )
28+ {
29+ //Arrange
30+ AsyncCommand < int > command = new AsyncCommand < int > ( IntParameterTask ) ;
31+ AsyncCommand < int , int > command2 = new AsyncCommand < int , int > ( IntParameterTask ) ;
32+
33+ //Act
34+ await command . ExecuteAsync ( parameter ) ;
35+ await command2 . ExecuteAsync ( parameter ) ;
36+
37+ //Assert
38+
39+ }
40+
41+ [ TestCase ( "Hello" ) ]
42+ [ TestCase ( null ) ]
43+ public async Task AsyncCommand_ExecuteAsync_StringParameter_Test ( string ? parameter )
44+ {
45+ //Arrange
46+ AsyncCommand < string ? > command = new ( StringParameterTask ) ;
47+ AsyncCommand < string ? , string > command2 = new ( StringParameterTask ) ;
48+
49+ //Act
50+ await command . ExecuteAsync ( parameter ) ;
51+ await command2 . ExecuteAsync ( parameter ) ;
52+
53+ //Assert
54+
55+ }
56+
57+ [ Test ]
58+ public void AsyncCommand_Parameter_CanExecuteTrue_Test ( )
59+ {
60+ //Arrange
61+ AsyncCommand < int > command = new AsyncCommand < int > ( IntParameterTask , CanExecuteTrue ) ;
62+ AsyncCommand < int , bool > command2 = new AsyncCommand < int , bool > ( IntParameterTask , CanExecuteTrue ) ;
63+
64+ Assert . Multiple ( ( ) =>
65+ {
66+ //Assert
67+ Assert . That ( command . CanExecute ( null ) , Is . True ) ;
68+ Assert . That ( command2 . CanExecute ( true ) , Is . True ) ;
69+ } ) ;
70+ }
71+
72+ [ Test ]
73+ public void AsyncCommand_Parameter_CanExecuteFalse_Test ( )
74+ {
75+ //Arrange
76+ AsyncCommand < int > command = new AsyncCommand < int > ( IntParameterTask , CanExecuteFalse ) ;
77+ AsyncCommand < int , int > command2 = new AsyncCommand < int , int > ( IntParameterTask , CanExecuteFalse ) ;
78+
79+ Assert . Multiple ( ( ) =>
80+ {
81+ //Assert
82+ Assert . That ( command . CanExecute ( null ) , Is . False ) ;
83+ Assert . That ( command2 . CanExecute ( 0 ) , Is . False ) ;
84+ } ) ;
85+ }
86+
87+ [ Test ]
88+ public void AsyncCommand_NoParameter_CanExecuteTrue_Test ( )
89+ {
90+ //Arrange
91+ AsyncCommand command = new AsyncCommand ( NoParameterTask , CanExecuteTrue ) ;
92+
93+ //Act
94+
95+ //Assert
96+
97+ Assert . That ( command . CanExecute ( null ) , Is . True ) ;
98+ }
99+
100+ [ Test ]
101+ public void AsyncCommand_NoParameter_CanExecuteFalse_Test ( )
102+ {
103+ //Arrange
104+ AsyncCommand command = new AsyncCommand ( NoParameterTask , CanExecuteFalse ) ;
105+
106+ //Act
107+
108+ //Assert
109+ Assert . That ( command . CanExecute ( null ) , Is . False ) ;
110+ }
111+
112+
113+ [ Test ]
114+ public void AsyncCommand_CanExecuteChanged_Test ( )
115+ {
116+ //Arrange
117+ bool canCommandExecute = false ;
118+ bool didCanExecuteChangeFire = false ;
119+
120+ AsyncCommand command = new AsyncCommand ( NoParameterTask , commandCanExecute ) ;
121+ command . CanExecuteChanged += handleCanExecuteChanged ;
122+
123+ void handleCanExecuteChanged ( object ? sender , EventArgs e ) => didCanExecuteChangeFire = true ;
124+ bool commandCanExecute ( object ? parameter ) => canCommandExecute ;
125+
126+
127+ Assert . That ( command . CanExecute ( null ) , Is . False ) ;
128+
129+
130+ //Act
131+ canCommandExecute = true ;
132+
133+ Assert . Multiple ( ( ) =>
134+ {
135+ //Assert
136+ Assert . That ( command . CanExecute ( null ) , Is . True ) ;
137+ Assert . That ( didCanExecuteChangeFire , Is . False ) ;
138+ } ) ;
139+
140+ //Act
141+ command . RaiseCanExecuteChanged ( ) ;
142+
143+ Assert . Multiple ( ( ) =>
144+ {
145+ //Assert
146+ Assert . That ( didCanExecuteChangeFire , Is . True ) ;
147+ Assert . That ( command . CanExecute ( null ) , Is . True ) ;
148+ } ) ;
149+ }
145150}
0 commit comments