/*
* 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.platform.commons.util;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.function.Executable;
import org.opentest4j.ValueWrapper;
/**
* Unit tests for {@link PackageUtils}.
*
* @since 1.0
*/
class PackageUtilsTests {
@Test
void assertPackageNameIsValidForValidPackageNames() {
PackageUtils.assertPackageNameIsValid(""); // default package
PackageUtils.assertPackageNameIsValid("non.existing.but.all.segments.are.syntactically.valid");
}
@Test
void assertPackageNameIsValidForNullPackageName() {
assertThrows(PreconditionViolationException.class, () -> PackageUtils.assertPackageNameIsValid(null));
}
@Test
void assertPackageNameIsValidForWhitespacePackageName() {
assertThrows(PreconditionViolationException.class, () -> PackageUtils.assertPackageNameIsValid(" "));
}
@Test
void assertPackageNameIsValidForInvalidPackageNames() {
assertThrows(PreconditionViolationException.class, () -> PackageUtils.assertPackageNameIsValid(".a"));
assertThrows(PreconditionViolationException.class, () -> PackageUtils.assertPackageNameIsValid("a."));
assertThrows(PreconditionViolationException.class, () -> PackageUtils.assertPackageNameIsValid("a..b"));
assertThrows(PreconditionViolationException.class, () -> PackageUtils.assertPackageNameIsValid("byte.true"));
}
@Test
void getAttributeWithNullType() {
PreconditionViolationException exception = assertThrows(PreconditionViolationException.class,
() -> PackageUtils.getAttribute(null, p -> "any"));
assertEquals("type must not be null", exception.getMessage());
}
@Test
void getAttributeWithNullFunction() {
PreconditionViolationException exception = assertThrows(PreconditionViolationException.class,
() -> PackageUtils.getAttribute(getClass(), (Function<Package, String>) null));
assertEquals("function must not be null", exception.getMessage());
}
@Test
void getAttributeWithFunctionReturningNullIsEmpty() {
assertFalse(PackageUtils.getAttribute(ValueWrapper.class, p -> null).isPresent());
}
@TestFactory
List<DynamicTest> attributesFromValueWrapperClassArePresent() {
return Arrays.asList(dynamicTest("getName", isPresent(Package::getName)),
dynamicTest("getImplementationTitle", isPresent(Package::getImplementationTitle)),
dynamicTest("getImplementationVendor", isPresent(Package::getImplementationVendor)),
dynamicTest("getImplementationVersion", isPresent(Package::getImplementationVersion)),
dynamicTest("getSpecificationTitle", isPresent(Package::getSpecificationTitle)),
dynamicTest("getSpecificationVendor", isPresent(Package::getSpecificationVendor)),
dynamicTest("getSpecificationVersion", isPresent(Package::getSpecificationVersion)));
}
private Executable isPresent(Function<Package, String> function) {
return () -> assertTrue(PackageUtils.getAttribute(ValueWrapper.class, function).isPresent());
}
@Test
void getAttributeWithNullTypeAndName() {
PreconditionViolationException exception = assertThrows(PreconditionViolationException.class,
() -> PackageUtils.getAttribute(null, "foo"));
assertEquals("type must not be null", exception.getMessage());
}
@Test
void getAttributeWithNullName() {
PreconditionViolationException exception = assertThrows(PreconditionViolationException.class,
() -> PackageUtils.getAttribute(getClass(), (String) null));
assertEquals("name must not be blank", exception.getMessage());
}
@Test
void getAttributeWithEmptyName() {
PreconditionViolationException exception = assertThrows(PreconditionViolationException.class,
() -> PackageUtils.getAttribute(getClass(), ""));
assertEquals("name must not be blank", exception.getMessage());
}
}