feat(client): make all sources available in tests (#44725)
* feat: make all sources available in tests The original contents of all files (index.html, script.js etc.) will be accessible in tests. For example __sources['index.html'] gets the original html file and nothing else. * feat: use __file to get user code
This commit is contained in:
committed by
GitHub
parent
137edc2fb3
commit
cde1407f58
@ -26,6 +26,7 @@ export interface InitTestFrameArg {
|
|||||||
code: {
|
code: {
|
||||||
contents?: string;
|
contents?: string;
|
||||||
editableContents?: string;
|
editableContents?: string;
|
||||||
|
original?: { [id: string]: string };
|
||||||
};
|
};
|
||||||
getUserInput?: (fileName: string) => string;
|
getUserInput?: (fileName: string) => string;
|
||||||
loadEnzyme?: () => void;
|
loadEnzyme?: () => void;
|
||||||
@ -33,6 +34,14 @@ export interface InitTestFrameArg {
|
|||||||
|
|
||||||
async function initTestFrame(e: InitTestFrameArg = { code: {} }) {
|
async function initTestFrame(e: InitTestFrameArg = { code: {} }) {
|
||||||
const code = (e.code.contents || '').slice();
|
const code = (e.code.contents || '').slice();
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
const __file = (id?: string) => {
|
||||||
|
if (id && e.code.original) {
|
||||||
|
return e.code.original[id];
|
||||||
|
} else {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
};
|
||||||
const editableContents = (e.code.editableContents || '').slice();
|
const editableContents = (e.code.editableContents || '').slice();
|
||||||
// __testEditable allows test authors to run tests against a transitory dom
|
// __testEditable allows test authors to run tests against a transitory dom
|
||||||
// element built using only the code in the editable region.
|
// element built using only the code in the editable region.
|
||||||
|
@ -63,6 +63,7 @@ interface TestEvaluatorEvent extends MessageEvent {
|
|||||||
code: {
|
code: {
|
||||||
contents: string;
|
contents: string;
|
||||||
editableContents: string;
|
editableContents: string;
|
||||||
|
original: { [id: string]: string };
|
||||||
};
|
};
|
||||||
removeComments: boolean;
|
removeComments: boolean;
|
||||||
firstTest: unknown;
|
firstTest: unknown;
|
||||||
|
@ -47,10 +47,12 @@ function buildSourceMap(challengeFiles) {
|
|||||||
const source = challengeFiles.reduce(
|
const source = challengeFiles.reduce(
|
||||||
(sources, challengeFile) => {
|
(sources, challengeFile) => {
|
||||||
sources.index += challengeFile.source || challengeFile.contents;
|
sources.index += challengeFile.source || challengeFile.contents;
|
||||||
|
sources.contents = sources.index;
|
||||||
|
sources.original[challengeFile.history[0]] = challengeFile.source;
|
||||||
sources.editableContents += challengeFile.editableContents || '';
|
sources.editableContents += challengeFile.editableContents || '';
|
||||||
return sources;
|
return sources;
|
||||||
},
|
},
|
||||||
{ index: '', editableContents: '' }
|
{ index: '', editableContents: '', original: {} }
|
||||||
);
|
);
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
@ -111,15 +111,13 @@ const initTestFrame = frameReady => ctx => {
|
|||||||
waitForFrame(ctx)
|
waitForFrame(ctx)
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
const { sources, loadEnzyme } = ctx;
|
const { sources, loadEnzyme } = ctx;
|
||||||
// default for classic challenges
|
|
||||||
// should not be used for modern
|
|
||||||
const code = {
|
|
||||||
contents: sources.index,
|
|
||||||
editableContents: sources.editableContents
|
|
||||||
};
|
|
||||||
// provide the file name and get the original source
|
// provide the file name and get the original source
|
||||||
const getUserInput = fileName => toString(sources[fileName]);
|
const getUserInput = fileName => toString(sources[fileName]);
|
||||||
await ctx.document.__initTestFrame({ code, getUserInput, loadEnzyme });
|
await ctx.document.__initTestFrame({
|
||||||
|
code: sources,
|
||||||
|
getUserInput,
|
||||||
|
loadEnzyme
|
||||||
|
});
|
||||||
frameReady();
|
frameReady();
|
||||||
})
|
})
|
||||||
.catch(handleDocumentNotFound);
|
.catch(handleDocumentNotFound);
|
||||||
|
@ -675,7 +675,11 @@ async function initializeTestRunner(build, sources, code, loadEnzyme) {
|
|||||||
await page.evaluate(
|
await page.evaluate(
|
||||||
async (code, sources, loadEnzyme) => {
|
async (code, sources, loadEnzyme) => {
|
||||||
const getUserInput = fileName => sources[fileName];
|
const getUserInput = fileName => sources[fileName];
|
||||||
await document.__initTestFrame({ code, getUserInput, loadEnzyme });
|
await document.__initTestFrame({
|
||||||
|
code: sources,
|
||||||
|
getUserInput,
|
||||||
|
loadEnzyme
|
||||||
|
});
|
||||||
},
|
},
|
||||||
code,
|
code,
|
||||||
sources,
|
sources,
|
||||||
|
Reference in New Issue
Block a user