/* * 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.engine; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.platform.commons.JUnitException; import org.junit.platform.engine.UniqueId.Segment; /** * @since 1.0 */ class UniqueIdFormatTests { @Nested class Formatting { private final UniqueId engineId = UniqueId.root("engine", "junit-jupiter"); private final UniqueIdFormat format = UniqueIdFormat.getDefault(); @Test void engineIdOnly() { assertEquals("[engine:junit-jupiter]", engineId.toString()); assertEquals(format.format(engineId), engineId.toString()); } @Test void withTwoSegments() { UniqueId classId = engineId.append("class", "org.junit.MyClass"); assertEquals("[engine:junit-jupiter]/[class:org.junit.MyClass]", classId.toString()); assertEquals(format.format(classId), classId.toString()); } @Test void withManySegments() { UniqueId uniqueId = engineId.append("t1", "v1").append("t2", "v2").append("t3", "v3"); assertEquals("[engine:junit-jupiter]/[t1:v1]/[t2:v2]/[t3:v3]", uniqueId.toString()); assertEquals(format.format(uniqueId), uniqueId.toString()); } } @Nested class ParsingWithDefaultFormat implements ParsingTest { private final UniqueIdFormat format = UniqueIdFormat.getDefault(); @Override public UniqueIdFormat getFormat() { return this.format; } @Override public String getEngineUid() { return "[engine:junit-jupiter]"; } @Override public String getMethodUid() { return "[engine:junit-jupiter]/[class:MyClass]/[method:myMethod]"; } } @Nested class ParsingWithCustomFormat implements ParsingTest { private final UniqueIdFormat format = new UniqueIdFormat('{', '=', '}', ','); @Override public UniqueIdFormat getFormat() { return this.format; } @Override public String getEngineUid() { return "{engine=junit-jupiter}"; } @Override public String getMethodUid() { return "{engine=junit-jupiter},{class=MyClass},{method=myMethod}"; } } // ------------------------------------------------------------------------- private static void assertSegment(Segment segment, String expectedType, String expectedValue) { assertEquals(expectedType, segment.getType(), "segment type"); assertEquals(expectedValue, segment.getValue(), "segment value"); } interface ParsingTest { UniqueIdFormat getFormat(); String getEngineUid(); String getMethodUid(); @Test default void parseMalformedUid() { Throwable throwable = assertThrows(JUnitException.class, () -> getFormat().parse("malformed UID")); assertTrue(throwable.getMessage().contains("malformed UID")); } @Test default void parseEngineUid() { UniqueId parsedId = getFormat().parse(getEngineUid()); assertSegment(parsedId.getSegments().get(0), "engine", "junit-jupiter"); assertEquals(getEngineUid(), getFormat().format(parsedId)); assertEquals(getEngineUid(), parsedId.toString()); } @Test default void parseMethodUid() { UniqueId parsedId = getFormat().parse(getMethodUid()); assertSegment(parsedId.getSegments().get(0), "engine", "junit-jupiter"); assertSegment(parsedId.getSegments().get(1), "class", "MyClass"); assertSegment(parsedId.getSegments().get(2), "method", "myMethod"); assertEquals(getMethodUid(), getFormat().format(parsedId)); assertEquals(getMethodUid(), parsedId.toString()); } } }