blob: 440831af2f03c09194b113036f0901d5fe636e6d [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.base.test.params;
import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;
import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter;
import java.util.List;
/**
* Abstract base class for rules that are applied to test methods using
* {@link org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter method parameters}.
*/
public abstract class MethodParamRule implements MethodRule {
@Override
public Statement apply(final Statement base, FrameworkMethod method, Object target) {
UseMethodParameter useParameterProvider = method.getAnnotation(UseMethodParameter.class);
if (useParameterProvider == null) return base;
Class<? extends ParameterProvider> parameterProvider = useParameterProvider.value();
if (!(method instanceof ParameterizedFrameworkMethod)) return base;
ParameterSet parameters = ((ParameterizedFrameworkMethod) method).getParameterSet();
List<Object> values = parameters.getValues();
return applyParameterAndValues(base, target, parameterProvider, values);
}
protected abstract Statement applyParameterAndValues(final Statement base, Object target,
Class<? extends ParameterProvider> parameterProvider, List<Object> values);
}