| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-13 16:32:21 -08:00
										 |  |  | // The functions in this file verify that the assumptions we are making
 | 
					
						
							|  |  |  | // about state in an instruction are correct before implementing any logic.
 | 
					
						
							|  |  |  | // They are meant only to be called in dev mode as sanity checks.
 | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Stringifies values such that strings are wrapped in explicit quotation marks and | 
					
						
							|  |  |  |  * other types are stringified normally. Used in error messages (e.g. assertThrow) | 
					
						
							|  |  |  |  * to make it clear that certain values are of the string type when comparing. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * e.g. `expected "3" to be 3` is easier to understand than `expected 3 to be 3`. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-12-13 16:32:21 -08:00
										 |  |  |  * @param value The value to be stringified | 
					
						
							|  |  |  |  * @returns The stringified value | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  |  */ | 
					
						
							|  |  |  | function stringifyValueForError(value: any): string { | 
					
						
							| 
									
										
										
										
											2018-01-08 21:57:50 -08:00
										 |  |  |   if (value && value.native && value.native.outerHTML) { | 
					
						
							|  |  |  |     return value.native.outerHTML; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return typeof value === 'string' ? `"${value}"` : value; | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  | export function assertNumber(actual: any, name: string) { | 
					
						
							|  |  |  |   (typeof actual != 'number') && assertThrow(actual, 'number', name, 'typeofr =='); | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function assertEqual<T>( | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  |     actual: T, expected: T, name: string, serializer?: ((v: T) => string)) { | 
					
						
							|  |  |  |   (actual != expected) && assertThrow(actual, expected, name, '==', serializer); | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  | export function assertLessThan<T>(actual: T, expected: T, name: string) { | 
					
						
							|  |  |  |   (actual < expected) && assertThrow(actual, expected, name, '>'); | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  | export function assertNotNull<T>(actual: T, name: string) { | 
					
						
							|  |  |  |   assertNotEqual(actual, null, name); | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  | export function assertNotEqual<T>(actual: T, expected: T, name: string) { | 
					
						
							|  |  |  |   (actual == expected) && assertThrow(actual, expected, name, '!='); | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Throws an error with a message constructed from the arguments. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-12-13 16:32:21 -08:00
										 |  |  |  * @param actual The actual value (e.g. 3) | 
					
						
							|  |  |  |  * @param expected The expected value (e.g. 5) | 
					
						
							|  |  |  |  * @param name The name of the value being checked (e.g. attrs.length) | 
					
						
							|  |  |  |  * @param operator The comparison operator (e.g. <, >, ==) | 
					
						
							|  |  |  |  * @param serializer Function that maps a value to its display value | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | export function assertThrow<T>( | 
					
						
							| 
									
										
										
										
											2017-12-13 11:00:28 -08:00
										 |  |  |     actual: T, expected: T, name: string, operator: string, | 
					
						
							|  |  |  |     serializer: ((v: T) => string) = stringifyValueForError): never { | 
					
						
							| 
									
										
										
										
											2018-01-08 21:57:50 -08:00
										 |  |  |   const error = | 
					
						
							|  |  |  |       `ASSERT: expected ${name} ${operator} ${serializer(expected)} but was ${serializer(actual)}!`; | 
					
						
							|  |  |  |   debugger;  // leave `debugger` here to aid in debugging.
 | 
					
						
							|  |  |  |   throw new Error(error); | 
					
						
							| 
									
										
										
										
											2017-12-01 14:23:03 -08:00
										 |  |  | } |