| 
									
										
										
										
											2019-01-28 21:59:25 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							| 
									
										
										
										
											2020-05-19 12:08:49 -07:00
										 |  |  |  * Copyright Google LLC All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2019-01-28 21:59:25 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | /* tslint:disable:no-console  */ | 
					
						
							| 
									
										
										
										
											2020-04-13 16:40:21 -07:00
										 |  |  | import {logging, WebDriver} from 'selenium-webdriver'; | 
					
						
							| 
									
										
										
										
											2019-01-28 21:59:25 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | declare var browser: WebDriver; | 
					
						
							|  |  |  | declare var expect: any; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TODO (juliemr): remove this method once this becomes a protractor plugin
 | 
					
						
							|  |  |  | export async function verifyNoBrowserErrors() { | 
					
						
							|  |  |  |   const browserLog = await browser.manage().logs().get('browser'); | 
					
						
							|  |  |  |   const collectedErrors: any[] = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   browserLog.forEach(logEntry => { | 
					
						
							|  |  |  |     const msg = logEntry.message; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Since we currently use the `ts_devserver` from the Bazel TypeScript rules, which does
 | 
					
						
							|  |  |  |     // fallback to the "index.html" file for HTML5 pushState routing but does always serve the
 | 
					
						
							|  |  |  |     // expected fallback with a 404 status code, the browser will print a message about the 404,
 | 
					
						
							|  |  |  |     // while the page loaded properly. Ideally the "ts_devserver" would allow us to opt-in for
 | 
					
						
							|  |  |  |     // just returning a 200 status code, but the devserver is intended to be kept manually, so
 | 
					
						
							|  |  |  |     // we manually filter this error before ensuring there are no console errors.
 | 
					
						
							|  |  |  |     // TODO: This is a current limitation of using the "ts_devserver" with Angular routing.
 | 
					
						
							|  |  |  |     // Tracked with: TOOL-629
 | 
					
						
							|  |  |  |     if (msg.includes( | 
					
						
							|  |  |  |             `Failed to load resource: the server responded with a status of 404 (Not Found)`)) { | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     console.log('>> ' + msg, logEntry); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (logEntry.level.value >= logging.Level.INFO.value) { | 
					
						
							|  |  |  |       collectedErrors.push(msg); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   expect(collectedErrors).toEqual([]); | 
					
						
							|  |  |  | } |