@@ -216,6 +216,88 @@ public void Type_Ok(Type t)
216216 cut . InvokeAsync ( ( ) => buttons [ 1 ] . Click ( ) ) ;
217217 }
218218
219+ [ Fact ]
220+ public async Task Validate_Ok ( )
221+ {
222+ var model = new Foo ( ) { Count = 1 } ;
223+ var cut = Context . Render < ValidateForm > ( pb =>
224+ {
225+ pb . Add ( a => a . Model , model ) ;
226+ pb . AddChildContent < BootstrapInputNumber < int > > ( builder =>
227+ {
228+ builder . Add ( a => a . Value , model . Count ) ;
229+ builder . Add ( a => a . ValueChanged , EventCallback . Factory . Create < int > ( this , v =>
230+ {
231+ model . Count = v ;
232+ } ) ) ;
233+ builder . Add ( a => a . ValueExpression , Utility . GenerateValueExpression ( model , nameof ( model . Count ) , typeof ( int ) ) ) ;
234+ } ) ;
235+ } ) ;
236+ var input = cut . Find ( ".form-control" ) ;
237+
238+ // 更改成非法数值 测试 CurrentValueAsString 赋值逻辑
239+ await cut . InvokeAsync ( ( ) =>
240+ {
241+ input . Change ( "t" ) ;
242+ } ) ;
243+ Assert . Equal ( 1 , model . Count ) ;
244+
245+ var valid = cut . Instance . Validate ( ) ;
246+ Assert . False ( valid ) ;
247+
248+ await cut . InvokeAsync ( ( ) =>
249+ {
250+ input . Change ( "t2" ) ;
251+ } ) ;
252+ Assert . Equal ( 1 , model . Count ) ;
253+ valid = cut . Instance . Validate ( ) ;
254+ Assert . False ( valid ) ;
255+
256+ await cut . InvokeAsync ( ( ) =>
257+ {
258+ input . Change ( "2" ) ;
259+ } ) ;
260+ Assert . Equal ( 2 , model . Count ) ;
261+
262+ valid = cut . Instance . Validate ( ) ;
263+ Assert . True ( valid ) ;
264+ }
265+
266+ [ Fact ]
267+ public async Task TryParseValueFromString_Ok ( )
268+ {
269+ var model = new Foo ( ) { Count = 1 } ;
270+ var cut = Context . Render < BootstrapInputNumber < int > > ( pb =>
271+ {
272+ pb . Add ( a => a . Value , 1 ) ;
273+ pb . Add ( a => a . ValueChanged , EventCallback . Factory . Create < int > ( this , v =>
274+ {
275+ model . Count = v ;
276+ } ) ) ;
277+ pb . Add ( a => a . ValueExpression , Utility . GenerateValueExpression ( model , nameof ( model . Count ) , typeof ( int ) ) ) ;
278+ } ) ;
279+ var input = cut . Find ( ".form-control" ) ;
280+
281+ // 更改成非法数值 测试 CurrentValueAsString 赋值逻辑
282+ await cut . InvokeAsync ( ( ) =>
283+ {
284+ input . Change ( "t" ) ;
285+ } ) ;
286+ Assert . Equal ( 1 , model . Count ) ;
287+
288+ await cut . InvokeAsync ( ( ) =>
289+ {
290+ input . Change ( "t2" ) ;
291+ } ) ;
292+ Assert . Equal ( 1 , model . Count ) ;
293+
294+ await cut . InvokeAsync ( ( ) =>
295+ {
296+ input . Change ( "2" ) ;
297+ } ) ;
298+ Assert . Equal ( 2 , model . Count ) ;
299+ }
300+
219301 private class Cat
220302 {
221303 [ Range ( 1 , 10 ) ]
0 commit comments