angular-cn/packages/compiler-cli/integrationtest/test/source_map_spec.ts

42 lines
1.4 KiB
TypeScript
Raw Normal View History

/**
* @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];
}