42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
|
/**
|
||
|
* @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
|
||
|
*/
|
||
|
|
||
|
import './init';
|
||
|
import {BindingErrorComp} from '../src/errors';
|
||
|
import {createComponent} from './util';
|
||
|
|
||
|
describe('source maps', () => {
|
||
|
it('should report source location for binding errors', () => {
|
||
|
const comp = createComponent(BindingErrorComp);
|
||
|
let error: any;
|
||
|
try {
|
||
|
comp.detectChanges();
|
||
|
} catch (e) {
|
||
|
error = e;
|
||
|
}
|
||
|
const sourcePosition = getSourcePositionForStack(error.stack);
|
||
|
expect(sourcePosition.line).toBe(2);
|
||
|
expect(sourcePosition.column).toBe(13);
|
||
|
expect(sourcePosition.source.endsWith('errors.html')).toBe(true);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
function getSourcePositionForStack(stack: string): {source: string, line: number, column: number} {
|
||
|
const htmlLocations = stack
|
||
|
.split('\n')
|
||
|
// e.g. at View_MyComp_0 (...html:153:40)
|
||
|
.map(line => /\((.*\.html):(\d+):(\d+)/.exec(line))
|
||
|
.filter(match => !!match)
|
||
|
.map(match => ({
|
||
|
source: match[1],
|
||
|
line: parseInt(match[2], 10),
|
||
|
column: parseInt(match[3], 10)
|
||
|
}));
|
||
|
return htmlLocations[0];
|
||
|
}
|