/* * 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 java.util.Optional; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.platform.engine.UniqueId.Segment; /** * Microtests for class {@link UniqueId} * * @since 1.0 */ class UniqueIdTests { static final String ENGINE_ID = "junit-jupiter"; @Nested class Creation { @Test void uniqueIdCanBeCreatedFromEngineId() { UniqueId uniqueId = UniqueId.forEngine(ENGINE_ID); assertEquals("[engine:junit-jupiter]", uniqueId.toString()); assertSegment(uniqueId.getSegments().get(0), "engine", "junit-jupiter"); } @Test void retrievingOptionalEngineId() { UniqueId uniqueIdWithEngine = UniqueId.forEngine(ENGINE_ID); assertEquals("junit-jupiter", uniqueIdWithEngine.getEngineId().get()); UniqueId uniqueIdWithoutEngine = UniqueId.root("root", "avalue"); assertEquals(Optional.empty(), uniqueIdWithoutEngine.getEngineId()); } @Test void uniqueIdCanBeCreatedFromTypeAndValue() { UniqueId uniqueId = UniqueId.root("aType", "aValue"); assertEquals("[aType:aValue]", uniqueId.toString()); assertSegment(uniqueId.getSegments().get(0), "aType", "aValue"); } @Test void rootSegmentCanBeRetrieved() { UniqueId uniqueId = UniqueId.root("aType", "aValue"); assertEquals(new Segment("aType", "aValue"), uniqueId.getRoot().get()); } @Test void appendingOneSegment() { UniqueId engineId = UniqueId.root("engine", ENGINE_ID); UniqueId classId = engineId.append("class", "org.junit.MyClass"); assertEquals(2, classId.getSegments().size()); assertSegment(classId.getSegments().get(0), "engine", ENGINE_ID); assertSegment(classId.getSegments().get(1), "class", "org.junit.MyClass"); } @Test void appendingSegmentLeavesOriginalUnchanged() { UniqueId uniqueId = UniqueId.root("engine", ENGINE_ID); uniqueId.append("class", "org.junit.MyClass"); assertEquals(1, uniqueId.getSegments().size()); assertSegment(uniqueId.getSegments().get(0), "engine", ENGINE_ID); } @Test void appendingSeveralSegments() { UniqueId engineId = UniqueId.root("engine", ENGINE_ID); UniqueId uniqueId = engineId.append("t1", "v1").append("t2", "v2").append("t3", "v3"); assertEquals(4, uniqueId.getSegments().size()); assertSegment(uniqueId.getSegments().get(0), "engine", ENGINE_ID); assertSegment(uniqueId.getSegments().get(1), "t1", "v1"); assertSegment(uniqueId.getSegments().get(2), "t2", "v2"); assertSegment(uniqueId.getSegments().get(3), "t3", "v3"); } } @Nested class ParsingAndFormatting { private final String uniqueIdString = "[engine:junit-jupiter]/[class:MyClass]/[method:myMethod]"; @Test void ensureDefaultUniqueIdFormatIsUsedForParsing() { UniqueId parsedDirectly = UniqueId.parse(uniqueIdString); UniqueId parsedViaFormat = UniqueIdFormat.getDefault().parse(uniqueIdString); assertEquals(parsedViaFormat, parsedDirectly); } @Test void ensureDefaultUniqueIdFormatIsUsedForFormatting() { UniqueId parsedDirectly = UniqueId.parse("[engine:junit-jupiter]/[class:MyClass]/[method:myMethod]"); assertEquals("[engine:junit-jupiter]/[class:MyClass]/[method:myMethod]", parsedDirectly.toString()); } } @Nested class EqualsContract { @Test void sameEnginesAreEqual() { UniqueId id1 = UniqueId.root("engine", "junit-jupiter"); UniqueId id2 = UniqueId.root("engine", "junit-jupiter"); Assertions.assertTrue(id1.equals(id2)); Assertions.assertTrue(id2.equals(id1)); assertEquals(id1.hashCode(), id2.hashCode()); } @Test void differentEnginesAreNotEqual() { UniqueId id1 = UniqueId.root("engine", "junit-vintage"); UniqueId id2 = UniqueId.root("engine", "junit-jupiter"); Assertions.assertFalse(id1.equals(id2)); Assertions.assertFalse(id2.equals(id1)); } @Test void uniqueIdWithSameSegmentsAreEqual() { UniqueId id1 = UniqueId.root("engine", "junit-jupiter").append("t1", "v1").append("t2", "v2"); UniqueId id2 = UniqueId.root("engine", "junit-jupiter").append("t1", "v1").append("t2", "v2"); Assertions.assertTrue(id1.equals(id2)); Assertions.assertTrue(id2.equals(id1)); assertEquals(id1.hashCode(), id2.hashCode()); } @Test void differentOrderOfSegmentsAreNotEqual() { UniqueId id1 = UniqueId.root("engine", "junit-jupiter").append("t2", "v2").append("t1", "v1"); UniqueId id2 = UniqueId.root("engine", "junit-jupiter").append("t1", "v1").append("t2", "v2"); Assertions.assertFalse(id1.equals(id2)); Assertions.assertFalse(id2.equals(id1)); } @Test void additionalSegmentMakesItNotEqual() { UniqueId id1 = UniqueId.root("engine", "junit-jupiter").append("t1", "v1"); UniqueId id2 = id1.append("t2", "v2"); Assertions.assertFalse(id1.equals(id2)); Assertions.assertFalse(id2.equals(id1)); } } private void assertSegment(Segment segment, String expectedType, String expectedValue) { assertEquals(expectedType, segment.getType(), "segment type"); assertEquals(expectedValue, segment.getValue(), "segment value"); } }