Extract test helpers in sourcemap tests

pull/5584/head
halfnelson 5 years ago
parent c7f8749b92
commit 9583d72c92

@ -0,0 +1,20 @@
import MagicString from 'magic-string';
export function magic_string_preprocessor_result(filename: string, src: MagicString) {
return {
code: src.toString(),
map: src.generateMap({
source: filename,
hires: true,
includeContent: false
})
};
}
export function magic_string_replace_all(src: MagicString, search: string, replace: string) {
let idx = src.original.indexOf(search);
if (idx == -1) throw new Error('search not found in src');
do {
src.overwrite(idx, idx + search.length, replace, { storeName: true });
} while ((idx = src.original.indexOf(search, idx + 1)) != -1);
}

@ -1,25 +1,5 @@
import MagicString from 'magic-string'; import MagicString from 'magic-string';
import { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers';
// TODO move util fns to test index.js
function result(filename, src) {
return {
code: src.toString(),
map: src.generateMap({
source: filename,
hires: true,
includeContent: false
})
};
}
function replace_all(src, search, replace) {
let idx = src.original.indexOf(search);
if (idx == -1) throw new Error('search not found in src');
do {
src.overwrite(idx, idx + search.length, replace);
} while ((idx = src.original.indexOf(search, idx + 1)) != -1);
}
export default { export default {
compile_options: { compile_options: {
@ -28,14 +8,14 @@ export default {
preprocess: [ preprocess: [
{ style: ({ content, filename }) => { { style: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
replace_all(src, '--replace-me-once', '\n --done-replace-once'); magic_string_replace_all(src, '--replace-me-once', '\n --done-replace-once');
replace_all(src, '--replace-me-twice', '\n--almost-done-replace-twice'); magic_string_replace_all(src, '--replace-me-twice', '\n--almost-done-replace-twice');
return result(filename, src); return magic_string_preprocessor_result(filename, src);
} }, } },
{ style: ({ content, filename }) => { { style: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
replace_all(src, '--almost-done-replace-twice', '\n --done-replace-twice'); magic_string_replace_all(src, '--almost-done-replace-twice', '\n --done-replace-twice');
return result(filename, src); return magic_string_preprocessor_result(filename, src);
} } } }
] ]
}; };

@ -4,7 +4,7 @@ const b64dec = s => Buffer.from(s, 'base64').toString();
export async function test({ assert, css, js }) { export async function test({ assert, css, js }) {
//We check that the css source map embedded in the js is accurate // We check that the css source map embedded in the js is accurate
const match = js.code.match(/\tstyle\.textContent = "(.*?)(?:\\n\/\*# sourceMappingURL=data:(.*?);charset=(.*?);base64,(.*?) \*\/)?";\n/); const match = js.code.match(/\tstyle\.textContent = "(.*?)(?:\\n\/\*# sourceMappingURL=data:(.*?);charset=(.*?);base64,(.*?) \*\/)?";\n/);
assert.notEqual(match, null); assert.notEqual(match, null);

@ -1,22 +1,5 @@
import MagicString from 'magic-string'; import MagicString from 'magic-string';
import { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers';
function replace(search, replace, content, src, options = {}) {
let idx = -1;
while ((idx = content.indexOf(search, idx + 1)) != -1) {
src.overwrite(idx, idx + search.length, replace, options);
}
}
function result(src, filename) {
return {
code: src.toString(),
map: src.generateDecodedMap({ // return decoded sourcemap
source: filename,
hires: true,
includeContent: false
})
};
}
export default { export default {
@ -25,8 +8,8 @@ export default {
preprocess: { preprocess: {
markup: ({ content, filename }) => { markup: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
replace('replace me', 'success', content, src); magic_string_replace_all(src, 'replace me', 'success');
return result(src, filename); return magic_string_preprocessor_result(filename, src);
} }
} }
}; };

@ -11,7 +11,7 @@ export function test({ assert, input, preprocessed }) {
assert.deepEqual(actualbar, { assert.deepEqual(actualbar, {
source: 'input.svelte', source: 'input.svelte',
name: null, name: 'replace me',
line: expected.line + 1, line: expected.line + 1,
column: expected.column column: expected.column
}); });

@ -1,18 +1,12 @@
import MagicString from 'magic-string'; import MagicString from 'magic-string';
import { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers';
export default { export default {
preprocess: { preprocess: {
markup: ({ content, filename }) => { markup: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
const idx = content.indexOf('baritone'); magic_string_replace_all(src, 'baritone', 'bar');
src.overwrite(idx, idx+'baritone'.length, 'bar'); return magic_string_preprocessor_result(filename, src);
return {
code: src.toString(),
map: src.generateDecodedMap({
source: filename,
includeContent: false
})
};
} }
} }
}; };

@ -11,7 +11,7 @@ export function test({ assert, input, js }) {
assert.deepEqual(actualbar, { assert.deepEqual(actualbar, {
source: 'input.svelte', source: 'input.svelte',
name: null, name: 'baritone',
line: expectedBar.line + 1, line: expectedBar.line + 1,
column: expectedBar.column column: expectedBar.column
}); });

@ -1,48 +1,25 @@
import MagicString from 'magic-string'; import MagicString from 'magic-string';
import { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers';
export default { export default {
preprocess: { preprocess: {
markup: ({ content, filename }) => { markup: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
const idx = content.indexOf('baritone'); magic_string_replace_all(src, 'baritone', 'bar');
src.overwrite(idx, idx + 'baritone'.length, 'bar'); magic_string_replace_all(src, '--bazitone', '--baz');
return magic_string_preprocessor_result(filename, src);
const css_idx = content.indexOf('--bazitone');
src.overwrite(css_idx, css_idx + '--bazitone'.length, '--baz');
return {
code: src.toString(),
map: src.generateDecodedMap({
source: filename,
hires: true,
includeContent: false
})
};
}, },
script: ({ content, filename }) => { script: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
const idx = content.indexOf('bar'); const idx = content.indexOf('bar');
src.prependLeft(idx, ' '); src.prependLeft(idx, ' ');
return { return magic_string_preprocessor_result(filename, src);
code: src.toString(),
map: src.generateDecodedMap({
source: filename,
hires: true,
includeContent: false
})
};
}, },
style: ({ content, filename }) => { style: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
const idx = content.indexOf('--baz'); const idx = content.indexOf('--baz');
src.prependLeft(idx, ' '); src.prependLeft(idx, ' ');
return { return magic_string_preprocessor_result(filename, src);
code: src.toString(),
map: src.generateDecodedMap({
source: filename,
hires: true,
includeContent: false
})
};
} }
} }
}; };

@ -11,7 +11,7 @@ export function test({ assert, input, js, css }) {
assert.deepEqual(actualbar, { assert.deepEqual(actualbar, {
source: 'input.svelte', source: 'input.svelte',
name: null, name: 'baritone',
line: expectedBar.line + 1, line: expectedBar.line + 1,
column: expectedBar.column column: expectedBar.column
}); });
@ -25,13 +25,8 @@ export function test({ assert, input, js, css }) {
assert.deepEqual(actualbaz, { assert.deepEqual(actualbaz, {
source: 'input.svelte', source: 'input.svelte',
name: null, name: '--bazitone',
line: expectedBaz.line + 1, line: expectedBaz.line + 1,
column: expectedBaz.column column: expectedBaz.column
}, `\ });
couldn't find baz in css,
gen: ${JSON.stringify(start)}
actual: ${JSON.stringify(actualbaz)}
expected: ${JSON.stringify(expectedBaz)}\
`);
} }

@ -1,19 +1,12 @@
import MagicString from 'magic-string'; import MagicString from 'magic-string';
import { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers';
export default { export default {
preprocess: { preprocess: {
script: ({ content, filename }) => { script: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
const idx = content.indexOf('baritone'); magic_string_replace_all(src, 'baritone', 'bar');
src.overwrite(idx, idx+'baritone'.length, 'bar'); return magic_string_preprocessor_result(filename, src);
return {
code: src.toString(),
map: src.generateMap({
source: filename,
hires: true,
includeContent: false
})
};
} }
} }
}; };

@ -11,7 +11,7 @@ export function test({ assert, input, js }) {
assert.deepEqual(actualbar, { assert.deepEqual(actualbar, {
source: 'input.svelte', source: 'input.svelte',
name: null, name: 'baritone',
line: expectedBar.line + 1, line: expectedBar.line + 1,
column: expectedBar.column column: expectedBar.column
}, "couldn't find bar: in source"); }, "couldn't find bar: in source");

@ -1,19 +1,12 @@
import MagicString from 'magic-string'; import MagicString from 'magic-string';
import { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers';
export default { export default {
preprocess: { preprocess: {
style: ({ content, filename }) => { style: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
const idx = content.indexOf('baritone'); magic_string_replace_all(src, 'baritone', 'bar');
src.overwrite(idx, idx+'baritone'.length, 'bar'); return magic_string_preprocessor_result(filename, src);
return {
code: src.toString(),
map: src.generateMap({
source: filename,
hires: true,
includeContent: false
})
};
} }
} }
}; };

@ -1,49 +1,32 @@
import MagicString from 'magic-string'; import MagicString from 'magic-string';
import { magic_string_preprocessor_result, magic_string_replace_all } from '../../helpers';
function replace(search, replace, content, src, options = { storeName: true }) {
let idx = -1;
while ((idx = content.indexOf(search, idx + 1)) != -1) {
src.overwrite(idx, idx + search.length, replace, options);
}
}
function result(src, filename) {
return {
code: src.toString(),
map: src.generateDecodedMap({
source: filename,
hires: true,
includeContent: false
})
};
}
export default { export default {
preprocess: [ preprocess: [
{ {
markup: ({ content, filename }) => { markup: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
replace('baritone', 'bar', content, src); magic_string_replace_all(src, 'baritone', 'bar');
replace('--bazitone', '--baz', content, src); magic_string_replace_all(src,'--bazitone', '--baz');
replace('old_name_1', 'temp_new_name_1', content, src); magic_string_replace_all(src,'old_name_1', 'temp_new_name_1');
replace('old_name_2', 'temp_new_name_2', content, src); magic_string_replace_all(src,'old_name_2', 'temp_new_name_2');
return result(src, filename); return magic_string_preprocessor_result(filename, src);
} }
}, },
{ {
markup: ({ content, filename }) => { markup: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
replace('temp_new_name_1', 'temp_temp_new_name_1', content, src); magic_string_replace_all(src, 'temp_new_name_1', 'temp_temp_new_name_1');
replace('temp_new_name_2', 'temp_temp_new_name_2', content, src); magic_string_replace_all(src, 'temp_new_name_2', 'temp_temp_new_name_2');
return result(src, filename); return magic_string_preprocessor_result(filename, src);
} }
}, },
{ {
markup: ({ content, filename }) => { markup: ({ content, filename }) => {
const src = new MagicString(content); const src = new MagicString(content);
replace('temp_temp_new_name_1', 'new_name_1', content, src); magic_string_replace_all(src, 'temp_temp_new_name_1', 'new_name_1');
replace('temp_temp_new_name_2', 'new_name_2', content, src); magic_string_replace_all(src, 'temp_temp_new_name_2', 'new_name_2');
return result(src, filename); return magic_string_preprocessor_result(filename, src);
} }
} }
] ]

@ -1,14 +1,13 @@
// needed for workaround, TODO remove // needed for workaround, TODO remove
import { getLocator } from 'locate-character'; import { getLocator } from 'locate-character';
export function test({ assert, input, preprocessed, js, css }) { export function test({ assert, preprocessed, js, css }) {
assert.deepEqual( assert.deepEqual(
preprocessed.map.names.sort(), preprocessed.map.names.sort(),
['baritone', '--bazitone', 'old_name_1', 'old_name_2'].sort() ['baritone', '--bazitone', 'old_name_1', 'old_name_2'].sort()
); );
// TODO move fn test_name to test/sourcemaps/index.js and use in samples/*/test.js
function test_name(old_name, new_name, where) { function test_name(old_name, new_name, where) {
let loc = { character: -1 }; let loc = { character: -1 };

Loading…
Cancel
Save