/** * Powerunit - A JDK1.8 test framework * Copyright (C) 2014 Mathieu Boretti. * * This file is part of Powerunit * * Powerunit is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Powerunit is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Powerunit. If not, see <http://www.gnu.org/licenses/>. */ package ch.powerunit; import java.util.Comparator; import java.util.function.BiFunction; import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collector; import org.hamcrest.Matcher; import ch.powerunit.bifunction.BiFunctionTester; import ch.powerunit.bifunction.lang.BiFunctionTesterStartDSL; import ch.powerunit.collector.CollectorTester; import ch.powerunit.collector.lang.CollectorTesterDSL0; import ch.powerunit.comparator.ComparatorTester; import ch.powerunit.comparator.lang.ComparatorTesterDSLStart; import ch.powerunit.function.FunctionTester; import ch.powerunit.function.lang.FunctionTesterStartDSL; import ch.powerunit.matchers.MatcherTester; import ch.powerunit.matchers.lang.MatcherTesterDSL1; import ch.powerunit.pattern.PatternTester; import ch.powerunit.pattern.lang.PatternTester0; /** * This is the interface for the test support. * * @author borettim * @since 0.3.0 */ interface TestFrameworkSupport { /** * Start the creation of a tester definition for a matcher. * <p> * <b>{@link ch.powerunit.matchers.MatcherTester#of(Class) Please refer to * the complete documentation}</b> * * @param matcherClass * the class of the Matcher. * @return {@link ch.powerunit.matchers.lang.MatcherTesterDSL1 The DSL} * @see ch.powerunit.matchers.MatcherTester#of(Class) * @see ch.powerunit.TestDelegate * @since 0.3.0 * @param <T> * The matcher class */ default <T extends Matcher<?>> MatcherTesterDSL1<T> testerOfMatcher( Class<T> matcherClass) { return MatcherTester.of(matcherClass); } /** * Use this method to start the DSL to test a comparator. * <p> * <b>{@link ch.powerunit.comparator.ComparatorTester#of(Class) Please refer * to the complete documentation}</b> <br> * For example : * * <pre> * @TestDelegate * public final ComparatorTester<Integer, MyComparator> direct = testerOfComparator( * MyComparator.class).withLessSamples(-6).withEqualSamples(12) * .withGreaterSamples(16).build(); * </pre> * * @param comparatorClass * the class of the Comparator * @return {@link ch.powerunit.comparator.lang.ComparatorTesterDSLStart the * DSL} * @see ch.powerunit.comparator.ComparatorTester#of(Class) * @see ch.powerunit.TestDelegate * @since 0.3.0 * @param <O> * The object of the comparator * @param <C> * The comparator undertest */ default <O, C extends Comparator<O>> ComparatorTesterDSLStart<O, C> testerOfComparator( Class<C> comparatorClass) { return ComparatorTester.of(comparatorClass); } /** * Use this method to start the DSL to test a function. * <p> * <b>{@link ch.powerunit.function.FunctionTester#of(Function) Please refer * to the complete documentation}</b> * * @param functionUnderTest * the function to be tested * @return {@link ch.powerunit.function.lang.FunctionTesterStartDSL the DSL} * @see ch.powerunit.function.FunctionTester#of(Function) * @see ch.powerunit.TestDelegate * @since 0.3.0 * @param <T> * The input argument type * @param <R> * The result type */ default <T, R> FunctionTesterStartDSL<T, R> testerOfFunction( Function<T, R> functionUnderTest) { return FunctionTester.of(functionUnderTest); } /** * Use this method to start the DSL to test a bifunction. * <p> * <b>{@link ch.powerunit.bifunction.BiFunctionTester#of(BiFunction) Please * refer to the complete documentation}</b> <br> * For example : * * <pre> * @TestDelegate * public final BiFunctionTester<Short, Integer, Long> tester1 = testerOfBiFunction( * this::bifunctionToBeTested).passingAsParameter((short) 1, 2) * .thenExpectingResult(3l).testNamed("tested") * .passingAsParameter((short) 2, 4).thenExpectingResult(6l).build(); * </pre> * * @param bifunctionUnderTest * the bifunction to be tested * @return {@link ch.powerunit.bifunction.lang.BiFunctionTesterStartDSL the * DSL} * @see ch.powerunit.bifunction.BiFunctionTester#of(BiFunction) * @see ch.powerunit.TestDelegate * @since 0.3.0 * @param <T> * The first input argument type * @param <U> * the second input argument type * @param <R> * The result type */ default <T, U, R> BiFunctionTesterStartDSL<T, U, R> testerOfBiFunction( BiFunction<T, U, R> bifunctionUnderTest) { return BiFunctionTester.of(bifunctionUnderTest); } /** * Start the DSL to create a tester of Pattern, based on a String. * <p> * The passed String will be compiled as a Pattern. <br> * For instance : * * <pre> * @TestDelegate * public final PatternTester sample1 = testerOfPattern("a+").receiving("b") * .thenNoMatching().receiving("aa").thenMatching().build(); * </pre> * * @param pattern * the pattern, as a String * @return {@link PatternTester0#receiving(String) The next step of the * DSL.} * @see #testerOfPattern(Pattern) * @see ch.powerunit.pattern.PatternTester * @since 0.4.0 */ default PatternTester0 testerOfPattern(String pattern) { return PatternTester.of(pattern); } /** * Start the DSL to create a tester of Pattern, based on a String. * <p> * For instance : * * <pre> * @TestDelegate * public final PatternTester sample1 = testerOfPattern(Pattern.compile("a+")) * .receiving("b").thenNoMatching().receiving("aa").thenMatching().build(); * </pre> * * @param pattern * the pattern. * @return {@link PatternTester0#receiving(String) The next step of the * DSL.} * @see ch.powerunit.pattern.PatternTester * @since 0.4.0 */ default PatternTester0 testerOfPattern(Pattern pattern) { return PatternTester.of(pattern); } /** * Return a builder to create a tester of {@link java.util.stream.Collector * Collector}. * <p> * <b>{@link ch.powerunit.collector.CollectorTester The documentation of the * tester for the exact that are applied.}</b> * * @param collectorToTest * the {@link java.util.stream.Collector Collector} to be tested. * @param <T> * the input type of the {@link java.util.stream.Collector * Collector} . * * @param <R> * the return type of the {@link java.util.stream.Collector * Collector}. * @return {@link CollectorTesterDSL0 the DSL to build the tester} * @since 0.4.0 * @see #testerOfCollector(Class, Class, Collector) */ default <T, R> CollectorTesterDSL0<T, ?, R> testerOfCollector( Collector<T, ?, R> collectorToTest) { return CollectorTester.of(collectorToTest); } /** * Return a builder to create a tester of {@link java.util.stream.Collector * Collector}. * <p> * <b>{@link ch.powerunit.collector.CollectorTester The documentation of the * tester for the exact that are applied.}</b> * * @param inputClass * the class of the input of the * {@link java.util.stream.Collector Collector}. * @param outputClass * the class of the output of the * {@link java.util.stream.Collector Collector}. * @param collectorToTest * the {@link java.util.stream.Collector Collector} to be tested. * @param <T> * the input type of the {@link java.util.stream.Collector * Collector}. * * @param <R> * the return type of the {@link java.util.stream.Collector * Collector}. * @return {@link CollectorTesterDSL0 the DSL to build the tester} * @since 0.4.0 * @see #testerOfCollector(Collector) */ default <T, R> CollectorTesterDSL0<T, ?, R> testerOfCollector( Class<T> inputClass, Class<T> outputClass, Collector<T, ?, R> collectorToTest) { return CollectorTester.of(collectorToTest); } }