// Copyright (c) 2009-2010 by the projectusus.org contributors // This software is released under the terms and conditions // of the Eclipse Public License (EPL) 1.0. // See http://www.eclipse.org/legal/epl-v10.html for details. package org.projectusus.core.internal.proportions; import static org.eclipse.core.resources.ResourcesPlugin.getWorkspace; import static org.junit.Assert.assertEquals; import org.eclipse.core.resources.IProject; import org.junit.After; import org.junit.Rule; import org.junit.Test; import org.projectusus.adapter.ICodeProportionComputationTarget; import org.projectusus.core.basis.MetricsResults; import org.projectusus.core.internal.JavaProject; import org.projectusus.core.internal.Workspace; import org.projectusus.core.statistics.DefaultMetricsResultVisitor; public class UsusProjectNotificationsPDETest { @Rule public Workspace workspace = new Workspace(); @Rule public JavaProject project1 = new JavaProject(); @Rule public JavaProject project2 = new JavaProject(); private final class ProjectCountingVisitor extends DefaultMetricsResultVisitor { int projects = 0; @Override public void inspectProject( IProject project, MetricsResults results ) { projects++; } } private TestResourceChangeListener listener = new TestResourceChangeListener(); @After public void removeResourceChangeListener() { getWorkspace().removeResourceChangeListener( listener ); } @Test public void projectAddedToUsus() throws Exception { project1.createFile( "A.java", "class A {}" ); project1.disableUsus(); workspace.buildFullyAndWait(); assertEquals( 0, countProjects() ); project1.enableUsus(); workspace.buildFullyAndWait(); assertEquals( 1, countProjects() ); } @Test public void projectRemovedFromUsus() throws Exception { project1.createFile( "A.java", "class A {}" ); project2.createFile( "B.java", "class B {}" ); workspace.buildFullyAndWait(); assertEquals( 2, countProjects() ); project1.disableUsus(); workspace.buildFullyAndWait(); assertEquals( 1, countProjects() ); project2.disableUsus(); workspace.buildFullyAndWait(); assertEquals( 0, countProjects() ); } private int countProjects() { ProjectCountingVisitor visitor = new ProjectCountingVisitor(); visitor.visit(); return visitor.projects; } @Test public void excludeNonUsusProjects() throws Exception { project1.disableUsus(); getWorkspace().addResourceChangeListener( listener ); project1.createFile( "a.java", "file that is ignored because in non-usus project" ); listener.assertNoException(); ICodeProportionComputationTarget target = listener.getTarget(); // non-Usus projects always show up in the list of removed projects // otherwise we would have a gap when switching a project from // added-to-Usus to not-added-to-Usus assertRemovedProject( target ); assertEquals( 0, target.getProjects().size() ); } private void assertRemovedProject( ICodeProportionComputationTarget target ) { assertEquals( 1, target.getRemovedProjects().size() ); IProject removedProject = target.getRemovedProjects().iterator().next(); assertEquals( project1.get(), removedProject ); } }