/******************************************************************************* * See the NOTICE file distributed with this work for additional information * regarding copyright ownership. * * 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 hr.fer.zemris.vhdllab.service.hierarchy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import hr.fer.zemris.vhdllab.entity.File; import hr.fer.zemris.vhdllab.entity.Project; import hr.fer.zemris.vhdllab.test.ValueObjectTestSupport; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.apache.commons.lang.SerializationUtils; import org.junit.Before; import org.junit.Test; public class HierarchyTest extends ValueObjectTestSupport { private HierarchyNode root; private HierarchyNode left; private HierarchyNode right; private HierarchyNode rightDep; private Collection<HierarchyNode> collection; private Hierarchy hierarchy; @Before public void initObject() { root = new HierarchyNode(new File("root", null, null), null); left = new HierarchyNode(new File("left", null, null), root); right = new HierarchyNode(new File("right", null, null), root); rightDep = new HierarchyNode(new File("right-dep", null, null), right); collection = new ArrayList<HierarchyNode>(4); collection.add(root); collection.add(right); collection.add(left); collection.add(rightDep); hierarchy = new Hierarchy(new Project("userId", "project_name"), collection); } @Test(expected = IllegalArgumentException.class) public void constructorNullProject() { new Hierarchy(null, collection); } @Test(expected = IllegalArgumentException.class) public void constructorNullCollection() { new Hierarchy(new Project(), null); } @Test public void constructor() { Project project = new Project("userId", "name"); hierarchy = new Hierarchy(project, collection); assertEquals(project, hierarchy.getProject()); assertNotSame(project, hierarchy.getProject()); assertNull(hierarchy.getProject().getFiles()); assertEquals(1, hierarchy.getTopLevelNodes().size()); assertEquals(root, hierarchy.getTopLevelNodes().iterator().next()); assertEquals(2, hierarchy.getBottomLevelNodes().size()); Iterator<HierarchyNode> i = hierarchy.getBottomLevelNodes().iterator(); assertEquals(left, i.next()); assertEquals(rightDep, i.next()); assertEquals(4, hierarchy.getAllNodes().size()); } @Test public void getProject() { Project project = hierarchy.getProject(); project.setName("another_name"); assertEquals("another_name", hierarchy.getProject().getName()); } @Test(expected = IllegalArgumentException.class) public void getNodeNullArgument() { hierarchy.getNode(null); } @Test public void getNode() { assertEquals(root, hierarchy.getNode(root.getFile())); assertEquals(left, hierarchy.getNode(left.getFile())); assertEquals(right, hierarchy.getNode(right.getFile())); assertEquals(rightDep, hierarchy.getNode(rightDep.getFile())); File clone = new File(root.getFile(), new Project("userId", "a_project_name")); assertEquals(root, hierarchy.getNode(clone)); } @Test public void getFileCount() { assertEquals(4, hierarchy.getFileCount()); } @Test(expected = IllegalArgumentException.class) public void fileHasDependency() { hierarchy.fileHasDependency(null, left.getFile()); } @Test(expected = IllegalArgumentException.class) public void fileHasDependency2() { hierarchy.fileHasDependency(left.getFile(), null); } @Test(expected = IllegalArgumentException.class) public void fileHasDependency3() { hierarchy.fileHasDependency(new File(), left.getFile()); } @Test public void fileHasDependency4() { assertTrue(hierarchy.fileHasDependency(root.getFile(), left.getFile())); assertTrue(hierarchy.fileHasDependency(root.getFile(), right.getFile())); assertTrue(hierarchy.fileHasDependency(right.getFile(), rightDep .getFile())); assertFalse(hierarchy.fileHasDependency(root.getFile(), new File())); } @Test(expected = UnsupportedOperationException.class) public void getAllNodes() { hierarchy.getAllNodes().add(new HierarchyNode(new File(), null)); } @Test public void afterSerialization() { Hierarchy clone = (Hierarchy) SerializationUtils.clone(hierarchy); assertNotNull(clone.getTopLevelNodes()); assertNotNull(clone.getBottomLevelNodes()); Set<HierarchyNode> topLevel = new HashSet<HierarchyNode>(1); topLevel.add(root); assertEquals(topLevel, clone.getTopLevelNodes()); Set<HierarchyNode> bottomLevel = new HashSet<HierarchyNode>(2); bottomLevel.add(rightDep); bottomLevel.add(left); assertEquals(bottomLevel, clone.getBottomLevelNodes()); } @Test public void getTopLevelNodes() { Hierarchy clone = (Hierarchy) SerializationUtils.clone(hierarchy); Set<HierarchyNode> topLevelNodes = clone.getTopLevelNodes(); topLevelNodes.add(new HierarchyNode(new File(), null)); assertEquals(topLevelNodes.size(), clone.getTopLevelNodes().size()); } @Test public void getBottomLevelNodes() { Hierarchy clone = (Hierarchy) SerializationUtils.clone(hierarchy); Set<HierarchyNode> bottomLevelNodes = clone.getBottomLevelNodes(); bottomLevelNodes.add(new HierarchyNode(new File(), null)); assertEquals(bottomLevelNodes.size(), clone.getBottomLevelNodes() .size()); } @Test(expected = IllegalArgumentException.class) public void getDependenciesForNullArgument() { hierarchy.getDependenciesFor(null); } @Test public void getDependenciesFor() { assertEquals(2, hierarchy.getDependenciesFor(root).size()); assertEquals(1, hierarchy.getDependenciesFor(right).size()); assertEquals(0, hierarchy.getDependenciesFor(left).size()); assertEquals(0, hierarchy.getDependenciesFor(rightDep).size()); } @Test(expected = IllegalArgumentException.class) public void getParentsForNullArgument() { hierarchy.getParentsFor(null); } @Test public void getParentsFor() { assertEquals(0, hierarchy.getParentsFor(root).size()); assertEquals(1, hierarchy.getParentsFor(right).size()); assertEquals(1, hierarchy.getParentsFor(left).size()); assertEquals(1, hierarchy.getParentsFor(rightDep).size()); } @Test public void iteratorFlatHierarchy() { Iterator<HierarchyNode> iterator = hierarchy.iteratorFlatHierarchy(); assertEquals(root, iterator.next()); assertEquals(right, iterator.next()); assertEquals(left, iterator.next()); assertEquals(rightDep, iterator.next()); assertFalse(iterator.hasNext()); } @Test public void iteratorXUsesYHierarchy() { Hierarchy clone = (Hierarchy) SerializationUtils.clone(hierarchy); Iterator<HierarchyNode> iterator = clone.iteratorXUsesYHierarchy(null); assertEquals(root, iterator.next()); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsesYHierarchy(root); assertEquals(left, iterator.next()); assertEquals(right, iterator.next()); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsesYHierarchy(right); assertEquals(rightDep, iterator.next()); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsesYHierarchy(left); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsesYHierarchy(rightDep); assertFalse(iterator.hasNext()); } @Test public void iteratorXUsedByYHierarchy() { Hierarchy clone = (Hierarchy) SerializationUtils.clone(hierarchy); Iterator<HierarchyNode> iterator = clone .iteratorXUsedByYHierarchy(null); assertEquals(left, iterator.next()); assertEquals(rightDep, iterator.next()); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsedByYHierarchy(rightDep); assertEquals(right, iterator.next()); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsedByYHierarchy(left); assertEquals(root, iterator.next()); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsedByYHierarchy(right); assertEquals(root, iterator.next()); assertFalse(iterator.hasNext()); iterator = clone.iteratorXUsedByYHierarchy(root); assertFalse(iterator.hasNext()); } @Test public void hashCodeAndEquals() throws Exception { basicEqualsTest(hierarchy); Hierarchy another = new Hierarchy(hierarchy.getProject(), collection); assertEqualsAndHashCode(hierarchy, another); another = new Hierarchy(new Project("newUserId", "another_name"), collection); assertNotEqualsAndHashCode(hierarchy, another); } @Test public void testToString() { toStringPrint(hierarchy); assertEquals( "Hierarchy for user=userId, project=project_name {\nroot [left,right]\nright [right-dep]\nleft []\nright-dep []\n}", hierarchy.toString()); } }