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; }
private Object[] nextArgs(Iterator[] iterators) { if (runStatus != OK) return null; Object[] next = new Object[iterators.length]; for (int i = 0; i < iterators.length; i++) try { next[i] = iterators[i].next(); } catch (Throwable t) { runStatus = supervisor.error( new ErrorInfo(currentFeature.getDataProviders().get(i).getDataProviderMethod(), t)); return null; } try { return (Object[])invokeRaw(sharedInstance, currentFeature.getDataProcessorMethod(), next); } catch (Throwable t) { runStatus = supervisor.error( new ErrorInfo(currentFeature.getDataProcessorMethod(), t)); return null; } } }