/* * Copyright 2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ratpack.test.internal.spock; import org.spockframework.runtime.extension.AbstractAnnotationDrivenExtension; import org.spockframework.runtime.extension.builtin.UnrollNameProvider; import org.spockframework.runtime.model.FeatureInfo; import org.spockframework.runtime.model.IterationInfo; import org.spockframework.runtime.model.NameProvider; import org.spockframework.runtime.model.SpecInfo; public final class InheritedUnrollExtension extends AbstractAnnotationDrivenExtension<InheritedUnroll> { @Override public void visitSpecAnnotation(InheritedUnroll unroll, SpecInfo spec) { spec.getFeatures() .stream() .filter(FeatureInfo::isParameterized) .forEach(feature -> visitFeatureAnnotation(unroll, feature)); } @Override public void visitFeatureAnnotation(InheritedUnroll unroll, FeatureInfo feature) { if (feature.isParameterized()) { feature.setReportIterations(true); feature.setIterationNameProvider(chooseNameProvider(unroll, feature)); } } private NameProvider<IterationInfo> chooseNameProvider(InheritedUnroll unroll, FeatureInfo feature) { if (unroll.value().length() > 0) { return new UnrollNameProvider(feature, unroll.value()); } else if (feature.getName().contains("#")) { return new UnrollNameProvider(feature, feature.getName()); } else { return null; } } }