in x-test.js [480:542]
static registerTest(context, data) {
if (!context.state.ended) {
const testId = data.testId;
// New "test" (to be opened in its own iframe). Queue it up.
const initiatorTestId = data.initiatorTestId;
const siblingTestEndIndex = context.state.stepIds.findLastIndex(candidateId => {
const candidate = context.state.steps[candidateId];
if (candidate.type === 'test-end' && context.state.tests[candidate.testId].initiatorTestId === initiatorTestId) {
return true;
}
});
const parentTestEndIndex = context.state.stepIds.findLastIndex(candidateId => {
const candidate = context.state.steps[candidateId];
if (candidate.type === 'test-end' && context.state.tests[candidate.testId].testId === initiatorTestId) {
return true;
}
});
const coverageIndex = context.state.stepIds.findIndex(candidateId => {
const candidate = context.state.steps[candidateId];
if (candidate.type === 'coverage') {
return true;
}
});
const exitIndex = context.state.stepIds.findLastIndex(candidateId => {
const candidate = context.state.steps[candidateId];
if (candidate.type === 'exit') {
return true;
}
});
const index = siblingTestEndIndex === -1
? parentTestEndIndex === -1
? coverageIndex === -1
? exitIndex
: coverageIndex
: parentTestEndIndex + 1
: siblingTestEndIndex + 1;
const lastSiblingChildrenIndex = context.state.children.findLastIndex(candidate => {
return candidate.type === 'test' && context.state.tests[candidate.testId].initiatorTestId === initiatorTestId;
});
const parentTestChildrenIndex = context.state.children.findLastIndex(candidate => {
return candidate.type === 'test' && context.state.tests[candidate.testId].testId === initiatorTestId;
});
const firstCoverageChildrenIndex = context.state.children.findIndex(candidate => {
return candidate.type === 'coverage';
});
const childrenIndex = lastSiblingChildrenIndex === -1
? parentTestChildrenIndex === -1
? firstCoverageChildrenIndex === -1
? context.state.children.length
: firstCoverageChildrenIndex
: parentTestChildrenIndex + 1
: lastSiblingChildrenIndex + 1;
const testStartStepId = context.uuid();
const testPlanStepId = context.uuid();
const testEndStepId = context.uuid();
context.state.stepIds.splice(index, 0, testStartStepId, testPlanStepId, testEndStepId);
context.state.steps[testStartStepId] = { stepId: testStartStepId, type: 'test-start', testId, status: 'waiting' };
context.state.steps[testPlanStepId] = { stepId: testPlanStepId, type: 'test-plan', testId, status: 'waiting' };
context.state.steps[testEndStepId] = { stepId: testEndStepId, type: 'test-end', testId, status: 'waiting' };
context.state.tests[testId] = { ...data, children: [] };
context.state.children.splice(childrenIndex, 0, { type: 'test', testId });
}
}