Added reporting of console.log from editor. Refactored a little.
This commit is contained in:
committed by
Mrugesh Mohapatra
parent
eda96e7cad
commit
2529e6533c
@ -25,6 +25,9 @@ import {
|
|||||||
challengeTestsSelector,
|
challengeTestsSelector,
|
||||||
initConsole,
|
initConsole,
|
||||||
updateConsole,
|
updateConsole,
|
||||||
|
initLogs,
|
||||||
|
updateLogs,
|
||||||
|
logsToConsole,
|
||||||
checkChallenge,
|
checkChallenge,
|
||||||
updateTests,
|
updateTests,
|
||||||
disableJSOnError,
|
disableJSOnError,
|
||||||
@ -72,7 +75,13 @@ function executeChallengeEpic(action$, { getState }, { document }) {
|
|||||||
filter(Boolean),
|
filter(Boolean),
|
||||||
switchMap(() => {
|
switchMap(() => {
|
||||||
const frameReady = new Subject();
|
const frameReady = new Subject();
|
||||||
const frameTests = createTestFramer(document, getState, frameReady);
|
const proxyLogger = new Subject();
|
||||||
|
const frameTests = createTestFramer(
|
||||||
|
document,
|
||||||
|
getState,
|
||||||
|
frameReady,
|
||||||
|
proxyLogger
|
||||||
|
);
|
||||||
const challengeResults = frameReady.pipe(
|
const challengeResults = frameReady.pipe(
|
||||||
pluck('checkChallengePayload'),
|
pluck('checkChallengePayload'),
|
||||||
map(checkChallengePayload => ({
|
map(checkChallengePayload => ({
|
||||||
@ -82,6 +91,7 @@ function executeChallengeEpic(action$, { getState }, { document }) {
|
|||||||
switchMap(({ checkChallengePayload, tests }) => {
|
switchMap(({ checkChallengePayload, tests }) => {
|
||||||
const postTests = of(
|
const postTests = of(
|
||||||
updateConsole('// tests completed'),
|
updateConsole('// tests completed'),
|
||||||
|
logsToConsole('// console output'),
|
||||||
checkChallenge(checkChallengePayload)
|
checkChallenge(checkChallengePayload)
|
||||||
).pipe(delay(250));
|
).pipe(delay(250));
|
||||||
return runTestsInTestFrame(document, tests).pipe(
|
return runTestsInTestFrame(document, tests).pipe(
|
||||||
@ -104,23 +114,24 @@ function executeChallengeEpic(action$, { getState }, { document }) {
|
|||||||
switchMap(() => {
|
switchMap(() => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const { challengeType } = challengeMetaSelector(state);
|
const { challengeType } = challengeMetaSelector(state);
|
||||||
if (challengeType === backend) {
|
const build =
|
||||||
return buildBackendChallenge(state).pipe(
|
challengeType === backend
|
||||||
tap(frameTests),
|
? buildBackendChallenge(state)
|
||||||
ignoreElements(),
|
: buildFromFiles(state, true);
|
||||||
startWith(initConsole('// running test')),
|
return build.pipe(
|
||||||
catchError(err => of(disableJSOnError(err)))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return buildFromFiles(state, false).pipe(
|
|
||||||
tap(frameTests),
|
tap(frameTests),
|
||||||
ignoreElements(),
|
ignoreElements(),
|
||||||
startWith(initConsole('// running test')),
|
startWith(initLogs()),
|
||||||
|
startWith(initConsole('// running tests')),
|
||||||
catchError(err => of(disableJSOnError(err)))
|
catchError(err => of(disableJSOnError(err)))
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
return merge(buildAndFrameChallenge, challengeResults);
|
return merge(
|
||||||
|
buildAndFrameChallenge,
|
||||||
|
challengeResults,
|
||||||
|
proxyLogger.map(updateLogs)
|
||||||
|
);
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,7 @@ export const types = createTypes(
|
|||||||
'createQuestion',
|
'createQuestion',
|
||||||
'initTests',
|
'initTests',
|
||||||
'initConsole',
|
'initConsole',
|
||||||
|
'initLogs',
|
||||||
'updateConsole',
|
'updateConsole',
|
||||||
'updateChallengeMeta',
|
'updateChallengeMeta',
|
||||||
'updateFile',
|
'updateFile',
|
||||||
@ -55,6 +56,9 @@ export const types = createTypes(
|
|||||||
'updateProjectFormValues',
|
'updateProjectFormValues',
|
||||||
'updateSuccessMessage',
|
'updateSuccessMessage',
|
||||||
'updateTests',
|
'updateTests',
|
||||||
|
'updateLogs',
|
||||||
|
|
||||||
|
'logsToConsole',
|
||||||
|
|
||||||
'lockCode',
|
'lockCode',
|
||||||
'unlockCode',
|
'unlockCode',
|
||||||
@ -95,15 +99,19 @@ export const initTests = createAction(types.initTests);
|
|||||||
export const updateTests = createAction(types.updateTests);
|
export const updateTests = createAction(types.updateTests);
|
||||||
|
|
||||||
export const initConsole = createAction(types.initConsole);
|
export const initConsole = createAction(types.initConsole);
|
||||||
|
export const initLogs = createAction(types.initLogs);
|
||||||
export const updateChallengeMeta = createAction(types.updateChallengeMeta);
|
export const updateChallengeMeta = createAction(types.updateChallengeMeta);
|
||||||
export const updateFile = createAction(types.updateFile);
|
export const updateFile = createAction(types.updateFile);
|
||||||
export const updateConsole = createAction(types.updateConsole);
|
export const updateConsole = createAction(types.updateConsole);
|
||||||
|
export const updateLogs = createAction(types.updateLogs);
|
||||||
export const updateJSEnabled = createAction(types.updateJSEnabled);
|
export const updateJSEnabled = createAction(types.updateJSEnabled);
|
||||||
export const updateProjectFormValues = createAction(
|
export const updateProjectFormValues = createAction(
|
||||||
types.updateProjectFormValues
|
types.updateProjectFormValues
|
||||||
);
|
);
|
||||||
export const updateSuccessMessage = createAction(types.updateSuccessMessage);
|
export const updateSuccessMessage = createAction(types.updateSuccessMessage);
|
||||||
|
|
||||||
|
export const logsToConsole = createAction(types.logsToConsole);
|
||||||
|
|
||||||
export const lockCode = createAction(types.lockCode);
|
export const lockCode = createAction(types.lockCode);
|
||||||
export const unlockCode = createAction(types.unlockCode);
|
export const unlockCode = createAction(types.unlockCode);
|
||||||
export const disableJSOnError = createAction(types.disableJSOnError);
|
export const disableJSOnError = createAction(types.disableJSOnError);
|
||||||
@ -174,7 +182,22 @@ export const reducer = handleActions(
|
|||||||
...state,
|
...state,
|
||||||
consoleOut: state.consoleOut + '\n' + payload
|
consoleOut: state.consoleOut + '\n' + payload
|
||||||
}),
|
}),
|
||||||
|
[types.initLogs]: state => ({
|
||||||
|
...state,
|
||||||
|
logsOut: []
|
||||||
|
}),
|
||||||
|
[types.updateLogs]: (state, { payload }) => ({
|
||||||
|
...state,
|
||||||
|
logsOut: [...state.logsOut, payload]
|
||||||
|
}),
|
||||||
|
[types.logsToConsole]: (state, { payload }) => ({
|
||||||
|
...state,
|
||||||
|
consoleOut:
|
||||||
|
state.consoleOut +
|
||||||
|
(state.logsOut.length
|
||||||
|
? '\n' + payload + '\n' + state.logsOut.join('\n')
|
||||||
|
: '')
|
||||||
|
}),
|
||||||
[types.updateChallengeMeta]: (state, { payload }) => ({
|
[types.updateChallengeMeta]: (state, { payload }) => ({
|
||||||
...state,
|
...state,
|
||||||
challengeMeta: { ...payload }
|
challengeMeta: { ...payload }
|
||||||
|
@ -140,11 +140,12 @@ export const createMainFramer = (document, getState, proxyLogger) =>
|
|||||||
writeContentToFrame
|
writeContentToFrame
|
||||||
);
|
);
|
||||||
|
|
||||||
export const createTestFramer = (document, getState, frameReady) =>
|
export const createTestFramer = (document, getState, frameReady, proxyLogger) =>
|
||||||
flow(
|
flow(
|
||||||
createFrame(document, getState, testId),
|
createFrame(document, getState, testId),
|
||||||
mountFrame(document),
|
mountFrame(document),
|
||||||
addDepsToDocument,
|
addDepsToDocument,
|
||||||
writeTestDepsToDocument(frameReady),
|
writeTestDepsToDocument(frameReady),
|
||||||
|
buildProxyConsole(proxyLogger),
|
||||||
writeContentToFrame
|
writeContentToFrame
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user