/* * 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.support.descriptor; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.UniqueId; /** * Unit tests for {@link AbstractTestDescriptor} and {@link EngineDescriptor}. * * @since 1.0 */ class AbstractTestDescriptorTests { EngineDescriptor engineDescriptor; @BeforeEach public void initTree() { engineDescriptor = new EngineDescriptor(UniqueId.forEngine("testEngine"), "testEngine"); GroupDescriptor group1 = new GroupDescriptor(UniqueId.root("group", "group1")); engineDescriptor.addChild(group1); GroupDescriptor group2 = new GroupDescriptor(UniqueId.root("group", "group2")); engineDescriptor.addChild(group2); GroupDescriptor group11 = new GroupDescriptor(UniqueId.root("group", "group1-1")); group1.addChild(group11); group1.addChild(new LeafDescriptor(UniqueId.root("leaf", "leaf1-1"))); group1.addChild(new LeafDescriptor(UniqueId.root("leaf", "leaf1-2"))); group2.addChild(new LeafDescriptor(UniqueId.root("leaf", "leaf2-1"))); group11.addChild(new LeafDescriptor(UniqueId.root("leaf", "leaf11-1"))); } @Test void visitAllNodes() { List<TestDescriptor> visited = new ArrayList<>(); engineDescriptor.accept(visited::add); assertEquals(8, visited.size()); } @Test void pruneLeaf() { TestDescriptor.Visitor visitor = descriptor -> { if (descriptor.getUniqueId().equals(UniqueId.root("leaf", "leaf1-1"))) descriptor.removeFromHierarchy(); }; engineDescriptor.accept(visitor); List<UniqueId> visited = new ArrayList<>(); engineDescriptor.accept(descriptor -> visited.add(descriptor.getUniqueId())); assertEquals(7, visited.size()); assertTrue(visited.contains(UniqueId.root("group", "group1"))); assertFalse(visited.contains(UniqueId.root("leaf", "leaf1-1"))); } @Test void pruneGroup() { final AtomicInteger countVisited = new AtomicInteger(); TestDescriptor.Visitor visitor = descriptor -> { if (descriptor.getUniqueId().equals(UniqueId.root("group", "group1"))) descriptor.removeFromHierarchy(); countVisited.incrementAndGet(); }; engineDescriptor.accept(visitor); assertEquals(4, countVisited.get(), "Children of pruned element are not visited"); List<UniqueId> visited = new ArrayList<>(); engineDescriptor.accept(descriptor -> visited.add(descriptor.getUniqueId())); assertEquals(3, visited.size()); assertFalse(visited.contains(UniqueId.root("group", "group1"))); } } class GroupDescriptor extends AbstractTestDescriptor { GroupDescriptor(UniqueId uniqueId) { super(uniqueId, "group: " + uniqueId); } @Override public Type getType() { return Type.CONTAINER; } } class LeafDescriptor extends AbstractTestDescriptor { LeafDescriptor(UniqueId uniqueId) { super(uniqueId, "leaf: " + uniqueId); } @Override public Type getType() { return Type.TEST; } }