| 85 | } |
| 86 | |
| 87 | function delegateScenarios (config) { |
| 88 | const scenarios = []; |
| 89 | const scenarioViews = []; |
| 90 | |
| 91 | config.viewports = config.viewports.map(saveViewportIndexes); |
| 92 | |
| 93 | // casper.each(scenarios, function (casper, scenario, i) { |
| 94 | config.scenarios.forEach(function (scenario, i) { |
| 95 | // var scenarioLabelSafe = makeSafe(scenario.label); |
| 96 | scenario.sIndex = i; |
| 97 | scenario.selectors = scenario.selectors || []; |
| 98 | if (scenario.viewports) { |
| 99 | scenario.viewports = scenario.viewports.map(saveViewportIndexes); |
| 100 | } |
| 101 | scenarios.push(scenario); |
| 102 | |
| 103 | if (!config.isReference && _.has(scenario, 'variants')) { |
| 104 | scenario.variants.forEach(function (variant) { |
| 105 | // var variantLabelSafe = makeSafe(variant.label); |
| 106 | variant._parent = scenario; |
| 107 | scenarios.push(scenario); |
| 108 | }); |
| 109 | } |
| 110 | }); |
| 111 | |
| 112 | let scenarioViewId = 0; |
| 113 | scenarios.forEach(function (scenario) { |
| 114 | let desiredViewportsForScenario = config.viewports; |
| 115 | |
| 116 | if (scenario.viewports && scenario.viewports.length > 0) { |
| 117 | desiredViewportsForScenario = scenario.viewports; |
| 118 | } |
| 119 | |
| 120 | desiredViewportsForScenario.forEach(function (viewport) { |
| 121 | scenarioViews.push({ |
| 122 | scenario, |
| 123 | viewport, |
| 124 | config, |
| 125 | id: scenarioViewId++ |
| 126 | }); |
| 127 | }); |
| 128 | }); |
| 129 | |
| 130 | const asyncCaptureLimit = config.asyncCaptureLimit === 0 ? 1 : config.asyncCaptureLimit || CONCURRENCY_DEFAULT; |
| 131 | |
| 132 | if (config.engine.startsWith('puppet')) { |
| 133 | return pMap(scenarioViews, runPuppet, { concurrency: asyncCaptureLimit }); |
| 134 | } else if (config.engine.startsWith('play')) { |
| 135 | return new Promise((resolve, reject) => { |
| 136 | createPlaywrightBrowser(config).then(browser => { |
| 137 | console.log('Browser created'); |
| 138 | |
| 139 | for (const view of scenarioViews) { |
| 140 | view._playwrightBrowser = browser; |
| 141 | } |
| 142 | |
| 143 | pMap(scenarioViews, runPlaywright, { concurrency: asyncCaptureLimit }).then(out => { |
| 144 | disposePlaywrightBrowser(browser).then(() => resolve(out)); |