1
1
using System ;
2
+ using System . ComponentModel ;
2
3
using System . Threading . Tasks ;
3
4
using System . Windows ;
5
+ using System . Windows . Controls ;
4
6
using Xunit ;
5
7
6
8
namespace MaterialDesignThemes . Wpf . Tests
@@ -20,7 +22,7 @@ public void Dispose()
20
22
_dialogHost . RaiseEvent ( new RoutedEventArgs ( FrameworkElement . UnloadedEvent ) ) ;
21
23
}
22
24
23
- [ StaFact ( Timeout = 500 ) ]
25
+ [ StaFact ]
24
26
public void CanOpenAndCloseDialogWithIsOpen ( )
25
27
{
26
28
_dialogHost . IsOpen = true ;
@@ -33,7 +35,7 @@ public void CanOpenAndCloseDialogWithIsOpen()
33
35
Assert . True ( session . IsEnded ) ;
34
36
}
35
37
36
- [ StaFact ( Timeout = 500 ) ]
38
+ [ StaFact ]
37
39
public async Task CanOpenAndCloseDialogWithShowMethod ( )
38
40
{
39
41
var id = Guid . NewGuid ( ) ;
@@ -46,7 +48,7 @@ public async Task CanOpenAndCloseDialogWithShowMethod()
46
48
Assert . False ( _dialogHost . IsOpen ) ;
47
49
}
48
50
49
- [ StaFact ( Timeout = 500 ) ]
51
+ [ StaFact ]
50
52
public async Task CanOpenDialogWithShowMethodAndCloseWithIsOpen ( )
51
53
{
52
54
var id = Guid . NewGuid ( ) ;
@@ -59,7 +61,7 @@ public async Task CanOpenDialogWithShowMethodAndCloseWithIsOpen()
59
61
Assert . False ( _dialogHost . IsOpen ) ;
60
62
}
61
63
62
- [ StaFact ( Timeout = 500 ) ]
64
+ [ StaFact ]
63
65
public async Task DialogHostExposesSessionAsProperty ( )
64
66
{
65
67
var id = Guid . NewGuid ( ) ;
@@ -73,7 +75,7 @@ await DialogHost.Show("Content", id,
73
75
} ) ) ) ;
74
76
}
75
77
76
- [ StaFact ( Timeout = 500 ) ]
78
+ [ StaFact ]
77
79
public async Task CannotShowDialogWhileItIsAlreadyOpen ( )
78
80
{
79
81
var id = Guid . NewGuid ( ) ;
@@ -88,7 +90,7 @@ await DialogHost.Show("Content", id,
88
90
} ) ) ) ;
89
91
}
90
92
91
- [ StaFact ( Timeout = 500 ) ]
93
+ [ StaFact ]
92
94
public async Task WhenNoDialogsAreOpenItThrows ( )
93
95
{
94
96
var id = Guid . NewGuid ( ) ;
@@ -99,7 +101,7 @@ public async Task WhenNoDialogsAreOpenItThrows()
99
101
Assert . Equal ( "No loaded DialogHost instances." , ex . Message ) ;
100
102
}
101
103
102
- [ StaFact ( Timeout = 500 ) ]
104
+ [ StaFact ]
103
105
public async Task WhenNoDialogsMatchIdentifierItThrows ( )
104
106
{
105
107
var id = Guid . NewGuid ( ) ;
@@ -109,7 +111,7 @@ public async Task WhenNoDialogsMatchIdentifierItThrows()
109
111
Assert . Equal ( $ "No loaded DialogHost have an { nameof ( DialogHost . Identifier ) } property matching dialogIdentifier argument.", ex . Message ) ;
110
112
}
111
113
112
- [ StaFact ( Timeout = 500 ) ]
114
+ [ StaFact ]
113
115
public async Task WhenMultipleDialogHostsHaveTheSameIdentifierItThrows ( )
114
116
{
115
117
var id = Guid . NewGuid ( ) ;
@@ -125,7 +127,7 @@ public async Task WhenMultipleDialogHostsHaveTheSameIdentifierItThrows()
125
127
Assert . Equal ( "Multiple viable DialogHosts. Specify a unique Identifier on each DialogHost, especially where multiple Windows are a concern." , ex . Message ) ;
126
128
}
127
129
128
- [ StaFact ( Timeout = 500 ) ]
130
+ [ StaFact ]
129
131
public async Task WhenNoIdentifierIsSpecifiedItUsesSingleDialogHost ( )
130
132
{
131
133
bool isOpen = false ;
@@ -138,12 +140,40 @@ public async Task WhenNoIdentifierIsSpecifiedItUsesSingleDialogHost()
138
140
Assert . True ( isOpen ) ;
139
141
}
140
142
141
- [ StaFact ( Timeout = 500 ) ]
143
+ [ StaFact ]
142
144
public async Task WhenContentIsNullItThrows ( )
143
145
{
144
146
var ex = await Assert . ThrowsAsync < ArgumentNullException > ( ( ) => DialogHost . Show ( null ) ) ;
145
147
146
148
Assert . Equal ( "content" , ex . ParamName ) ;
147
149
}
150
+
151
+ [ StaFact ]
152
+ [ Description ( "Issue 1212" ) ]
153
+ public async Task WhenContentIsUpdatedClosingEventHandlerIsInvoked ( )
154
+ {
155
+ int closeInvokeCount = 0 ;
156
+ void ClosingHandler ( object s , DialogClosingEventArgs e )
157
+ {
158
+ closeInvokeCount ++ ;
159
+ if ( closeInvokeCount == 1 )
160
+ {
161
+ e . Cancel ( ) ;
162
+ }
163
+ }
164
+
165
+ var dialogTask = DialogHost . Show ( "Content" , ClosingHandler ) ;
166
+ _dialogHost . CurrentSession . Close ( "FirstResult" ) ;
167
+ _dialogHost . CurrentSession . Close ( "SecondResult" ) ;
168
+ object result = await dialogTask ;
169
+
170
+ Assert . Equal ( "SecondResult" , result ) ;
171
+ Assert . Equal ( 2 , closeInvokeCount ) ;
172
+ }
173
+
174
+ private class TestDialog : Control
175
+ {
176
+ public void CloseDialog ( ) => DialogHost . CloseDialogCommand . Execute ( null , this ) ;
177
+ }
148
178
}
149
179
}
0 commit comments