/* * Copyright (C) 2013 David Sowerby * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ package uk.q3c.util; import com.mycila.testing.junit.MycilaJunitRunner; import com.mycila.testing.plugin.guice.GuiceContext; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @RunWith(MycilaJunitRunner.class) @GuiceContext({}) public class BasicForestTest { BasicForest<String> tree; String s0 = new String("0"); String s1 = new String("1"); String s11 = new String("1.1"); String s12 = new String("1.2"); String s121 = new String("1.2.1"); String s111 = new String("1.1.1"); String s2 = new String("2"); String s21 = new String("2.1"); String s22 = new String("2.2"); @Before public void setup() { tree = new BasicForest<>(); } @Test public void addNode() { // given // when tree.addNode(s1); // then assertThat(tree.containsNode(s1)).isTrue(); } @Test public void addChildHasChild() { // given // when tree.addNode(s1); tree.addChild(s1, s11); // then assertThat(tree.containsNode(s1)).isTrue(); assertThat(tree.containsNode(s11)).isTrue(); assertThat(tree.hasChild(s1, s11)).isTrue(); } @Test public void addChildParentNotInTree() { // given // when tree.addChild(s1, s11); // then assertThat(tree.containsNode(s1)).isTrue(); assertThat(tree.containsNode(s11)).isTrue(); assertThat(tree.hasChild(s1, s11)).isTrue(); } @Test public void getParent() { // given // when tree.addNode(s1); tree.addChild(s1, s11); // then assertThat(tree.getParent(s11)).isEqualTo(s1); } @Test public void addBranch() { // given List<String> branch = new ArrayList<>(); branch.add(s1); branch.add(s11); branch.add(s111); // when tree.addBranch(branch); // then assertThat(tree.containsNode(s1)).isTrue(); assertThat(tree.containsNode(s11)).isTrue(); assertThat(tree.containsNode(s111)).isTrue(); assertThat(tree.getParent(s11)).isEqualTo(s1); assertThat(tree.getParent(s111)).isEqualTo(s11); } @Test public void getNode() { // given List<String> branch = new ArrayList<>(); branch.add(s1); branch.add(s11); branch.add(s111); // when tree.addBranch(branch); // then assertThat(tree.getNode(s11)).isEqualTo(s11); } @Test public void getChildren() { // given List<String> branch = new ArrayList<>(); branch.add(s1); branch.add(s11); branch.add(s111); // when tree.addBranch(branch); tree.addChild(s1, s12); // then assertThat(tree.getChildCount(s1)).isEqualTo(2); assertThat(tree.getChildren(s1)).containsOnly(s11, s12); } @Test public void getSubtreeNodes() { // given // when addAllNodes(); // then assertThat(tree.getSubtreeNodes(s1)).containsOnly(s1, s11, s111, s12, s121); } private void addAllNodes() { tree.addNode(s0); tree.addChild(s0, s1); tree.addChild(s0, s2); tree.addChild(s1, s11); tree.addChild(s1, s12); tree.addChild(s11, s111); tree.addChild(s12, s121); tree.addChild(s2, s21); tree.addChild(s2, s22); } @Test public void findLeavesOf() { // given // when addAllNodes(); // then assertThat(tree.findLeaves(s1)).containsOnly(s111, s121); } @Test public void findLeaves() { // given // when addAllNodes(); // then assertThat(tree.findLeaves()).containsOnly(s111, s121, s21, s22); } @Test public void getEntries() { // given // when tree.addNode(s1); tree.addChild(s1, s11); tree.addChild(s1, s12); tree.addNode(s2); // then assertThat(tree.getEntries()).containsOnly(s1, s11, s12, s2); } @Test public void clear() { // given addAllNodes(); // when tree.clear(); // then assertThat(tree.getEntries()).isEmpty(); } @Test public void getBranchRoots() { // given // when addAllNodes(); // then assertThat(tree.getRoots()).containsOnly(s0); } /** * toString() puts a blank line at the start */ @Test public void tostring() { // given // when addAllNodes(); // then assertThat(tree.toString()).isEqualTo("\n-0\n--1\n---1.1\n----1.1.1\n---1.2\n----1.2.1\n--2\n---2.1\n---2.2\n"); } @Test public void text() { // given StringBuilder buf = new StringBuilder(); // when addAllNodes(); tree.text(s0, buf, 0); String s = buf.toString(); // then assertThat(s).isEqualTo("-0\n--1\n---1.1\n----1.1.1\n---1.2\n----1.2.1\n--2\n---2.1\n---2.2\n"); } @Test public void getChildCount() { // given // when addAllNodes(); // then assertThat(tree.getChildCount(s0)).isEqualTo(2); assertThat(tree.getChildCount(s111)).isEqualTo(0); } @Test public void hasChildren() { // given // when addAllNodes(); // then assertThat(tree.hasChildren(s0)).isTrue(); assertThat(tree.hasChildren(s111)).isFalse(); } @Test public void getRoot() { // given // when addAllNodes(); // then assertThat(tree.getRoot()).isEqualTo(s0); } @Test public void getNodeCount() { // given // when addAllNodes(); // then assertThat(tree.getNodeCount()).isEqualTo(9); } @Test public void getRootFor() { // given addAllNodes(); tree.addNode("x"); // when // then assertThat(tree.getRootFor(null)).isNull(); assertThat(tree.getRootFor(s1)).isEqualTo(s0); assertThat(tree.getRootFor(s0)).isEqualTo(s0); assertThat(tree.getRootFor(s121)).isEqualTo(s0); } @Test public void getChildren_NoneFound() { //given //when List<String> result = tree.getChildren(s1); //then assertThat(result).isEmpty(); } @Test public void replaceNode() { //given String r1 = "r1"; addAllNodesMultiRoot(); //when tree.replaceNode(s1, r1); //then assertThat(tree.getRoots()).containsOnly(s0, s2, r1); assertThat(tree.getChildren(s0)).containsOnly(); assertThat(tree.getChildren(r1)).containsOnly(s11, s12); assertThat(tree.getChildren(s2)).containsOnly(s21, s22); } /** * s0, s1 and s2 all at root */ private void addAllNodesMultiRoot() { tree.addNode(s0); tree.addNode(s1); tree.addNode(s2); tree.addChild(s1, s11); tree.addChild(s1, s12); tree.addChild(s11, s111); tree.addChild(s12, s121); tree.addChild(s2, s21); tree.addChild(s2, s22); } @Test public void replaceNodeNoChildren() { //given String r1 = "r1"; addAllNodesMultiRoot(); //when tree.replaceNode(s0, r1); //then assertThat(tree.getRoots()).containsOnly(s1, s2, r1); assertThat(tree.getChildren(s1)).containsOnly(s11, s12); assertThat(tree.getChildren(r1)).containsOnly(); assertThat(tree.getChildren(s2)).containsOnly(s21, s22); } }