/*
* 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 org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.platform.commons.util.CollectionUtils.getOnlyElement;
import static org.junit.platform.engine.FilterResult.includedIf;
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request;
import static org.junit.vintage.engine.VintageUniqueIdBuilder.engineId;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import org.junit.jupiter.api.Test;
import org.junit.platform.engine.EngineDiscoveryRequest;
import org.junit.platform.engine.discovery.ClassNameFilter;
import org.junit.platform.engine.support.descriptor.EngineDescriptor;
import org.junit.platform.launcher.LauncherDiscoveryRequest;
import org.junit.vintage.engine.RecordCollectingLogger;
import org.junit.vintage.engine.samples.junit4.AbstractJunit4TestCaseWithConstructorParameter;
/**
* @since 4.12
*/
class VintageDiscoveryRequestResolverTests {
@Test
void logsWarningWhenFilterExcludesClass() {
EngineDescriptor engineDescriptor = new EngineDescriptor(engineId(), "JUnit Vintage");
RecordCollectingLogger logger = new RecordCollectingLogger();
ClassNameFilter filter = className -> includedIf(Foo.class.getName().equals(className), () -> "match",
() -> "no match");
// @formatter:off
EngineDiscoveryRequest request = request()
.selectors(selectClass(Foo.class), selectClass(Bar.class))
.filters(filter)
.build();
// @formatter:on
JUnit4DiscoveryRequestResolver resolver = new JUnit4DiscoveryRequestResolver(engineDescriptor, logger);
resolver.resolve(request);
assertThat(engineDescriptor.getChildren()).hasSize(1);
assertThat(logger.getLogRecords()).hasSize(1);
LogRecord logRecord = getOnlyElement(logger.getLogRecords());
assertEquals(Level.FINE, logRecord.getLevel());
assertEquals("Class " + Bar.class.getName() + " was excluded by a class filter: no match",
logRecord.getMessage());
}
public static class Foo {
@org.junit.Test
public void test() {
}
}
public static class Bar {
@org.junit.Test
public void test() {
}
}
@Test
void doesNotResolveAbstractClasses() {
EngineDescriptor engineDescriptor = new EngineDescriptor(engineId(), "JUnit Vintage");
Class<?> testClass = AbstractJunit4TestCaseWithConstructorParameter.class;
LauncherDiscoveryRequest request = request().selectors(selectClass(testClass)).build();
RecordCollectingLogger logger = new RecordCollectingLogger();
JUnit4DiscoveryRequestResolver resolver = new JUnit4DiscoveryRequestResolver(engineDescriptor, logger);
resolver.resolve(request);
assertThat(engineDescriptor.getChildren()).isEmpty();
LogRecord logRecord = getOnlyElement(logger.getLogRecords());
assertThat(logRecord.getLevel()).isEqualTo(Level.WARNING);
assertThat(logRecord.getMessage()).isEqualTo("Class " + testClass.getName() + " could not be resolved");
}
}