/* Copyright (C) 2009 Mobile Sorcery AB This program is free software; you can redistribute it and/or modify it under the terms of the Eclipse Public License v1.0. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License v1.0 for more details. You should have received a copy of the Eclipse Public License v1.0 along with this program. It is also available at http://www.eclipse.org/legal/epl-v10.html */ package com.mobilesorcery.sdk.internal.dependencies; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.junit.Test; public class DependencyManagerTest { @Test public void addAndRemove() { DependencyManager dependencies = new DependencyManager(); Object from1 = "from1"; Object to1 = "to1"; Object to2 = "to2"; dependencies.addDependency(from1, to1); assertEquals(1, dependencies.getDependenciesOf(from1).size()); dependencies.addDependency(from1, to2); assertEquals(2, dependencies.getDependenciesOf(from1).size()); assertEquals(1, dependencies.getReverseDependenciesOf(to1).size()); assertEquals(1, dependencies.getReverseDependenciesOf(to2).size()); dependencies.clearDependencies(from1); assertEquals(0, dependencies.getDependenciesOf(from1).size()); assertEquals(0, dependencies.getReverseDependenciesOf(to1).size()); assertEquals(0, dependencies.getReverseDependenciesOf(to2).size()); } @Test public void getRecursiveDependencies() { DependencyManager dependencies = new DependencyManager(); Object level0 = "0"; Object level1 = "1"; Object level2 = "2"; dependencies.addDependency(level0, level1); dependencies.addDependency(level1, level2); Set reverseDependencies = dependencies.getReverseDependenciesOf(level2, DependencyManager.DEPTH_INFINITE); assertTrue(reverseDependencies.contains(level1)); assertTrue(reverseDependencies.contains(level0)); } @Test public void circularRecursiveDependencies() { DependencyManager dependencies = new DependencyManager(); Object level0 = "0"; Object level1 = "1"; Object level2 = "2"; dependencies.addDependency(level0, level1); dependencies.addDependency(level1, level2); dependencies.addDependency(level2, level0); Set reverseDependencies = dependencies.getReverseDependenciesOf(level2, DependencyManager.DEPTH_INFINITE); assertTrue(reverseDependencies.contains(level1)); assertTrue(reverseDependencies.contains(level0)); assertTrue(reverseDependencies.contains(level2)); } @Test public void getRecursiveDependenciesOfMany() { DependencyManager dependencies = new DependencyManager(); Object level0 = "0"; Object level1 = "1"; Object level3 = "3"; Object level4 = "4"; dependencies.addDependency(level1, level0); dependencies.addDependency(level3, level0); dependencies.addDependency(level4, level3); Set reverseDependencies = dependencies.getReverseDependenciesOf(Arrays.asList(new Object[] { level0, level3 }), DependencyManager.DEPTH_INFINITE); assertEquals(new HashSet(Arrays.asList(new Object[] { level1, level3, level4 })), reverseDependencies); } }