mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-29 05:34:21 +08:00
This moves the helpers to `testing/` subdirectories, consistent with the TS/JS Style Guide[^1]. [^1]: http://go/tsjs-style#test-file-names DISABLE_THIRD_PARTY_CHECK=Moving unit tests. Bug: 325903709 Change-Id: I5b82c1b00f724776e06f1675eae9c19ff1b4ba7c Doc: http://go/chrome-devtools:move-unit-tests-design Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5317645 Commit-Queue: Philip Pfaffe <pfaffe@chromium.org> Auto-Submit: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Philip Pfaffe <pfaffe@chromium.org>
170 lines
6.1 KiB
TypeScript
170 lines
6.1 KiB
TypeScript
// Copyright 2021 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import * as SourceMapEncoder from './SourceMapEncoder.js';
|
|
|
|
describe('SourceMapEncoder', () => {
|
|
it('translates numbers to Base64 VLQ correctly', () => {
|
|
assert.strictEqual(SourceMapEncoder.encodeVlq(0), 'A');
|
|
assert.strictEqual(SourceMapEncoder.encodeVlq(-2), 'F');
|
|
assert.strictEqual(SourceMapEncoder.encodeVlq(41), 'yC');
|
|
assert.strictEqual(SourceMapEncoder.encodeVlq(-25), 'zB');
|
|
});
|
|
|
|
it('translates number lists correctly', () => {
|
|
// Let us test the cases we care about in source maps.
|
|
|
|
// Encoding of column-only mapping.
|
|
assert.strictEqual('A', SourceMapEncoder.encodeVlqList([0]));
|
|
assert.strictEqual('oG', SourceMapEncoder.encodeVlqList([100]));
|
|
|
|
// Encoding of column => source:line:column mapping.
|
|
assert.strictEqual('w+BoGUwM', SourceMapEncoder.encodeVlqList([1000, 100, 10, 200]));
|
|
assert.strictEqual('DFHJ', SourceMapEncoder.encodeVlqList([-1, -2, -3, -4]));
|
|
|
|
// Encoding of column => source:line:column@name mapping.
|
|
assert.strictEqual('CEGIK', SourceMapEncoder.encodeVlqList([1, 2, 3, 4, 5]));
|
|
assert.strictEqual('qGsGuGwGyG', SourceMapEncoder.encodeVlqList([101, 102, 103, 104, 105]));
|
|
});
|
|
|
|
it('can encode trivial source maps correctly', () => {
|
|
// Test trivial cases.
|
|
assert.deepEqual(
|
|
{
|
|
sources: [],
|
|
names: [],
|
|
mappings: 'A',
|
|
version: 3,
|
|
},
|
|
SourceMapEncoder.encodeSourceMap(['0:0']));
|
|
|
|
assert.deepEqual(
|
|
{
|
|
sources: ['a.js'],
|
|
names: [],
|
|
mappings: 'AAAA',
|
|
version: 3,
|
|
},
|
|
SourceMapEncoder.encodeSourceMap(['0:0 => a.js:0:0']));
|
|
|
|
assert.deepEqual(
|
|
{
|
|
sources: ['a.js'],
|
|
names: ['b'],
|
|
mappings: 'AAAAA',
|
|
version: 3,
|
|
},
|
|
SourceMapEncoder.encodeSourceMap(['0:0 => a.js:0:0@b']));
|
|
});
|
|
|
|
it('can encode multiple lines correctly', () => {
|
|
// Next line encoding.
|
|
assert.strictEqual('AAAA;AACA', SourceMapEncoder.encodeSourceMap(['0:0 => a.js:0:0', '1:0 => a.js:1:0']).mappings);
|
|
assert.strictEqual('A;A', SourceMapEncoder.encodeSourceMap(['0:0', '1:0']).mappings);
|
|
|
|
// Skipping lines.
|
|
assert.strictEqual(';A;;;A', SourceMapEncoder.encodeSourceMap(['1:0', '4:0']).mappings);
|
|
assert.strictEqual(
|
|
';AACA;;;AAEA', SourceMapEncoder.encodeSourceMap(['1:0 => a.js:1:0', '4:0 => a.js:3:0']).mappings);
|
|
});
|
|
|
|
it('can encode relative offset mappings correctly', () => {
|
|
// Relative columns.
|
|
assert.strictEqual(
|
|
'AAAA,EAAI,IAAD',
|
|
SourceMapEncoder.encodeSourceMap(['0:0 => a.js:0:0', '0:2 => a.js:0:4', '0:6 => a.js:0:3']).mappings);
|
|
|
|
// Reset after new line.
|
|
assert.strictEqual(
|
|
'AAAA,EAAC;MAAE',
|
|
SourceMapEncoder.encodeSourceMap(['0:0 => a.js:0:0', '0:2 => a.js:0:1', '1:6 => a.js:0:3']).mappings);
|
|
|
|
// Relative source, source line and source column.
|
|
assert.deepEqual(
|
|
{
|
|
sources: ['a.js', 'b.js', 'c.js'],
|
|
names: [],
|
|
mappings: 'CACC;CCEC;CCFC;CDAH',
|
|
version: 3,
|
|
},
|
|
SourceMapEncoder.encodeSourceMap(['0:1 => a.js:1:1', '1:1 => b.js:3:2', '2:1 => c.js:1:3', '3:1 => b.js:1:0']));
|
|
});
|
|
|
|
it('can encode names correctly', () => {
|
|
assert.deepEqual(
|
|
{
|
|
sources: ['a.js'],
|
|
names: ['a', 'b', 'c'],
|
|
mappings: 'AAAAA;AACAC;AACAC;AACAF',
|
|
version: 3,
|
|
},
|
|
SourceMapEncoder.encodeSourceMap(
|
|
['0:0 => a.js:0:0@a', '1:0 => a.js:1:0@b', '2:0 => a.js:2:0@c', '3:0 => a.js:3:0@a']));
|
|
});
|
|
|
|
it('can encode small realistic samples correctly', () => {
|
|
assert.deepEqual(
|
|
{
|
|
sources: ['example.js'],
|
|
names: ['a', 'b', 'c', 'd'],
|
|
mappings: 'AAASA,QAAAA,IAAG,CAACC,CAAD,CAAaC,CAAb,CACZ,CACI,MAAOD,EAAP,CAAoBC,CADxB,CAIA,IAAIC,OAAS;A',
|
|
version: 3,
|
|
},
|
|
SourceMapEncoder.encodeSourceMap([
|
|
// clang-format off
|
|
'0:0 => example.js:0:9@a',
|
|
'0:8 => example.js:0:9@a',
|
|
'0:12 => example.js:0:12',
|
|
'0:13 => example.js:0:13@b',
|
|
'0:14 => example.js:0:12',
|
|
'0:15 => example.js:0:25@c',
|
|
'0:16 => example.js:0:12',
|
|
'0:17 => example.js:1:0',
|
|
'0:18 => example.js:2:4',
|
|
'0:24 => example.js:2:11@b',
|
|
'0:26 => example.js:2:4',
|
|
'0:27 => example.js:2:24@c',
|
|
'0:28 => example.js:1:0',
|
|
'0:29 => example.js:5:0',
|
|
'0:33 => example.js:5:4@d',
|
|
'0:40 => example.js:5:13',
|
|
'1:0',
|
|
// clang-format on
|
|
]));
|
|
|
|
assert.deepEqual(
|
|
{
|
|
sources: ['sourcemap-stepping-source.js'],
|
|
names: [],
|
|
mappings:
|
|
'AAAA,oCAAoC;;AAEpC;GACG;GAAA;GAAA;GACA;GAAA;GAAA;GACA;GAAA;GAAA;;GAEA;AACH;;AAEA;GACG;GACA;GACA;;GAEA;AACH',
|
|
version: 3,
|
|
},
|
|
SourceMapEncoder.encodeSourceMap([
|
|
// clang-format off
|
|
'0:0 => sourcemap-stepping-source.js:0:0',
|
|
'0:36 => sourcemap-stepping-source.js:0:36',
|
|
'2:0 => sourcemap-stepping-source.js:2:0',
|
|
'3:3 => sourcemap-stepping-source.js:3:3',
|
|
'4:3 => sourcemap-stepping-source.js:3:3',
|
|
'5:3 => sourcemap-stepping-source.js:3:3',
|
|
'6:3 => sourcemap-stepping-source.js:4:3',
|
|
'7:3 => sourcemap-stepping-source.js:4:3',
|
|
'8:3 => sourcemap-stepping-source.js:4:3',
|
|
'9:3 => sourcemap-stepping-source.js:5:3',
|
|
'10:3 => sourcemap-stepping-source.js:5:3',
|
|
'11:3 => sourcemap-stepping-source.js:5:3',
|
|
'13:3 => sourcemap-stepping-source.js:7:3',
|
|
'14:0 => sourcemap-stepping-source.js:8:0',
|
|
'16:0 => sourcemap-stepping-source.js:10:0',
|
|
'17:3 => sourcemap-stepping-source.js:11:3',
|
|
'18:3 => sourcemap-stepping-source.js:12:3',
|
|
'19:3 => sourcemap-stepping-source.js:13:3',
|
|
'21:3 => sourcemap-stepping-source.js:15:3',
|
|
'22:0 => sourcemap-stepping-source.js:16:0',
|
|
// clang-format on
|
|
]));
|
|
});
|
|
});
|