|
1 | 1 | import { |
| 2 | + describe, |
2 | 3 | it, |
3 | 4 | expect, |
4 | 5 | beforeEach, |
@@ -215,9 +216,48 @@ export function main() { |
215 | 216 | })(); |
216 | 217 | }); |
217 | 218 | })); |
| 219 | + |
| 220 | + it('supports number types and conserved its value type from Angular', injectAsync([], () => { |
| 221 | + return builder.createAsync(MdInputNumberTypeConservedTestComponent) |
| 222 | + .then((fixture: ComponentFixture) => { |
| 223 | + fixture.detectChanges(); |
| 224 | + |
| 225 | + const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; |
| 226 | + inputEl.value = '3'; |
| 227 | + |
| 228 | + // Manually trigger an onchange event. |
| 229 | + var evt = document.createEvent('HTMLEvents'); |
| 230 | + evt.initEvent('change', true, true); |
| 231 | + inputEl.dispatchEvent(evt); |
| 232 | + |
| 233 | + fixture.detectChanges(); |
| 234 | + |
| 235 | + // Something along the chain of events is asynchronous but does not use Zones, therefore |
| 236 | + // we need to wait for that something to propagate. Using fakeAsync fails, just returning |
| 237 | + // Promise.resolve(fixture) fails as well, but this passes. |
| 238 | + return new Promise((resolve) => { |
| 239 | + window.setTimeout(() => resolve(fixture), 0); |
| 240 | + }); |
| 241 | + }).then((fixture: any) => { |
| 242 | + expect(fixture.componentInstance.value).toBe(3); |
| 243 | + expect(typeof fixture.componentInstance.value).toBe('number'); |
| 244 | + }); |
| 245 | + })); |
218 | 246 | }); |
219 | 247 | } |
220 | 248 |
|
| 249 | +@Component({ |
| 250 | + selector: 'test-input-controller', |
| 251 | + template: ` |
| 252 | + <md-input type="number" [(ngModel)]="value"> |
| 253 | + </md-input> |
| 254 | + `, |
| 255 | + directives: [MD_INPUT_DIRECTIVES] |
| 256 | +}) |
| 257 | +class MdInputNumberTypeConservedTestComponent { |
| 258 | + value: number = 0; |
| 259 | +} |
| 260 | + |
221 | 261 | @Component({ |
222 | 262 | selector: 'test-input-controller', |
223 | 263 | template: ` |
|
0 commit comments