@Override protected void runParameterizedFeature() { if (runStatus != OK) return; Object[] dataProviders = createDataProviders(); int numIterations = estimateNumIterations(dataProviders); Iterator[] iterators = createIterators(dataProviders); runIterations(iterators, numIterations); closeDataProviders(dataProviders); }
private void runIterations(Iterator[] iterators, int estimatedNumIterations) { if (runStatus != OK) return; while (haveNext(iterators)) { initializeAndRunIteration(nextArgs(iterators), estimatedNumIterations); if (resetStatus(ITERATION) != OK) break; // no iterators => no data providers => only derived parameterizations => limit to one iteration if(iterators.length == 0) break; } }
@Override public void run(RunNotifier notifier) { runExtensionsIfNecessary(); generateSpecDescriptionIfNecessary(); RunContext.get().createSpecRunner(getSpec(), notifier).run(); }
private Object[] createDataProviders() { if (runStatus != OK) return null; List<DataProviderInfo> dataProviderInfos = currentFeature.getDataProviders(); Object[] dataProviders = new Object[dataProviderInfos.size()]; if (!dataProviderInfos.isEmpty()) { for (int i = 0; i < dataProviderInfos.size(); i++) { DataProviderInfo dataProviderInfo = dataProviderInfos.get(i); MethodInfo method = dataProviderInfo.getDataProviderMethod(); Object[] arguments = Arrays.copyOf(dataProviders, getDataTableOffset(dataProviderInfo)); Object provider = invokeRaw(sharedInstance, method, arguments); if (runStatus != OK) return null; else if (provider == null) { SpockExecutionException error = new SpockExecutionException("Data provider is null!"); runStatus = supervisor.error(new ErrorInfo(method, error)); return null; } dataProviders[i] = provider; } } return dataProviders; }
public ParameterizedSpecRunner createSpecRunner(SpecInfo spec, RunNotifier notifier) { return new ParameterizedSpecRunner(spec, new JUnitSupervisor(spec, notifier, createStackTraceFilter(spec), diffedObjectRenderer)); }
private boolean haveNext(Iterator[] iterators) { if (runStatus != OK) return false; boolean haveNext = true; for (int i = 0; i < iterators.length; i++) try { boolean hasNext = iterators[i].hasNext(); if (i == 0) haveNext = hasNext; else if (haveNext != hasNext) { DataProviderInfo provider = currentFeature.getDataProviders().get(i); runStatus = supervisor.error(new ErrorInfo(provider.getDataProviderMethod(), createDifferentNumberOfDataValuesException(provider, hasNext))); return false; } } catch (Throwable t) { runStatus = supervisor.error( new ErrorInfo(currentFeature.getDataProviders().get(i).getDataProviderMethod(), t)); return false; } return haveNext; }
runExtensionsIfNecessary(); aggregateDescriptionIfNecessary(); RunContext.get().createSpecRunner(getSpec(), notifier).run();
RunContext.get().createSpecRunner(getSpec(), notifier).run();