/* * Copyright 2015-2017 the original author or authors. * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html */ package org.junit.jupiter.engine.bridge; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.DynamicTest.dynamicTest; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestFactory; import org.junit.jupiter.engine.AbstractJupiterTestEngineTests; import org.junit.jupiter.engine.bridge.NumberTestGroup.ByteTestCase; import org.junit.jupiter.engine.bridge.NumberTestGroup.ShortTestCase; import org.junit.platform.engine.test.event.ExecutionEventRecorder; /** * @since 5.0 */ class BridgeMethodTests extends AbstractJupiterTestEngineTests { static List<String> sequence = new ArrayList<>(); @Test void childrenHaveBridgeMethods() throws Exception { assertFalse(ChildWithBridgeMethods.class.getMethod("anotherBeforeEach").isBridge()); assertFalse(ChildWithBridgeMethods.class.getMethod("anotherAfterEach").isBridge()); assertTrue(ChildWithBridgeMethods.class.getMethod("beforeEach").isBridge()); assertTrue(ChildWithBridgeMethods.class.getMethod("afterEach").isBridge()); assertTrue(ByteTestCase.class.getDeclaredMethod("test", Number.class).isBridge()); assertFalse(ByteTestCase.class.getDeclaredMethod("test", Byte.class).isBridge()); assertTrue(ShortTestCase.class.getDeclaredMethod("test", Number.class).isBridge()); assertFalse(ShortTestCase.class.getDeclaredMethod("test", Short.class).isBridge()); } @Test void childHasNoBridgeMethods() throws Exception { assertFalse(ChildWithoutBridgeMethods.class.getMethod("anotherBeforeEach").isBridge()); assertFalse(ChildWithoutBridgeMethods.class.getMethod("anotherAfterEach").isBridge()); assertFalse(ChildWithoutBridgeMethods.class.getMethod("beforeEach").isBridge()); assertFalse(ChildWithoutBridgeMethods.class.getMethod("afterEach").isBridge()); } @Test void compareMethodExecutionSequenceOrder() { String withoutBridgeMethods = execute(1, ChildWithoutBridgeMethods.class); String withBridgeMethods = execute(1, ChildWithBridgeMethods.class); assertEquals(withoutBridgeMethods, withBridgeMethods); } @TestFactory List<DynamicTest> ensureSingleTestMethodsExecute() { return Arrays.asList( dynamicTest("Byte", // () -> assertEquals("[test(Byte) BEGIN, test(N), test(Byte) END.]", // execute(1, ByteTestCase.class))), dynamicTest("Short", // () -> assertEquals("[test(Short) BEGIN, test(N), test(Short) END.]", // execute(1, ShortTestCase.class)))); } @Test void inheritedNonGenericMethodsAreExecuted() { String b = execute(4, AbstractNonGenericTests.B.class); assertAll("Missing expected test(s) in sequence: " + b, // () -> assertTrue(b.contains("A.test(Number)")), // () -> assertTrue(b.contains("mA()")), // () -> assertTrue(b.contains("mB()")), // () -> assertTrue(b.contains("B.test(Byte)")) // ); String c = execute(5, AbstractNonGenericTests.C.class); assertAll("Missing expected test(s) in sequence: " + c, // () -> assertTrue(c.contains("A.test(Number)")), // () -> assertTrue(c.contains("mA()")), // () -> assertTrue(c.contains("mB()")), // () -> assertTrue(c.contains("mC()")), // () -> assertTrue(c.contains("C.test(Byte)")) // ); } private String execute(int expectedTestFinishedCount, Class<?> testClass) { sequence.clear(); ExecutionEventRecorder recorder = executeTestsForClass(testClass); assertEquals(expectedTestFinishedCount, recorder.getTestFinishedCount()); return sequence.toString(); } }