/******************************************************************************* * Copyright (c) 2006, 2016 Mountainminds GmbH & Co. KG and Contributors * 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 * * Contributors: * Marc R. Hoffmann - initial API and implementation * ******************************************************************************/ package com.mountainminds.eclemma.internal.core; import static org.junit.Assert.assertEquals; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.mountainminds.eclemma.core.ICorePreferences; import com.mountainminds.eclemma.core.JavaProjectKit; /** * Tests for {@link DefaultScopeFilter}. */ public class DefaultScopeFilterTest { private JavaProjectKit javaProject1; private JavaProjectKit javaProject2; private TestPreferences preferences; private DefaultScopeFilter filter; private ILaunchConfigurationWorkingCopy configuration; private IPackageFragmentRoot rootSrc1; private IPackageFragmentRoot rootSrc2; private IPackageFragmentRoot rootBin1; @Before public void setup() throws Exception { javaProject1 = new JavaProjectKit("project1"); javaProject2 = new JavaProjectKit("project2"); preferences = new TestPreferences(); filter = new DefaultScopeFilter(preferences); configuration = DebugPlugin .getDefault() .getLaunchManager() .getLaunchConfigurationType( "org.eclipse.jdt.launching.localJavaApplication") .newInstance(javaProject1.project, "test.launch"); rootSrc1 = javaProject1.createSourceFolder("src1"); rootSrc2 = javaProject2.createSourceFolder("testsrc"); rootBin1 = javaProject1.createJAR("testdata/bin/signatureresolver.jar", "/sample.jar", new Path("/UnitTestProject/sample.jar"), null); JavaProjectKit.waitForBuild(); } @After public void teardown() throws Exception { javaProject1.destroy(); javaProject2.destroy(); } @Test public void testNoFilters() throws CoreException { preferences.sourceFoldersOnly = false; final Set<IPackageFragmentRoot> input = set(rootSrc1, rootSrc2, rootBin1); final Set<IPackageFragmentRoot> output = filter .filter(input, configuration); assertEquals(input, output); } @Test public void testSourceFoldersOnly() throws CoreException { preferences.sourceFoldersOnly = true; final Set<IPackageFragmentRoot> input = set(rootSrc1, rootBin1); final Collection<IPackageFragmentRoot> output = filter.filter(input, configuration); assertEquals(set(rootSrc1), output); } @Test public void testSameProjectOnly() throws CoreException { preferences.sameProjectOnly = true; configuration.setAttribute( IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "project1"); final Set<IPackageFragmentRoot> input = set(rootSrc1, rootSrc2); final Collection<IPackageFragmentRoot> output = filter.filter(input, configuration); assertEquals(set(rootSrc1), output); } @Test public void testFilter() throws CoreException { preferences.filter = "testsrc,abc"; final Set<IPackageFragmentRoot> input = set(rootSrc1, rootSrc2); final Collection<IPackageFragmentRoot> output = filter.filter(input, configuration); assertEquals(set(rootSrc2), output); } private static class TestPreferences implements ICorePreferences { String filter; boolean sameProjectOnly; boolean sourceFoldersOnly; public String getDefaultScopeFilter() { return filter; } public boolean getDefaultScopeSameProjectOnly() { return sameProjectOnly; } public boolean getDefaultScopeSourceFoldersOnly() { return sourceFoldersOnly; } public boolean getActivateNewSessions() { return false; } public boolean getAutoRemoveSessions() { return false; } public String getAgentIncludes() { return null; } public String getAgentExcludes() { return null; } public String getAgentExclClassloader() { return null; } } private <E> Set<E> set(E... elements) { return new HashSet<E>(Arrays.asList(elements)); } }