/*
* 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.vintage.engine.discovery;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.Collections.singleton;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.runner.Description.createTestDescription;
import static org.junit.runner.manipulation.Filter.matchMethodDescription;
import static org.junit.vintage.engine.discovery.RunnerTestDescriptorAwareFilter.adapter;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import org.junit.internal.builders.IgnoredClassRunner;
import org.junit.jupiter.api.Test;
import org.junit.platform.engine.TestDescriptor;
import org.junit.platform.engine.support.descriptor.EngineDescriptor;
import org.junit.vintage.engine.RecordCollectingLogger;
import org.junit.vintage.engine.VintageUniqueIdBuilder;
import org.junit.vintage.engine.samples.junit4.IgnoredJUnit4TestCase;
import org.junit.vintage.engine.samples.junit4.PlainJUnit4TestCaseWithFiveTestMethods;
/**
* @since 4.12
*/
class TestClassRequestResolverTests {
@Test
void doesNotLogAnythingForFilterableRunner() {
Class<?> testClass = PlainJUnit4TestCaseWithFiveTestMethods.class;
RunnerTestDescriptorAwareFilter filter = adapter(
matchMethodDescription(createTestDescription(testClass, "failingTest")));
List<LogRecord> logRecords = resolve(new TestClassRequest(testClass, asList(filter)));
assertThat(logRecords).isEmpty();
}
@Test
void doesNotLogAnythingForNonFilterableRunnerIfNoFiltersAreToBeApplied() {
Class<?> testClass = IgnoredJUnit4TestCase.class;
List<RunnerTestDescriptorAwareFilter> filters = emptyList();
List<LogRecord> logRecords = resolve(new TestClassRequest(testClass, filters));
assertThat(logRecords).isEmpty();
}
@Test
void logsWarningOnNonFilterableRunner() {
Class<?> testClass = IgnoredJUnit4TestCase.class;
RunnerTestDescriptorAwareFilter filter = adapter(
matchMethodDescription(createTestDescription(testClass, "test")));
List<LogRecord> logRecords = resolve(new TestClassRequest(testClass, asList(filter)));
assertThat(logRecords).hasSize(1);
LogRecord logRecord = logRecords.get(0);
assertEquals(Level.WARNING, logRecord.getLevel());
assertEquals("Runner " + IgnoredClassRunner.class.getName() //
+ " (used on " + testClass.getName() + ") does not support filtering" //
+ " and will therefore be run completely.",
logRecord.getMessage());
}
private List<LogRecord> resolve(TestClassRequest request) {
TestDescriptor engineDescriptor = new EngineDescriptor(VintageUniqueIdBuilder.engineId(), "JUnit 4");
RecordCollectingLogger logger = new RecordCollectingLogger();
TestClassRequestResolver resolver = new TestClassRequestResolver(engineDescriptor, logger);
resolver.populateEngineDescriptorFrom(singleton(request));
return logger.getLogRecords();
}
}