angular/modules/playground/e2e_test/sourcemap/sourcemap_spec.ts
Joey Perrott 059fb06b9f build: migrate modules to use @rules_browsers protractor rules (#62342)
Use the protractor rules from `@rules_browsers` for the module directory.

PR Close #62342
2025-06-27 22:27:08 +00:00

52 lines
1.6 KiB
TypeScript

/**
* @license
* Copyright Google LLC 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.dev/license
*/
import {readFileSync} from 'fs';
import {$, browser} from 'protractor';
import {logging} from 'selenium-webdriver';
import {RawSourceMap, SourceMapConsumer} from 'source-map';
import {resolve} from 'path';
describe('sourcemaps', function () {
const URL = '/';
it('should map sources', async function () {
await browser.get(URL);
await $('error-app .errorButton').click();
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
let errorLine: number | null = null;
let errorColumn: number | null = null;
logs.forEach(function (log: any) {
const match = log.message.match(/\.createError\s+\(.+:(\d+):(\d+)/m);
if (match) {
errorLine = parseInt(match[1]);
errorColumn = parseInt(match[2]);
}
});
expect(errorLine).not.toBeNull();
expect(errorColumn).not.toBeNull();
const mapContent = readFileSync(
resolve('./modules/playground/src/sourcemap/bundles/main.js.map'),
'utf-8',
);
const decoder = await new SourceMapConsumer(JSON.parse(mapContent) as RawSourceMap);
const originalPosition = decoder.originalPositionFor({line: errorLine!, column: errorColumn!});
const sourceCodeLines = readFileSync(
resolve('./modules/playground/src/sourcemap/main.ts'),
'utf-8',
).split('\n');
expect(sourceCodeLines[originalPosition.line! - 1]).toMatch(
/throw new Error\(\'Sourcemap test\'\)/,
);
});
});