@@ -343,6 +343,53 @@ export function main() {
343343 } ) ;
344344 } ) ) ;
345345
346+ it ( "should support <type=number> when value is cleared in the UI" ,
347+ inject ( [ TestComponentBuilder , AsyncTestCompleter ] , ( tcb : TestComponentBuilder , async ) => {
348+ var t = `<div [ngFormModel]="form">
349+ <input type="number" ngControl="num" required>
350+ </div>` ;
351+
352+ tcb . overrideTemplate ( MyComp , t ) . createAsync ( MyComp ) . then ( ( fixture ) => {
353+ fixture . debugElement . componentInstance . form =
354+ new ControlGroup ( { "num" : new Control ( 10 ) } ) ;
355+ fixture . detectChanges ( ) ;
356+
357+ var input = fixture . debugElement . query ( By . css ( "input" ) ) ;
358+ input . nativeElement . value = "" ;
359+ dispatchEvent ( input . nativeElement , "input" ) ;
360+
361+ expect ( fixture . debugElement . componentInstance . form . valid ) . toBe ( false ) ;
362+ expect ( fixture . debugElement . componentInstance . form . value ) . toEqual ( { "num" : null } ) ;
363+
364+ input . nativeElement . value = "0" ;
365+ dispatchEvent ( input . nativeElement , "input" ) ;
366+
367+ expect ( fixture . debugElement . componentInstance . form . valid ) . toBe ( true ) ;
368+ expect ( fixture . debugElement . componentInstance . form . value ) . toEqual ( { "num" : 0 } ) ;
369+ async . done ( ) ;
370+ } ) ;
371+ } ) ) ;
372+
373+
374+ it ( "should support <type=number> when value is cleared programmatically" ,
375+ inject ( [ TestComponentBuilder , AsyncTestCompleter ] , ( tcb : TestComponentBuilder , async ) => {
376+ var form = new ControlGroup ( { "num" : new Control ( 10 ) } ) ;
377+ var t = `<div [ngFormModel]="form">
378+ <input type="number" ngControl="num" [(ngModel)]="data">
379+ </div>` ;
380+
381+ tcb . overrideTemplate ( MyComp , t ) . createAsync ( MyComp ) . then ( ( fixture ) => {
382+ fixture . debugElement . componentInstance . form = form ;
383+ fixture . debugElement . componentInstance . data = null ;
384+ fixture . detectChanges ( ) ;
385+
386+ var input = fixture . debugElement . query ( By . css ( "input" ) ) ;
387+ expect ( input . nativeElement . value ) . toEqual ( "" ) ;
388+
389+ async . done ( ) ;
390+ } ) ;
391+ } ) ) ;
392+
346393 it ( "should support <type=radio>" ,
347394 inject ( [ TestComponentBuilder , AsyncTestCompleter ] , ( tcb : TestComponentBuilder , async ) => {
348395 var t = `<form [ngFormModel]="form">
0 commit comments