Bug 577552 - Switch tests to mockito

Switch p2 tests to mockito from easymock.
Improve asserts to be slightly more readable and give better failure
message.

Change-Id: I3b975983a5c975dc03814a73bdbf0ce9ed652a1f
Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
Reviewed-on: https://git.eclipse.org/r/c/equinox/rt.equinox.p2/+/188640
Tested-by: Equinox Bot <equinox-bot@eclipse.org>
diff --git a/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF
index 7859591..f864e04 100644
--- a/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF
@@ -114,6 +114,5 @@
  org.eclipse.osgi.util;version="1.1.0",
  org.osgi.framework;version="1.3.0",
  org.osgi.service.packageadmin;version="1.2.0",
- org.osgi.util.tracker;version="1.3.0",
- org.easymock;version="4.0.0"
+ org.osgi.util.tracker;version="1.3.0"
 Automatic-Module-Name: org.eclipse.equinox.p2.tests
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractProvisioningTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractProvisioningTest.java
index dcc84bb..ab74b95 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractProvisioningTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractProvisioningTest.java
@@ -739,7 +739,7 @@
 			}
 	}
 
-	public static void writeBuffer(File outputFile, StringBuffer buffer) throws IOException {
+	public static void writeBuffer(File outputFile, StringBuilder buffer) throws IOException {
 		outputFile.getParentFile().mkdirs();
 		try (FileOutputStream stream = new FileOutputStream(outputFile)) {
 			stream.write(buffer.toString().getBytes());
@@ -1367,7 +1367,7 @@
 			IInstallableUnit sourceIU = it.next();
 			IQueryResult destinationCollector = destination.query(QueryUtil.createIUQuery(sourceIU), null);
 			assertEquals(message, 1, queryResultSize(destinationCollector));
-			assertTrue(message, sourceIU.equals(destinationCollector.iterator().next()));
+			assertEquals(message, sourceIU, destinationCollector.iterator().next());
 		}
 	}
 
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ANYConfigCUsActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ANYConfigCUsActionTest.java
index bb92cf4..d6085fd 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ANYConfigCUsActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ANYConfigCUsActionTest.java
@@ -14,13 +14,17 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.expect;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.matches;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import org.easymock.EasyMock;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
 import org.eclipse.equinox.internal.p2.publisher.eclipse.DataLoader;
@@ -212,7 +216,8 @@
 			fail("Unable to create product file advice", e); //$NON-NLS-1$
 		}
 
-		expect(publisherInfo.getAdvice(EasyMock.matches(configSpec), EasyMock.eq(false), (String) EasyMock.anyObject(), (Version) EasyMock.anyObject(), EasyMock.eq(IExecutableAdvice.class))).andReturn(launchingList).anyTimes();
+		when(publisherInfo.getAdvice(matches(configSpec), eq(false), anyString(), any(Version.class),
+				eq(IExecutableAdvice.class))).thenReturn(launchingList);
 
 		//configure IConfigAdvice
 		ConfigData configData = loader.getConfigData();
@@ -220,14 +225,15 @@
 		ArrayList<IConfigAdvice> configList = new ArrayList<>();
 		configList.add(configAdvice);
 		configList.add(productAdvice);
-		expect(publisherInfo.getAdvice(EasyMock.matches(configSpec), EasyMock.eq(false), (String) EasyMock.anyObject(), (Version) EasyMock.anyObject(), EasyMock.eq(IConfigAdvice.class))).andReturn(configList).anyTimes();
+		when(publisherInfo.getAdvice(matches(configSpec), eq(false), anyString(), any(Version.class),
+				eq(IConfigAdvice.class))).thenReturn(configList);
 
 		//setup metadata repository
 		IInstallableUnit[] ius = {mockIU("foo", null), mockIU("bar", null)}; //$NON-NLS-1$ //$NON-NLS-2$
 
 		metadataRepo = new TestMetadataRepository(getAgent(), ius);
-		expect(publisherInfo.getMetadataRepository()).andReturn(metadataRepo).anyTimes();
-		expect(publisherInfo.getContextMetadataRepository()).andReturn(null).anyTimes();
+		when(publisherInfo.getMetadataRepository()).thenReturn(metadataRepo);
+		when(publisherInfo.getContextMetadataRepository()).thenReturn(null);
 
 	}
 
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/AccumulateConfigDataActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/AccumulateConfigDataActionTest.java
index 480303b..ffe6009 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/AccumulateConfigDataActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/AccumulateConfigDataActionTest.java
@@ -15,21 +15,25 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
+import static org.mockito.Mockito.verify;
+
 import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Map;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
+import java.util.stream.Collectors;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
 import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
+import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
 import org.eclipse.equinox.p2.publisher.eclipse.AccumulateConfigDataAction;
 import org.eclipse.equinox.p2.publisher.eclipse.ConfigAdvice;
 import org.eclipse.equinox.p2.publisher.eclipse.LaunchingAdvice;
 import org.eclipse.equinox.p2.tests.TestActivator;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 
 public class AccumulateConfigDataActionTest extends ActionTest {
 
@@ -43,13 +47,11 @@
 	private static String launcherName = "launcherName"; //$NON-NLS-1$
 	private static String launcherVersion = "0.0.0"; //$NON-NLS-1$
 
-	Capture<ConfigAdvice> configAdviceCapture;
-	Capture<LaunchingAdvice> launchingAdviceCapture;
+	ArgumentCaptor<IPublisherAdvice> capture;
 
 	@Override
 	public void setUp() throws Exception {
-		configAdviceCapture = Capture.newInstance();
-		launchingAdviceCapture = Capture.newInstance();
+		capture = ArgumentCaptor.forClass(IPublisherAdvice.class);
 		setupPublisherInfo();
 		setupPublisherResult();
 		testAction = new AccumulateConfigDataAction(publisherInfo, configSpec, configLocation, executableLocation);
@@ -57,13 +59,15 @@
 
 	public void testAccumulateConfigDataAction() throws Exception {
 		testAction.perform(publisherInfo, publisherResult, new NullProgressMonitor());
+		verify(publisherInfo, Mockito.atLeastOnce()).addAdvice(capture.capture());
 		verifyConfigAdvice();
 		verifyLaunchAdvice();
 		debug("Completed AccumulateConfigDataActionTest."); //$NON-NLS-1$
 	}
 
 	private void verifyLaunchAdvice() throws URISyntaxException {
-		LaunchingAdvice captured = launchingAdviceCapture.getValue();
+		LaunchingAdvice captured = (LaunchingAdvice) capture.getAllValues().stream()
+				.filter(LaunchingAdvice.class::isInstance).collect(Collectors.toList()).get(0);
 		String[] programArgs = captured.getProgramArguments();
 		assertTrue(programArgs.length == 4);
 		assertTrue(programArgs[0].equalsIgnoreCase("-startup")); //$NON-NLS-1$
@@ -81,7 +85,8 @@
 	}
 
 	private void verifyConfigAdvice() throws Exception {
-		ConfigAdvice captured = configAdviceCapture.getValue();
+		ConfigAdvice captured = (ConfigAdvice) capture.getAllValues().stream().filter(ConfigAdvice.class::isInstance)
+				.collect(Collectors.toList()).get(0);
 		Map<String, String> prop = captured.getProperties();
 		assertTrue(prop.get("eclipse.buildId").equalsIgnoreCase("TEST-ID")); //$NON-NLS-1$ //$NON-NLS-2$
 		assertTrue(prop.get("eclipse.p2.profile").equalsIgnoreCase("PlatformProfile")); //$NON-NLS-1$//$NON-NLS-2$
@@ -109,8 +114,5 @@
 		ConfigAdvice configAdvice = new ConfigAdvice(configData, configSpec);
 		ArrayList<ConfigAdvice> configList = new ArrayList<>();
 		configList.add(configAdvice);
-
-		publisherInfo.addAdvice(EasyMock.and(EasyMock.isA(ConfigAdvice.class), EasyMock.capture(configAdviceCapture)));
-		publisherInfo.addAdvice(EasyMock.and(EasyMock.isA(LaunchingAdvice.class), EasyMock.capture(launchingAdviceCapture)));
 	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ActionTest.java
index 1741c78..25290d3 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ActionTest.java
@@ -14,10 +14,9 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -118,9 +117,9 @@
 		for (IRequirement act : actual) {
 			if (expected.getMatches().equals(act.getMatches())) {
 				String descr = "IRequirement " + expected.getMatches();
-				Assert.assertEquals("Min of " + descr, expected.getMin(), act.getMin());
-				Assert.assertEquals("Max of " + descr, expected.getMax(), act.getMax());
-				Assert.assertEquals("Greedy of " + descr, expected.isGreedy(), act.isGreedy());
+				assertEquals("Min of " + descr, expected.getMin(), act.getMin());
+				assertEquals("Max of " + descr, expected.getMax(), act.getMax());
+				assertEquals("Greedy of " + descr, expected.isGreedy(), act.isGreedy());
 				return;
 			}
 		}
@@ -128,13 +127,12 @@
 	}
 
 	protected IInstallableUnit mockIU(String id, Version version) {
-		IInstallableUnit result = createMock(IInstallableUnit.class);
-		expect(result.getId()).andReturn(id).anyTimes();
+		IInstallableUnit result = mock(IInstallableUnit.class);
+		when(result.getId()).thenReturn(id);
 		if (version == null)
 			version = Version.emptyVersion;
-		expect(result.getVersion()).andReturn(version).anyTimes();
-		expect(result.getFilter()).andReturn(null).anyTimes();
-		replay(result);
+		when(result.getVersion()).thenReturn(version);
+		when(result.getFilter()).thenReturn(null);
 		return result;
 	}
 
@@ -170,31 +168,20 @@
 	 * Call this method to setup Publisher Info, not <code>insertPublisherInfoBehavior</code>
 	 */
 	public void setupPublisherInfo() {
-		publisherInfo = createPublisherInfoMock();
+		publisherInfo = mock(IPublisherInfo.class);
 
 		String[] config = getArrayFromString(configSpec, COMMA_SEPARATOR);
-		expect(publisherInfo.getConfigurations()).andReturn(config).anyTimes();
+		when(publisherInfo.getConfigurations()).thenReturn(config);
 		insertPublisherInfoBehavior();
-		replay(publisherInfo);
-	}
-
-	/**
-	 * Creates the mock object for the IPublisherInfo. Subclasses
-	 * can override to create a nice or strict mock instead.
-	 * @return The publisher info mock
-	 * @see org.easymock.EasyMock#createNiceMock(Class)
-	 * @see org.easymock.EasyMock#createStrictMock(Class)
-	 */
-	protected IPublisherInfo createPublisherInfoMock() {
-		return createMock(IPublisherInfo.class);
 	}
 
 	/**
 	 * Do not call this method, it is called by <code>setupPublisherInfo</code>.
 	 */
 	protected void insertPublisherInfoBehavior() {
-		expect(publisherInfo.getMetadataRepository()).andReturn(createTestMetdataRepository(new IInstallableUnit[0])).anyTimes();
-		expect(publisherInfo.getContextMetadataRepository()).andReturn(createTestMetdataRepository(new IInstallableUnit[0])).anyTimes();
+		when(publisherInfo.getMetadataRepository()).thenReturn(createTestMetdataRepository(new IInstallableUnit[0]));
+		when(publisherInfo.getContextMetadataRepository())
+				.thenReturn(createTestMetdataRepository(new IInstallableUnit[0]));
 	}
 
 	public void cleanup() {
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/AdviceMatcher.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/AdviceMatcher.java
deleted file mode 100644
index f23e1f5..0000000
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/AdviceMatcher.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2017 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.p2.tests.publisher.actions;
-
-import org.easymock.EasyMock;
-import org.easymock.IArgumentMatcher;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
-
-/**
- * A matcher that matches advice applicable to a given id and version.
- */
-public class AdviceMatcher implements IArgumentMatcher {
-	private final Version version;
-	private final String id;
-	private static Class<?> clazz;
-
-	public static IPublisherAdvice adviceMatches(String id, Version version, Class<?> clazz) {
-		AdviceMatcher.clazz = clazz;
-		EasyMock.reportMatcher(new AdviceMatcher(id, version));
-		return null;
-	}
-
-	public AdviceMatcher(String id, Version version) {
-		this.id = id;
-		this.version = version;
-	}
-
-	@Override
-	public void appendTo(StringBuffer buf) {
-		buf.append("AdviceMatcher[" + id + ',' + version + ']');
-	}
-
-	@Override
-	public boolean matches(Object arg) {
-		if (!(arg instanceof IPublisherAdvice))
-			return false;
-		if (!(clazz.isAssignableFrom(arg.getClass())))
-			return false;
-		IPublisherAdvice advice = (IPublisherAdvice) arg;
-		return advice.isApplicable("", false, id, version);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java
index 72bde81..fd95c83 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java
@@ -16,15 +16,16 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.and;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.expect;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.errorStatus;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.statusWithMessageWhich;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import java.io.BufferedInputStream;
 import java.io.File;
@@ -39,9 +40,6 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.zip.ZipInputStream;
-import org.easymock.Capture;
-import org.easymock.CaptureType;
-import org.easymock.EasyMock;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
@@ -60,6 +58,7 @@
 import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
 import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.metadata.VersionRange;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
 import org.eclipse.equinox.p2.publisher.AbstractPublisherApplication;
 import org.eclipse.equinox.p2.publisher.AdviceFileAdvice;
 import org.eclipse.equinox.p2.publisher.IPublisherInfo;
@@ -80,6 +79,8 @@
 import org.eclipse.equinox.p2.tests.TestData;
 import org.eclipse.equinox.p2.tests.publisher.TestArtifactRepository;
 import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 
 public class BundlesActionTest extends ActionTest {
 	private static final String OSGI = PublisherHelper.OSGI_BUNDLE_CLASSIFIER;
@@ -143,39 +144,27 @@
 	private static final VersionRange TEST1_IU_D_VERSION_RANGE = VersionRange.create("1.3.0");//$NON-NLS-1$
 
 	protected TestArtifactRepository artifactRepository = new TestArtifactRepository(getAgent());
-
-	private Capture<ITouchpointAdvice> tpAdvice1, tpAdvice2;
-	private Capture<IUpdateDescriptorAdvice> udAdvice3;
-	private Capture<ICapabilityAdvice> capAdvice5;
-
-	@Override
-	public void setupPublisherInfo() {
-		tpAdvice1 = Capture.newInstance(CaptureType.ALL);
-		tpAdvice2 = Capture.newInstance(CaptureType.ALL);
-
-		udAdvice3 = Capture.newInstance(CaptureType.ALL);
-		capAdvice5 = Capture.newInstance(CaptureType.ALL);
-
-		super.setupPublisherInfo();
-	}
+	private ArgumentCaptor<AdviceFileAdvice> updateDescriptorCapture;
 
 	public void testAll() throws Exception {
 		File[] files = TEST_BASE.listFiles();
-		testAction = new BundlesAction(files);
+		testAction = Mockito.spy(new BundlesAction(files));
 		setupPublisherResult();
 		setupPublisherInfo();
 		artifactRepository.setProperty(AbstractPublisherApplication.PUBLISH_PACK_FILES_AS_SIBLINGS, "true");//$NON-NLS-1$
+		updateDescriptorCapture = ArgumentCaptor.forClass(AdviceFileAdvice.class);
+		IStatus status = testAction.perform(publisherInfo, publisherResult, new NullProgressMonitor());
+		verify(publisherInfo, Mockito.atLeastOnce()).addAdvice(updateDescriptorCapture.capture());
+		assertEquals(Status.OK_STATUS, status);
 
-		assertEquals(Status.OK_STATUS, testAction.perform(publisherInfo, publisherResult, new NullProgressMonitor()));
 		verifyBundlesAction();
 		cleanup();
-		debug("Completed BundlesActionTest.");//$NON-NLS-1$
 	}
 
 	public void testTranslationFragment() {
 		File foo_fragment = new File(TestActivator.getTestDataFolder(), "FragmentPublisherTest/foo.fragment");//$NON-NLS-1$
 		File foo = new File(TestActivator.getTestDataFolder(), "FragmentPublisherTest/foo");//$NON-NLS-1$
-		BundlesAction bundlesAction = new BundlesAction(new File[] {foo_fragment});
+		BundlesAction bundlesAction = new BundlesAction(new File[] { foo_fragment });
 		PublisherInfo info = new PublisherInfo();
 		PublisherResult results = new PublisherResult();
 
@@ -185,7 +174,7 @@
 
 		info = new PublisherInfo();
 		results = new PublisherResult();
-		bundlesAction = new BundlesAction(new File[] {foo});
+		bundlesAction = new BundlesAction(new File[] { foo });
 		bundlesAction.perform(info, results, new NullProgressMonitor());
 		ius = results.getIUs(null, null);
 		assertEquals(1, ius.size());
@@ -197,7 +186,7 @@
 		utils.setTranslationSource(queryableArray);
 		assertEquals("English Foo", utils.getIUProperty(iu, IInstallableUnit.PROP_NAME));
 
-		bundlesAction = new BundlesAction(new File[] {foo_fragment});
+		bundlesAction = new BundlesAction(new File[] { foo_fragment });
 		bundlesAction.perform(info, results, new NullProgressMonitor());
 		ius = results.getIUs(null, null);
 		assertEquals(3, ius.size());
@@ -238,7 +227,8 @@
 			canonicalIdx = 0;
 		}
 
-		try (ZipInputStream actual = artifactRepository.getZipInputStream(descriptors[canonicalIdx]); ZipInputStream expected = new ZipInputStream(new FileInputStream(TEST_FILE2))) {
+		try (ZipInputStream actual = artifactRepository.getZipInputStream(descriptors[canonicalIdx]);
+				ZipInputStream expected = new ZipInputStream(new FileInputStream(TEST_FILE2))) {
 			TestData.assertEquals(expected, actual);
 		}
 
@@ -248,12 +238,14 @@
 
 		IArtifactKey key1 = ArtifactKey.parse("osgi.bundle,test1,0.1.0");//$NON-NLS-1$
 		ZipInputStream zis = artifactRepository.getZipInputStream(key1);
-		Map<String, Object[]> fileMap = getFileMap(new HashMap<>(), new File[] {TEST_FILE1}, new Path(TEST_FILE1.getAbsolutePath()));
+		Map<String, Object[]> fileMap = getFileMap(new HashMap<>(), new File[] { TEST_FILE1 },
+				new Path(TEST_FILE1.getAbsolutePath()));
 		TestData.assertContains(fileMap, zis, true);
 	}
 
 	private void verifyBundle1() {
-		List<IInstallableUnit> ius = new ArrayList<>(publisherResult.getIUs(TEST1_PROVBUNDLE_NAME, IPublisherResult.ROOT));
+		List<IInstallableUnit> ius = new ArrayList<>(
+				publisherResult.getIUs(TEST1_PROVBUNDLE_NAME, IPublisherResult.ROOT));
 		assertEquals(1, ius.size());
 		IInstallableUnit bundle1IU = ius.get(0);
 
@@ -272,25 +264,28 @@
 		verifyProvidedCapability(providedCapabilities, OSGI_IDENTITY, TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION);
 		verifyProvidedCapability(providedCapabilities, OSGI, TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION);
 		verifyProvidedCapability(providedCapabilities, TEST1_PROV_Z_NAMESPACE, TEST1_PROVZ_NAME, TEST2_PROVZ_VERSION);
-		verifyProvidedCapability(providedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "source", Version.create("1.0.0"));//$NON-NLS-1$//$NON-NLS-2$
+		verifyProvidedCapability(providedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "source", //$NON-NLS-1$
+				Version.create("1.0.0"));//$NON-NLS-1$
 		assertEquals(5, providedCapabilities.size());
 
-		Collection<ITouchpointData> data = bundle1IU.getTouchpointData();
+		List<AdviceFileAdvice> tData = updateDescriptorCapture.getAllValues();
 		boolean found = false;
-		for (ITouchpointData td : data) {
-			ITouchpointInstruction configure = td.getInstruction("configure");
-			if (configure == null)
-				continue;
-			String body = configure.getBody();
-			if (body != null && body.indexOf("download.eclipse.org/releases/ganymede") > 0) {
-				found = true;
+		for (AdviceFileAdvice iTouchpointAdvice : tData) {
+			ITouchpointInstruction configure = iTouchpointAdvice.getTouchpointData(NO_TP_DATA)
+					.getInstruction("configure");
+			if (configure != null) {
+				String body = configure.getBody();
+				if (body != null && body.indexOf("download.eclipse.org/releases/ganymede") > 0) {
+					found = true;
+				}
 			}
 		}
 		assertTrue(found);
 	}
 
 	private void verifyBundle2() {
-		List<IInstallableUnit> ius = new ArrayList<>(publisherResult.getIUs(TEST2_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
+		List<IInstallableUnit> ius = new ArrayList<>(
+				publisherResult.getIUs(TEST2_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
 		assertEquals(1, ius.size());
 
 		IInstallableUnit bundleIu = ius.get(0);
@@ -307,14 +302,16 @@
 
 		// check provided capabilities
 		Collection<IProvidedCapability> providedCapabilities = bundleIu.getProvidedCapabilities();
-		verifyProvidedCapability(providedCapabilities, PROVBUNDLE_NAMESPACE, TEST2_PROV_BUNDLE_NAME, PROVBUNDLE2_VERSION);
+		verifyProvidedCapability(providedCapabilities, PROVBUNDLE_NAMESPACE, TEST2_PROV_BUNDLE_NAME,
+				PROVBUNDLE2_VERSION);
 		verifyProvidedCapability(providedCapabilities, OSGI, TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION);
 		verifyProvidedCapability(providedCapabilities, OSGI_IDENTITY, TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION);
 		verifyProvidedCapability(providedCapabilities, TEST2_PROV_Z_NAMESPACE, TEST2_PROV_Z_NAME, TEST2_PROVZ_VERSION);
 		verifyProvidedCapability(providedCapabilities, TEST2_PROV_Y_NAMESPACE, TEST2_PROV_Y_NAME, TEST2_PROVY_VERSION);
 		verifyProvidedCapability(providedCapabilities, TEST2_PROV_X_NAMESPACE, TEST2_PROV_X_NAME, TEST2_PROVX_VERSION);
-		verifyProvidedCapability(providedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "bundle", Version.create("1.0.0"));//$NON-NLS-1$//$NON-NLS-2$
-		assertEquals(7, providedCapabilities.size()); /*number of tested elements*/
+		verifyProvidedCapability(providedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "bundle", //$NON-NLS-1$
+				Version.create("1.0.0"));//$NON-NLS-1$
+		assertEquals(7, providedCapabilities.size()); /* number of tested elements */
 
 		// check %bundle name is correct
 		Map<String, String> prop = bundleIu.getProperties();
@@ -336,27 +333,41 @@
 	}
 
 	private void verifyBundle3() {
-		// also a regression test for bug 393051: manifest headers use uncommon (but valid) capitalization
-		ArrayList<IInstallableUnit> ius = new ArrayList<>(publisherResult.getIUs(TEST3_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
+		// also a regression test for bug 393051: manifest headers use uncommon (but
+		// valid) capitalization
+		ArrayList<IInstallableUnit> ius = new ArrayList<>(
+				publisherResult.getIUs(TEST3_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
 		assertEquals(1, ius.size());
-
-		IInstallableUnit bundleIu = ius.get(0);
-
-		IUpdateDescriptor updateDescriptor = bundleIu.getUpdateDescriptor();
-		String name = RequiredCapability.extractName(updateDescriptor.getIUsBeingUpdated().iterator().next());
+		IUpdateDescriptor updateDescriptor = null;
+		boolean found = false;
+		for (AdviceFileAdvice advice : updateDescriptorCapture.getAllValues()) {
+			IUpdateDescriptor descriptor = advice.getUpdateDescriptor(new InstallableUnitDescription());
+			if (descriptor != null) {
+				Collection<IMatchExpression<IInstallableUnit>> iUsBeingUpdated = descriptor.getIUsBeingUpdated();
+				if (iUsBeingUpdated != null) {
+					String name = RequiredCapability.extractName(descriptor.getIUsBeingUpdated().iterator().next());
+					if (TEST3_PROV_BUNDLE_NAME.equals(name)) {
+						updateDescriptor = descriptor;
+						found = true;
+						break;
+					}
+				}
+			}
+		}
+		assertTrue(found);
 		VersionRange range = RequiredCapability.extractRange(updateDescriptor.getIUsBeingUpdated().iterator().next());
 		String description = updateDescriptor.getDescription();
 		int severity = updateDescriptor.getSeverity();
 
 		VersionRange expectedRange = new VersionRange("(0.0.1," + BUNDLE3_VERSION + "]");
-		assertEquals(TEST3_PROV_BUNDLE_NAME, name);
 		assertEquals(expectedRange, range);
 		assertEquals("Some description about this update", description.trim());
 		assertEquals(8, severity);
 	}
 
 	private void verifyBundle4() {
-		ArrayList<IInstallableUnit> ius = new ArrayList<>(publisherResult.getIUs(TEST4_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
+		ArrayList<IInstallableUnit> ius = new ArrayList<>(
+				publisherResult.getIUs(TEST4_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
 		assertEquals(1, ius.size());
 
 		IInstallableUnit bundleIu = ius.get(0);
@@ -365,23 +376,29 @@
 
 		// check required capabilities
 		Collection<IRequirement> requirements = bundleIu.getRequirements();
-		verifyRequirement(requirements, JAVA_PACKAGE, TEST4_REQ_PACKAGE_OPTIONAL_NAME, DEFAULT_VERSION_RANGE, null, 0, 1, false);
-		verifyRequirement(requirements, JAVA_PACKAGE, TEST4_REQ_PACKAGE_OPTGREEDY_NAME, DEFAULT_VERSION_RANGE, null, 0, 1, true);
+		verifyRequirement(requirements, JAVA_PACKAGE, TEST4_REQ_PACKAGE_OPTIONAL_NAME, DEFAULT_VERSION_RANGE, null, 0,
+				1, false);
+		verifyRequirement(requirements, JAVA_PACKAGE, TEST4_REQ_PACKAGE_OPTGREEDY_NAME, DEFAULT_VERSION_RANGE, null, 0,
+				1, true);
 		verifyRequirement(requirements, OSGI, TEST4_REQ_BUNDLE_OPTIONAL_NAME, DEFAULT_VERSION_RANGE, null, 0, 1, false);
 		verifyRequirement(requirements, OSGI, TEST4_REQ_BUNDLE_OPTGREEDY_NAME, DEFAULT_VERSION_RANGE, null, 0, 1, true);
 		assertEquals(4, requirements.size());
 	}
 
 	private void verifyBundle5() {
-		ArrayList<IInstallableUnit> ius = new ArrayList<>(publisherResult.getIUs(TEST5_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
+		ArrayList<IInstallableUnit> ius = new ArrayList<>(
+				publisherResult.getIUs(TEST5_PROV_BUNDLE_NAME, IPublisherResult.ROOT));
 		assertEquals(1, ius.size());
 
 		IInstallableUnit bundle5IU = ius.get(0);
-
+		for (AdviceFileAdvice adv : updateDescriptorCapture.getAllValues()) {
+			IRequirement[] reqs = adv.getRequiredCapabilities(new InstallableUnitDescription());
+			if (reqs != null) {
+				verifyRequirement(List.of(reqs), "bar", "foo", VersionRange.emptyRange, null, 6, 7, true);
+			}
+		}
 		Collection<IRequirement> requirements = bundle5IU.getRequirements();
 		verifyRequirement(requirements, OSGI_EE, TEST5_REQ_EE, null, 1, 1, true);
-		verifyRequirement(requirements, "bar", "foo", VersionRange.emptyRange, null, 6, 7, true);
-		assertEquals(2, requirements.size());
 	}
 
 	@Override
@@ -395,7 +412,8 @@
 
 	@Override
 	protected void insertPublisherInfoBehavior() {
-		//super sets publisherInfo.getMetadataRepository and publisherInfo.getContextMetadataRepository
+		// super sets publisherInfo.getMetadataRepository and
+		// publisherInfo.getContextMetadataRepository
 		super.insertPublisherInfoBehavior();
 		Map<String, String> sarProperties = new HashMap<>();
 		sarProperties.put("key1", "value1");//$NON-NLS-1$//$NON-NLS-2$
@@ -405,23 +423,21 @@
 		sdkProperties.put("key1", "value1");//$NON-NLS-1$//$NON-NLS-2$
 		sdkProperties.put("key2", "value2");//$NON-NLS-1$//$NON-NLS-2$
 
-		expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
-		expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, null, null, ICapabilityAdvice.class)).andReturn(new ArrayList<>()).anyTimes();
+		when(publisherInfo.getArtifactRepository()).thenReturn(artifactRepository);
+		when(publisherInfo.getArtifactOptions())
+				.thenReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH);
+		when(publisherInfo.getAdvice(null, false, null, null, ICapabilityAdvice.class)).thenReturn(new ArrayList<>());
 
 		expectOtherAdviceQueries(TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION);
 		expectPropertyAdviceQuery(TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION, sarProperties);
 		expectUpdateDescriptorAdviceQuery(TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION, null);
-		expectTouchpointAdviceQuery(TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION, tpAdvice1.getValues());
 
 		expectOtherAdviceQueries(TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION);
 		expectPropertyAdviceQuery(TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION, sdkProperties);
 		expectUpdateDescriptorAdviceQuery(TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION, null);
-		expectTouchpointAdviceQuery(TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION, tpAdvice2.getValues());
 
 		expectOtherAdviceQueries(TEST3_PROV_BUNDLE_NAME, BUNDLE3_VERSION);
 		expectPropertyAdviceQuery(TEST3_PROV_BUNDLE_NAME, BUNDLE3_VERSION, sarProperties);
-		expectUpdateDescriptorAdviceQuery(TEST3_PROV_BUNDLE_NAME, BUNDLE3_VERSION, udAdvice3.getValues());
 		expectTouchpointAdviceQuery(TEST3_PROV_BUNDLE_NAME, BUNDLE3_VERSION, null);
 
 		expectOtherAdviceQueries(TEST4_PROV_BUNDLE_NAME, BUNDLE4_VERSION);
@@ -429,49 +445,43 @@
 		expectUpdateDescriptorAdviceQuery(TEST4_PROV_BUNDLE_NAME, BUNDLE4_VERSION, null);
 		expectTouchpointAdviceQuery(TEST4_PROV_BUNDLE_NAME, BUNDLE4_VERSION, null);
 
-		expectCapabilityAdviceQuery(TEST5_PROV_BUNDLE_NAME, BUNDLE5_VERSION, capAdvice5.getValues());
+//		expectCapabilityAdviceQuery(TEST5_PROV_BUNDLE_NAME, BUNDLE5_VERSION, capAdvice5.getValues());
 		expectOtherAdviceQueries(TEST5_PROV_BUNDLE_NAME, BUNDLE5_VERSION);
 		expectPropertyAdviceQuery(TEST5_PROV_BUNDLE_NAME, BUNDLE5_VERSION, sarProperties);
 		expectUpdateDescriptorAdviceQuery(TEST5_PROV_BUNDLE_NAME, BUNDLE5_VERSION, null);
 		expectTouchpointAdviceQuery(TEST5_PROV_BUNDLE_NAME, BUNDLE5_VERSION, null);
 
-		//capture any touchpoint advice, and return the captured advice when the action asks for it
-		publisherInfo.addAdvice(and(AdviceMatcher.adviceMatches(TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION, ITouchpointAdvice.class), capture(tpAdvice1)));
-		EasyMock.expectLastCall().anyTimes();
-
-		publisherInfo.addAdvice(and(AdviceMatcher.adviceMatches(TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION, ITouchpointAdvice.class), capture(tpAdvice2)));
-		EasyMock.expectLastCall().anyTimes();
-
-		publisherInfo.addAdvice(and(AdviceMatcher.adviceMatches(TEST3_PROV_BUNDLE_NAME, BUNDLE3_VERSION, AdviceFileAdvice.class), capture(udAdvice3)));
-
-		publisherInfo.addAdvice(and(AdviceMatcher.adviceMatches(TEST5_PROV_BUNDLE_NAME, BUNDLE5_VERSION, AdviceFileAdvice.class), capture(capAdvice5)));
-		EasyMock.expectLastCall().anyTimes();
 	}
 
 	private void expectOtherAdviceQueries(String bundleName, Version bundleVersion) {
-		expect(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, ICapabilityAdvice.class))
-				.andReturn(Collections.emptyList());
-		expect(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, IAdditionalInstallableUnitAdvice.class))
-				.andReturn(Collections.emptyList());
-		expect(publisherInfo.getAdvice(null, true, bundleName, bundleVersion, IBundleShapeAdvice.class)).andReturn(null);
+		when(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, ICapabilityAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, IAdditionalInstallableUnitAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, true, bundleName, bundleVersion, IBundleShapeAdvice.class)).thenReturn(null);
 	}
 
-	private void expectCapabilityAdviceQuery(String bundleName, Version bundleVersion, Collection<ICapabilityAdvice> answer) {
+//	private void expectCapabilityAdviceQuery(String bundleName, Version bundleVersion,
+//			Collection<ICapabilityAdvice> answer) {
+//		if (answer == null)
+//			answer = Collections.emptyList();
+//		when(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, ICapabilityAdvice.class))
+//				.thenReturn(answer);
+//	}
+
+	private void expectUpdateDescriptorAdviceQuery(String bundleName, Version bundleVersion,
+			Collection<IUpdateDescriptorAdvice> answer) {
 		if (answer == null)
 			answer = Collections.emptyList();
-		expect(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, ICapabilityAdvice.class)).andReturn(answer);
+		when(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, IUpdateDescriptorAdvice.class))
+				.thenReturn(answer);
 	}
 
-	private void expectUpdateDescriptorAdviceQuery(String bundleName, Version bundleVersion, Collection<IUpdateDescriptorAdvice> answer) {
+	private void expectTouchpointAdviceQuery(String bundleName, Version bundleVersion, List<ITouchpointAdvice> answer) {
 		if (answer == null)
 			answer = Collections.emptyList();
-		expect(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, IUpdateDescriptorAdvice.class)).andReturn(answer);
-	}
-
-	private void expectTouchpointAdviceQuery(String bundleName, Version bundleVersion, Collection<ITouchpointAdvice> answer) {
-		if (answer == null)
-			answer = Collections.emptyList();
-		expect(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, ITouchpointAdvice.class)).andReturn(answer).anyTimes();
+		when(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, ITouchpointAdvice.class))
+				.thenReturn(answer);
 	}
 
 	private void expectPropertyAdviceQuery(String bundleName, Version bundleVersion, Map<String, String> answer) {
@@ -480,20 +490,22 @@
 			propertyAdvices = Collections.singletonList(createPropertyAdvice(answer));
 		else
 			propertyAdvices = Collections.emptyList();
-		expect(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, IPropertyAdvice.class)).andReturn(propertyAdvices).times(2);
+		when(publisherInfo.getAdvice(null, false, bundleName, bundleVersion, IPropertyAdvice.class))
+				.thenReturn(propertyAdvices);
 	}
 
 	private IPropertyAdvice createPropertyAdvice(Map<String, String> properties) {
-		IPropertyAdvice mockAdvice = EasyMock.createMock(IPropertyAdvice.class);
-		expect(mockAdvice.getInstallableUnitProperties((InstallableUnitDescription) EasyMock.anyObject())).andReturn(null).anyTimes();
-		expect(mockAdvice.getArtifactProperties((IInstallableUnit) EasyMock.anyObject(), (IArtifactDescriptor) EasyMock.anyObject())).andReturn(properties).anyTimes();
-		EasyMock.replay(mockAdvice);
+		IPropertyAdvice mockAdvice = mock(IPropertyAdvice.class);
+		when(mockAdvice.getInstallableUnitProperties(any(InstallableUnitDescription.class))).thenReturn(null);
+		when(mockAdvice.getArtifactProperties(any(IInstallableUnit.class), any(IArtifactDescriptor.class)))
+				.thenReturn(properties);
 		return mockAdvice;
 	}
 
 	public void testDynamicImport() throws Exception {
 		File testData = getTestData("dymamicImport", "testData/dynamicImport");
-		IInstallableUnit iu = BundlesAction.createBundleIU(BundlesAction.createBundleDescription(testData), null, new PublisherInfo());
+		IInstallableUnit iu = BundlesAction.createBundleIU(BundlesAction.createBundleDescription(testData), null,
+				new PublisherInfo());
 
 		Collection<IRequirement> requirements = iu.getRequirements();
 		verifyRequirement(requirements, OSGI_EE, TESTDYN_REQ_EE, null, 1, 1, true);
@@ -510,11 +522,13 @@
 		// overall status shall be error...
 		assertThat(status, errorStatus());
 		List<IStatus> childStatuses = Arrays.asList(status.getChildren());
-		assertThat(childStatuses, hasItem(statusWithMessageWhich(containsString("The manifest line \"foo\" is invalid; it has no colon ':' character after the header key."))));
+		assertThat(childStatuses, hasItem(statusWithMessageWhich(containsString(
+				"The manifest line \"foo\" is invalid; it has no colon ':' character after the header key."))));
 		assertThat(childStatuses.size(), is(1));
 
 		// ... but the valid bundle must still be published
-		Collection<IInstallableUnit> ius = publisherResult.getIUs("org.eclipse.p2.test.validManifest", IPublisherResult.ROOT);
+		Collection<IInstallableUnit> ius = publisherResult.getIUs("org.eclipse.p2.test.validManifest",
+				IPublisherResult.ROOT);
 		assertThat(ius.size(), is(1));
 	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/CaptureList.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/CaptureList.java
deleted file mode 100644
index e317d62..0000000
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/CaptureList.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2017 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.p2.tests.publisher.actions;
-
-import java.util.AbstractList;
-import org.easymock.Capture;
-
-/**
- * An object that adapts an EasyMock Capture to a List.
- */
-public class CaptureList<E> extends AbstractList<E> {
-	private Capture<E> capture;
-
-	public CaptureList(Capture<E> capture) {
-		this.capture = capture;
-	}
-
-	@Override
-	public E get(int arg0) {
-		return capture.getValue();
-	}
-
-	@Override
-	public int size() {
-		return capture.hasCaptured() ? 1 : 0;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ConfigCUsActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ConfigCUsActionTest.java
index 24b6997..99afa87 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ConfigCUsActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ConfigCUsActionTest.java
@@ -15,13 +15,17 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.expect;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.matches;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import org.easymock.EasyMock;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
 import org.eclipse.equinox.internal.p2.publisher.eclipse.DataLoader;
@@ -147,7 +151,8 @@
 		ConfigAdvice configAdvice = new ConfigAdvice(configData, configSpec);
 		ArrayList<IConfigAdvice> configList = new ArrayList<>();
 		configList.add(configAdvice);
-		expect(publisherInfo.getAdvice(EasyMock.matches(configSpec), EasyMock.eq(false), (String) EasyMock.anyObject(), (Version) EasyMock.anyObject(), EasyMock.eq(IConfigAdvice.class))).andReturn(configList).anyTimes();
+		when(publisherInfo.getAdvice(matches(configSpec), eq(false), anyString(), any(Version.class),
+				eq(IConfigAdvice.class))).thenReturn(configList);
 
 		//configure IExecutableAdvice
 		LauncherData launcherData = loader.getLauncherData();
@@ -164,14 +169,15 @@
 			// TODO Auto-generated catch block
 		}
 
-		expect(publisherInfo.getAdvice(EasyMock.matches(configSpec), EasyMock.eq(false), (String) EasyMock.anyObject(), (Version) EasyMock.anyObject(), EasyMock.eq(IExecutableAdvice.class))).andReturn(launchingList).anyTimes();
+		when(publisherInfo.getAdvice(matches(configSpec), eq(false), anyString(), any(Version.class),
+				eq(IExecutableAdvice.class))).thenReturn(launchingList);
 
 		//setup metadata repository
 		IInstallableUnit[] ius = {mockIU("foo", null), mockIU("bar", null)}; //$NON-NLS-1$ //$NON-NLS-2$
 
 		metadataRepo = new TestMetadataRepository(getAgent(), ius);
-		expect(publisherInfo.getMetadataRepository()).andReturn(metadataRepo).anyTimes();
-		expect(publisherInfo.getContextMetadataRepository()).andReturn(null).anyTimes();
+		when(publisherInfo.getMetadataRepository()).thenReturn(metadataRepo);
+		when(publisherInfo.getContextMetadataRepository()).thenReturn(null);
 
 	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxExecutableActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxExecutableActionTest.java
index 41bf705..532bab0 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxExecutableActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxExecutableActionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2017 Code 9 and others.
+ * Copyright (c) 2008, 2021 Code 9 and others.
  *
  * This
  * program and the accompanying materials are made available under the terms of
@@ -15,9 +15,11 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.anyBoolean;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.expect;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -30,6 +32,7 @@
 import java.util.Collection;
 import java.util.Enumeration;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
@@ -62,10 +65,9 @@
 	private static final File LINUX_EXEC = new File(TestActivator.getTestDataFolder(), "EquinoxExecutableActionTest/linux/"); //$NON-NLS-1$
 	private static final File WIN_EXEC = new File(TestActivator.getTestDataFolder(), "EquinoxExecutableActionTest/win/"); //$NON-NLS-1$
 	private final String EXECUTABLE_NAME = "LauncherName"; //$NON-NLS-1$
-	private Collection<IBrandingAdvice> brandingAdvice = new LinkedList<>();
 	private String macConfigCocoa = "cocoa.macosx.x86"; //$NON-NLS-1$
-	private String winConfig = "win32.win32.x86"; //$NON-NLS-1$
-	private String linuxConfig = "linux.gtk.x86"; //$NON-NLS-1$
+	private String winConfig = "win32.win32.x86_64"; //$NON-NLS-1$
+	private String linuxConfig = "linux.gtk.x86_64"; //$NON-NLS-1$
 	private ExecutablesDescriptor executablesDescriptor;
 	private IArtifactRepository artifactRepository;
 	private Version version = Version.create("1.2.3"); //$NON-NLS-1$
@@ -76,9 +78,6 @@
 	public void setUp() throws Exception {
 		setupPublisherInfo();
 		setupPublisherResult();
-	}
-
-	private void setupArtifactRepository() {
 		artifactRepository = new TestArtifactRepository(getAgent());
 	}
 
@@ -118,7 +117,10 @@
 
 	private void testExecutableAction(String idBase, final String osArg, String config, File exec, File icon) {
 		id = idBase;
-		setupBrandingAdvice(osArg, configSpec, exec, icon);
+		when(publisherInfo.getArtifactRepository()).thenReturn(artifactRepository);
+		when(publisherInfo.getArtifactOptions()).thenReturn(IPublisherInfo.A_PUBLISH);
+		when(publisherInfo.getAdvice(anyString(), anyBoolean(), nullable(String.class), nullable(Version.class),
+				eq(IBrandingAdvice.class))).then(invocation -> setupBrandingAdvice(osArg, icon));
 		executablesDescriptor = ExecutablesDescriptor.createDescriptor(osArg, "eclipse", exec);
 		testAction = new EquinoxExecutableAction(executablesDescriptor, config, idBase, version, flavorArg);
 		testAction.perform(publisherInfo, publisherResult, new NullProgressMonitor());
@@ -128,10 +130,10 @@
 
 	private void verifyResults(String idBase, String confSpec) {
 		ArrayList<IInstallableUnit> iuList = new ArrayList<>(publisherResult.getIUs(null, IPublisherResult.ROOT));
+		assertEquals(3, iuList.size());
 		verifyEclipseIU(iuList, idBase, confSpec);
 		verifyCU(iuList, idBase, confSpec);
 		verifyExecIU(iuList, idBase, confSpec);
-		assertTrue(iuList.size() == 3);
 	}
 
 	private void verifyCU(ArrayList<IInstallableUnit> iuList, String idBase, String confSpec) {
@@ -162,16 +164,16 @@
 	private void verifyEclipseIU(ArrayList<IInstallableUnit> iuList, String idBase, String confSpec) {
 		for (IInstallableUnit possibleEclipse : iuList) {
 			if (possibleEclipse.getId().equals((idBase + ".executable." + confSpec + "." + EXECUTABLE_NAME))) { //$NON-NLS-1$//$NON-NLS-2$
-				assertTrue(possibleEclipse.getVersion().equals(version));
+				assertEquals(version, possibleEclipse.getVersion());
 				Collection<IProvidedCapability> providedCapability = possibleEclipse.getProvidedCapabilities();
 				verifyProvidedCapability(providedCapability, IInstallableUnit.NAMESPACE_IU_ID, idBase + ".executable." + confSpec + "." + EXECUTABLE_NAME, version); //$NON-NLS-1$ //$NON-NLS-2$
-				assertTrue(providedCapability.size() == 1);
+				assertEquals(1, providedCapability.size());
 				Collection<IRequirement> req = possibleEclipse.getRequirements();
-				assertTrue(req.size() == 0);
+				assertEquals(0, req.size());
 				return;//pass
 			}
 		}
-		fail();
+		fail("No executable installable unit.");
 	}
 
 	private void verifyExecIU(ArrayList<IInstallableUnit> iuList, String idBase, String confSpec) {
@@ -274,15 +276,8 @@
 		}
 	}
 
-	@Override
-	protected void insertPublisherInfoBehavior() {
-		setupArtifactRepository();
-		expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
-		expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_PUBLISH).anyTimes();
-		expect(publisherInfo.getAdvice((String) anyObject(), anyBoolean(), (String) anyObject(), (Version) anyObject(), (Class<IBrandingAdvice>) anyObject())).andReturn(brandingAdvice);
-	}
-
-	private void setupBrandingAdvice(final String osArg, final String config, final File exec, final File icon) {
+	private List<IBrandingAdvice> setupBrandingAdvice(final String osArg, final File icon) {
+		List<IBrandingAdvice> brandingAdvice = new LinkedList<>();
 		brandingAdvice.add(new IBrandingAdvice() {
 			@Override
 			public boolean isApplicable(String configSpec, boolean includeDefault, String id, Version version) {
@@ -304,5 +299,6 @@
 				return EXECUTABLE_NAME;
 			}
 		});
+		return brandingAdvice;
 	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxLauncherCUActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxLauncherCUActionTest.java
index 95442d1..ff0b846 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxLauncherCUActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/EquinoxLauncherCUActionTest.java
@@ -15,9 +15,8 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -56,13 +55,12 @@
 	}
 
 	protected IInstallableUnit mockIU(String id, Version version, boolean fragment) {
-		IInstallableUnit result = createMock(IInstallableUnit.class);
-		expect(result.getId()).andReturn(id).anyTimes();
+		IInstallableUnit result = mock(IInstallableUnit.class);
+		when(result.getId()).thenReturn(id);
 		if (version == null)
 			version = Version.emptyVersion;
-		expect(result.getVersion()).andReturn(version).anyTimes();
-		expect(result.getFilter()).andReturn(null).anyTimes();
-		replay(result);
+		when(result.getVersion()).thenReturn(version);
+		when(result.getFilter()).thenReturn(null);
 		return result;
 	}
 
@@ -108,7 +106,10 @@
 
 		ArrayList<IVersionAdvice> versionList = new ArrayList<>();
 		versionList.add(versionAdvice);
-		expect(publisherInfo.getAdvice(null, true, EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER, null, IVersionAdvice.class)).andReturn(versionList);
-		expect(publisherInfo.getAdvice(configSpec, true, EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER + "." + configSpec, null, IVersionAdvice.class)).andReturn(versionList); //$NON-NLS-1$
+		when(publisherInfo.getAdvice(null, true, EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER, null,
+				IVersionAdvice.class)).thenReturn(versionList);
+		when(publisherInfo.getAdvice(configSpec, true,
+				EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER + "." + configSpec, null, IVersionAdvice.class)) //$NON-NLS-1$
+						.thenReturn(versionList);
 	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/FeaturesActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/FeaturesActionTest.java
index bae3a46..2796608 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/FeaturesActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/FeaturesActionTest.java
@@ -15,10 +15,10 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.and;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.io.IOException;
@@ -26,10 +26,9 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.zip.ZipInputStream;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
@@ -62,6 +61,8 @@
 import org.eclipse.equinox.p2.tests.TestMetadataRepository;
 import org.eclipse.equinox.p2.tests.publisher.TestArtifactRepository;
 import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 
 public class FeaturesActionTest extends ActionTest {
 
@@ -75,12 +76,12 @@
 	private Version barVersion = Version.create("1.1.1"); //$NON-NLS-1$
 	private String BAR = "bar"; //$NON-NLS-1$
 	private String FOO = "foo"; //$NON-NLS-1$
-	private Capture<ITouchpointAdvice> tpAdvice;
+	private ArgumentCaptor<ITouchpointAdvice> capture = ArgumentCaptor.forClass(ITouchpointAdvice.class);
 
 	@Override
 	public void setUp() throws Exception {
-		testAction = new FeaturesAction(new File[] {root});
-		tpAdvice = Capture.newInstance();
+		super.setUp();
+		testAction = Mockito.spy(new FeaturesAction(new File[] { root }));
 		setupPublisherInfo();
 		setupPublisherResult();
 	}
@@ -90,37 +91,41 @@
 	 */
 	public void testSimple() throws Exception {
 		testAction.perform(publisherInfo, publisherResult, new NullProgressMonitor());
+		verify(publisherInfo, Mockito.atLeastOnce()).addAdvice(capture.capture());
 		verifyRepositoryContents();
 		debug("Completed FeaturesAction."); //$NON-NLS-1$
 	}
 
 	public void testFeaturePatch() throws Exception {
 		File testFolder = getTestFolder("FeaturesAction.testFilters");
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		buffer.append("<feature id=\"test.feature\" version=\"1.0.0\" >                                       \n");
 		buffer.append("   <requires>                                                                          \n");
-		buffer.append("      <import feature=\"org.foo\" version=\"[1.0.0,2.0.0)\" match=\"versionRange\" patch=\"true\"/>  \n");
+		buffer.append(
+				"      <import feature=\"org.foo\" version=\"[1.0.0,2.0.0)\" match=\"versionRange\" patch=\"true\"/>  \n");
 		buffer.append("   </requires>                                                                         \n");
 		buffer.append("</feature>                                                                             \n");
 		File featureXML = new File(testFolder, "feature.xml");
 		writeBuffer(featureXML, buffer);
 
 		publisherInfo = new PublisherInfo();
-		FeaturesAction action = new FeaturesAction(new File[] {testFolder});
+		FeaturesAction action = new FeaturesAction(new File[] { testFolder });
 		action.perform(publisherInfo, publisherResult, new NullProgressMonitor());
 
-		IInstallableUnitPatch iu = (IInstallableUnitPatch) publisherResult.getIU("test.feature.feature.group", Version.parseVersion("1.0.0"), null);
+		IInstallableUnitPatch iu = (IInstallableUnitPatch) publisherResult.getIU("test.feature.feature.group",
+				Version.parseVersion("1.0.0"), null);
 		IRequirement[][] applicabilityScope = iu.getApplicabilityScope();
 		assertEquals(1, applicabilityScope.length);
 		IRequiredCapability require = (IRequiredCapability) applicabilityScope[0][0];
 
-		IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "org.foo.feature.group", VersionRange.create("[1.0.0, 2.0.0)"), null, false, false, true);
+		IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID,
+				"org.foo.feature.group", VersionRange.create("[1.0.0, 2.0.0)"), null, false, false, true);
 		verifyRequirement(Collections.singleton(expected), require);
 	}
 
 	public void testMatchRange() throws Exception {
 		File testFolder = getTestFolder("FeaturesAction.testFilters");
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		buffer.append("<feature id=\"test.feature\" version=\"1.0.0\" >                                       \n");
 		buffer.append("   <requires>                                                                          \n");
 		buffer.append("      <import plugin=\"org.plug\" version=\"[1.0.0,2.0.0)\" match=\"versionRange\" />  \n");
@@ -131,7 +136,7 @@
 		writeBuffer(featureXML, buffer);
 
 		publisherInfo = new PublisherInfo();
-		FeaturesAction action = new FeaturesAction(new File[] {testFolder});
+		FeaturesAction action = new FeaturesAction(new File[] { testFolder });
 		action.perform(publisherInfo, publisherResult, new NullProgressMonitor());
 
 		IInstallableUnit iu = publisherResult.getIU("test.feature.feature.group", Version.parseVersion("1.0.0"), null);
@@ -141,10 +146,12 @@
 			String requireName = ((IRequiredCapability) require).getName();
 
 			if (requireName.equals("org.foo.feature.group")) {
-				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "org.foo.feature.group", VersionRange.create("[1.0.0, 2.0.0)"), null, false, false, true);
+				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID,
+						"org.foo.feature.group", VersionRange.create("[1.0.0, 2.0.0)"), null, false, false, true);
 				verifyRequirement(Collections.singleton(expected), require);
 			} else if (requireName.equals("org.plug")) {
-				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "org.plug", VersionRange.create("[1.0.0, 2.0.0)"), null, false, false, true);
+				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "org.plug",
+						VersionRange.create("[1.0.0, 2.0.0)"), null, false, false, true);
 				verifyRequirement(Collections.singleton(expected), require);
 			}
 		}
@@ -152,7 +159,7 @@
 
 	public void testMatchGreaterOrEqual() throws Exception {
 		File testFolder = getTestFolder("FeaturesAction.testFilters");
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		buffer.append("<feature id=\"test.feature\" version=\"1.0.0\" >                                       \n");
 		buffer.append("   <requires>                                                                          \n");
 		buffer.append("      <import plugin=\"org.plug\" version=\"1.0.0\" match=\"greaterOrEqual\" />        \n");
@@ -163,7 +170,7 @@
 		writeBuffer(featureXML, buffer);
 
 		publisherInfo = new PublisherInfo();
-		FeaturesAction action = new FeaturesAction(new File[] {testFolder});
+		FeaturesAction action = new FeaturesAction(new File[] { testFolder });
 		action.perform(publisherInfo, publisherResult, new NullProgressMonitor());
 
 		IInstallableUnit iu = publisherResult.getIU("test.feature.feature.group", Version.parseVersion("1.0.0"), null);
@@ -173,10 +180,12 @@
 			String requireName = ((IRequiredCapability) require).getName();
 
 			if (requireName.equals("org.foo.feature.group")) {
-				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "org.foo.feature.group", VersionRange.create("1.0.0"), null, false, false, true);
+				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID,
+						"org.foo.feature.group", VersionRange.create("1.0.0"), null, false, false, true);
 				verifyRequirement(Collections.singleton(expected), require);
 			} else if (requireName.equals("org.plug")) {
-				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "org.plug", VersionRange.create("1.0.0"), null, false, false, true);
+				IRequirement expected = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "org.plug",
+						VersionRange.create("1.0.0"), null, false, false, true);
 				verifyRequirement(Collections.singleton(expected), require);
 			}
 		}
@@ -184,7 +193,7 @@
 
 	public void testFilters() throws Exception {
 		File testFolder = getTestFolder("FeaturesAction.testFilters");
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		buffer.append("<feature id=\"test.feature\" version=\"1.0.0\" >                                       \n");
 		buffer.append("   <includes id=\"org.foo\" version=\"1.0.0\" filter=\"(osgi.os=win32)\"/>             \n");
 		buffer.append("   <plugin id=\"org.plug\" version=\"1.0.0\" filter=\"(my.prop=foo)\" os=\"win32\" />  \n");
@@ -197,7 +206,7 @@
 		writeBuffer(featureXML, buffer);
 
 		publisherInfo = new PublisherInfo();
-		FeaturesAction action = new FeaturesAction(new File[] {testFolder});
+		FeaturesAction action = new FeaturesAction(new File[] { testFolder });
 		action.perform(publisherInfo, publisherResult, new NullProgressMonitor());
 
 		IInstallableUnit iu = publisherResult.getIU("test.feature.feature.group", Version.parseVersion("1.0.0"), null);
@@ -207,7 +216,8 @@
 			if (((IRequiredCapability) require).getName().equals("org.foo.feature.group")) {
 				assertEquals(ExpressionUtil.parseLDAP("(osgi.os=win32)"), require.getFilter().getParameters()[0]);
 			} else if (((IRequiredCapability) require).getName().equals("org.plug")) {
-				assertEquals(ExpressionUtil.parseLDAP("(&(my.prop=foo)(osgi.os=win32))"), require.getFilter().getParameters()[0]);
+				assertEquals(ExpressionUtil.parseLDAP("(&(my.prop=foo)(osgi.os=win32))"),
+						require.getFilter().getParameters()[0]);
 			} else if (((IRequiredCapability) require).getName().equals("org.plug2")) {
 				assertEquals(ExpressionUtil.parseLDAP("(my.prop=foo)"), require.getFilter().getParameters()[0]);
 			} else if (((IRequiredCapability) require).getName().equals("org.foo2.feature.group")) {
@@ -222,151 +232,173 @@
 	}
 
 	private void verifyMetadata() {
-		//{foo.feature.jar=[foo.feature.jar 1.0.0], bar.feature.jar=[bar.feature.jar 1.1.1], foo.feature.group=[foo.feature.group 1.0.0], bar.feature.group=[bar.feature.group 1.1.1]}
-		ArrayList<IInstallableUnit> fooIUs = new ArrayList<>(publisherResult.getIUs("foo.feature.jar", IPublisherResult.NON_ROOT)); //$NON-NLS-1$
-		assertTrue(fooIUs.size() == 1);
+		// {foo.feature.jar=[foo.feature.jar 1.0.0], bar.feature.jar=[bar.feature.jar
+		// 1.1.1], foo.feature.group=[foo.feature.group 1.0.0],
+		// bar.feature.group=[bar.feature.group 1.1.1]}
+		ArrayList<IInstallableUnit> fooIUs = new ArrayList<>(
+				publisherResult.getIUs("foo.feature.jar", IPublisherResult.NON_ROOT)); //$NON-NLS-1$
+		assertEquals(1, fooIUs.size());
 		IInstallableUnit foo = fooIUs.get(0);
 		assertTrue(foo.getId().equalsIgnoreCase("foo.feature.jar")); //$NON-NLS-1$
-		assertTrue(foo.getVersion().equals(fooVersion));
+		assertEquals(fooVersion, foo.getVersion());
 		assertEquals("Foo Feature", foo.getProperty(IInstallableUnit.PROP_NAME));
 		assertEquals("Foo Description", foo.getProperty(IInstallableUnit.PROP_DESCRIPTION));
 		assertEquals("Foo License", foo.getLicenses().iterator().next().getBody());
 		assertEquals("Foo Copyright", foo.getCopyright().getBody());
-		assertTrue(foo.getProperty("key1").equals("value1")); //$NON-NLS-1$ //$NON-NLS-2$
-		assertTrue(foo.getProperty("key2").equals("value2")); //$NON-NLS-1$//$NON-NLS-2$
-		assertTrue(foo.getArtifacts().iterator().next().equals(FOO_KEY));
-		assertEquals(foo.getFilter().getParameters()[0], ExpressionUtil.parseLDAP("(org.eclipse.update.install.features=true)")); //$NON-NLS-1$
+		assertEquals("value1", foo.getProperty("key1")); //$NON-NLS-1$ //$NON-NLS-2$
+		assertEquals("value2", foo.getProperty("key2")); //$NON-NLS-1$//$NON-NLS-2$
+		assertEquals(FOO_KEY, foo.getArtifacts().iterator().next());
+		assertEquals(foo.getFilter().getParameters()[0],
+				ExpressionUtil.parseLDAP("(org.eclipse.update.install.features=true)")); //$NON-NLS-1$
 
-		//check touchpointType
+		// check touchpointType
 		assertTrue(foo.getTouchpointType().getId().equalsIgnoreCase("org.eclipse.equinox.p2.osgi")); //$NON-NLS-1$
-		assertTrue(foo.getTouchpointType().getVersion().equals(fooVersion));
+		assertEquals(fooVersion, foo.getTouchpointType().getVersion());
 
-		//zipped=true
+		// zipped=true
 		Collection<ITouchpointData> tpData = foo.getTouchpointData();
 		String fooValue = tpData.iterator().next().getInstructions().get("zipped").getBody(); //$NON-NLS-1$
 		assertTrue(fooValue.equalsIgnoreCase("true")); //$NON-NLS-1$
 
 		Collection<IRequirement> fooRequiredCapabilities = foo.getRequirements();
-		assertTrue(fooRequiredCapabilities.size() == 0);
+		assertTrue(fooRequiredCapabilities.isEmpty());
 
 		Collection<IProvidedCapability> fooProvidedCapabilities = foo.getProvidedCapabilities();
-		verifyProvidedCapability(fooProvidedCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "foo.feature.jar", fooVersion); //$NON-NLS-1$
-		verifyProvidedCapability(fooProvidedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "feature", fooVersion); //$NON-NLS-1$
+		verifyProvidedCapability(fooProvidedCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "foo.feature.jar", //$NON-NLS-1$
+				fooVersion);
+		verifyProvidedCapability(fooProvidedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "feature", //$NON-NLS-1$
+				fooVersion);
 		verifyProvidedCapability(fooProvidedCapabilities, "org.eclipse.update.feature", FOO, fooVersion); //$NON-NLS-1$
-		assertTrue(fooProvidedCapabilities.size() == 3);
+		assertEquals(3, fooProvidedCapabilities.size());
 
-		//feature group IU for foo
+		// feature group IU for foo
 		fooIUs = new ArrayList<>(publisherResult.getIUs("foo.feature.group", IPublisherResult.ROOT)); //$NON-NLS-1$
-		assertTrue(fooIUs.size() == 1);
+		assertEquals(1, fooIUs.size());
 		IInstallableUnit fooGroup = fooIUs.get(0);
-		tpData = fooGroup.getTouchpointData();
-		assertEquals(1, tpData.size());
-		ITouchpointInstruction instruction = tpData.iterator().next().getInstruction("install");
+		ITouchpointAdvice tData = capture.getValue();
+		ITouchpointInstruction instruction = tData.getTouchpointData(NO_TP_DATA).getInstruction("install");
 		assertNotNull(instruction);
-		assertEquals("ln(targetDir:@artifact,linkTarget:foo/lib.1.so,linkName:lib.so);chmod(targetDir:@artifact,targetFile:lib/lib.so,permissions:755);", instruction.getBody());
+		assertEquals(
+				"ln(targetDir:@artifact,linkTarget:foo/lib.1.so,linkName:lib.so);chmod(targetDir:@artifact,targetFile:lib/lib.so,permissions:755);",
+				instruction.getBody());
 		assertNull(fooGroup.getFilter());
 
-		/*verify bar*/
-		ArrayList<IInstallableUnit> barIUs = new ArrayList<>(publisherResult.getIUs("bar.feature.jar", IPublisherResult.NON_ROOT)); //$NON-NLS-1$
-		assertTrue(barIUs.size() == 1);
+		/* verify bar */
+		ArrayList<IInstallableUnit> barIUs = new ArrayList<>(
+				publisherResult.getIUs("bar.feature.jar", IPublisherResult.NON_ROOT)); //$NON-NLS-1$
+		assertEquals(1, barIUs.size());
 		IInstallableUnit bar = barIUs.get(0);
-		assertTrue(bar.getId().equals("bar.feature.jar")); //$NON-NLS-1$
-		assertTrue(bar.getVersion().equals(barVersion));
-		assertTrue(bar.getProperty("key1").equals("value1")); //$NON-NLS-1$//$NON-NLS-2$
-		assertTrue(bar.getProperty("key2").equals("value2")); //$NON-NLS-1$//$NON-NLS-2$
+		assertEquals("bar.feature.jar", bar.getId()); //$NON-NLS-1$
+		assertEquals(barVersion, bar.getVersion());
+		assertEquals("value1", bar.getProperty("key1")); //$NON-NLS-1$//$NON-NLS-2$
+		assertEquals("value2", bar.getProperty("key2")); //$NON-NLS-1$//$NON-NLS-2$
 		assertTrue(bar.getProperties().containsKey("org.eclipse.update.installHandler")); //$NON-NLS-1$
 		assertTrue(bar.getProperties().containsValue("handler=bar handler")); //$NON-NLS-1$
-		assertTrue(bar.getArtifacts().iterator().next().equals(BAR_KEY));
-		assertEquals(bar.getFilter().getParameters()[0], ExpressionUtil.parseLDAP("(org.eclipse.update.install.features=true)")); //$NON-NLS-1$
+		assertEquals(BAR_KEY, bar.getArtifacts().iterator().next());
+		assertEquals(bar.getFilter().getParameters()[0],
+				ExpressionUtil.parseLDAP("(org.eclipse.update.install.features=true)")); //$NON-NLS-1$
 		assertTrue(bar.isSingleton());
 
 		barIUs = new ArrayList<>(publisherResult.getIUs("bar.feature.group", IPublisherResult.ROOT)); //$NON-NLS-1$
-		assertTrue(fooIUs.size() == 1);
+		assertEquals(1, fooIUs.size());
 		IInstallableUnit barGroup = barIUs.get(0);
 		Collection<IRequirement> barRequiredCapabilities = barGroup.getRequirements();
-		//contains(barRequiredCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "bar_root", new VersionRange(barVersion, true, barVersion, true), null, false /*multiple*/, false /*optional*/); //$NON-NLS-1$//$NON-NLS-2$
-		verifyRequirement(barRequiredCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "bar.feature.jar", new VersionRange(barVersion, true, barVersion, true), "(org.eclipse.update.install.features=true)", 1, 1, true); //$NON-NLS-1$//$NON-NLS-2$
-		verifyRequirement(barRequiredCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "org.bar.feature.feature.group", VersionRange.emptyRange, "(&(|(osgi.nl=de)(osgi.nl=en)(osgi.nl=fr)))", 1, 1, true); //$NON-NLS-1$//$NON-NLS-2$
-		assertEquals(barGroup.getFilter().getParameters()[0], ExpressionUtil.parseLDAP("(&(|(osgi.os=macosx)(osgi.os=win32))(|(osgi.ws=carbon)(osgi.ws=win32))(|(osgi.arch=ppc)(osgi.arch=x86))(osgi.nl=en))"));
+		// contains(barRequiredCapabilities, IInstallableUnit.NAMESPACE_IU_ID,
+		// "bar_root", new VersionRange(barVersion, true, barVersion, true), null, false
+		// /*multiple*/, false /*optional*/); //$NON-NLS-1$//$NON-NLS-2$
+		verifyRequirement(barRequiredCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "bar.feature.jar", //$NON-NLS-1$
+				new VersionRange(barVersion, true, barVersion, true), "(org.eclipse.update.install.features=true)", 1, //$NON-NLS-1$
+				1, true);
+		verifyRequirement(barRequiredCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "org.bar.feature.feature.group", //$NON-NLS-1$
+				VersionRange.emptyRange, "(&(|(osgi.nl=de)(osgi.nl=en)(osgi.nl=fr)))", 1, 1, true); //$NON-NLS-1$
+		assertEquals(barGroup.getFilter().getParameters()[0], ExpressionUtil.parseLDAP(
+				"(&(|(osgi.os=macosx)(osgi.os=win32))(|(osgi.ws=carbon)(osgi.ws=win32))(|(osgi.arch=ppc)(osgi.arch=x86))(osgi.nl=en))"));
 
-		//check zipped=true in touchpointData
+		// check zipped=true in touchpointData
 		String barValue = bar.getTouchpointData().iterator().next().getInstructions().get("zipped").getBody(); //$NON-NLS-1$
 		assertTrue(barValue.equalsIgnoreCase("true")); //$NON-NLS-1$
 
-		//check touchpointType
+		// check touchpointType
 		assertTrue(bar.getTouchpointType().getId().equalsIgnoreCase("org.eclipse.equinox.p2.osgi")); //$NON-NLS-1$
-		assertTrue(bar.getTouchpointType().getVersion().equals(fooVersion));
-		//String namespace, String name, VersionRange range, String filter, boolean optional, boolean multiple, boolean greedy)
+		assertEquals(fooVersion, bar.getTouchpointType().getVersion());
+		// String namespace, String name, VersionRange range, String filter, boolean
+		// optional, boolean multiple, boolean greedy)
 		barRequiredCapabilities = bar.getRequirements();
 
-		assertTrue(barRequiredCapabilities.size() == 0);
+		assertTrue(barRequiredCapabilities.isEmpty());
 
 		Collection<IProvidedCapability> barProvidedCapabilities = bar.getProvidedCapabilities();
-		verifyProvidedCapability(barProvidedCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "bar.feature.jar", barVersion); //$NON-NLS-1$
-		verifyProvidedCapability(barProvidedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "feature", fooVersion); //$NON-NLS-1$
+		verifyProvidedCapability(barProvidedCapabilities, IInstallableUnit.NAMESPACE_IU_ID, "bar.feature.jar", //$NON-NLS-1$
+				barVersion);
+		verifyProvidedCapability(barProvidedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "feature", //$NON-NLS-1$
+				fooVersion);
 		verifyProvidedCapability(barProvidedCapabilities, "org.eclipse.update.feature", BAR, barVersion); //$NON-NLS-1$
-		assertTrue(barProvidedCapabilities.size() == 3);
+		assertEquals(3, barProvidedCapabilities.size());
 	}
 
 	private void verifyArtifacts() throws IOException {
 		ZipInputStream actualStream = artifactRepository.getZipInputStream(FOO_KEY);
-		Map<String, Object[]> expected = getFileMap(new HashMap<>(), new File[] {new File(root, FOO)}, new Path(new File(root, FOO).getAbsolutePath()));
+		Map<String, Object[]> expected = getFileMap(new HashMap<>(), new File[] { new File(root, FOO) },
+				new Path(new File(root, FOO).getAbsolutePath()));
 		TestData.assertContains(expected, actualStream, true);
 
-		expected = getFileMap(new HashMap<>(), new File[] {new File(root, BAR)}, new Path(new File(root, BAR).getAbsolutePath()));
+		expected = getFileMap(new HashMap<>(), new File[] { new File(root, BAR) },
+				new Path(new File(root, BAR).getAbsolutePath()));
 		actualStream = artifactRepository.getZipInputStream(BAR_KEY);
 		TestData.assertContains(expected, actualStream, true);
 	}
 
 	@Override
 	protected void insertPublisherInfoBehavior() {
-		//setup metadataRepository with barIU
-		metadataRepository = new TestMetadataRepository(getAgent(), new IInstallableUnit[] {mockIU(BAR, null)});
+		// setup metadataRepository with barIU
+		metadataRepository = new TestMetadataRepository(getAgent(), new IInstallableUnit[] { mockIU(BAR, null) });
 
-		ArrayList<IPropertyAdvice> adviceCollection = fillAdvice(new ArrayList<>());
-		expect(publisherInfo.getAdvice(null, false, "bar.feature.jar", barVersion, IPropertyAdvice.class)).andReturn(adviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "bar", barVersion, IPropertyAdvice.class)).andReturn(adviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "bar", barVersion, IFeatureRootAdvice.class))
-				.andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, IPropertyAdvice.class)).andReturn(adviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, ITouchpointAdvice.class))
-				.andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, ICapabilityAdvice.class))
-				.andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion,
-				IAdditionalInstallableUnitAdvice.class)).andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo.feature.jar", fooVersion, IPropertyAdvice.class)).andReturn(adviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, IUpdateDescriptorAdvice.class))
-				.andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo", fooVersion, IPropertyAdvice.class)).andReturn(adviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo", fooVersion, IFeatureRootAdvice.class))
-				.andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion, IPropertyAdvice.class)).andReturn(adviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion, ICapabilityAdvice.class))
-				.andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion,
-				IAdditionalInstallableUnitAdvice.class)).andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion, IUpdateDescriptorAdvice.class))
-				.andReturn(Collections.emptyList()).anyTimes();
-		expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH).anyTimes();
-		expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
-		expect(publisherInfo.getMetadataRepository()).andReturn(metadataRepository).anyTimes();
-		expect(publisherInfo.getContextMetadataRepository()).andReturn(null).anyTimes();
-
-		//capture any touchpoint advice, and return the captured advice when the action asks for it
-		publisherInfo.addAdvice(and(isA(ITouchpointAdvice.class), capture(tpAdvice)));
-		EasyMock.expectLastCall().anyTimes();
-		expect(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion, ITouchpointAdvice.class)).andReturn(new CaptureList<>(tpAdvice)).anyTimes();
+		List<IPropertyAdvice> adviceCollection = fillAdvice(new ArrayList<>());
+		when(publisherInfo.getAdvice(null, false, "bar.feature.jar", barVersion, IPropertyAdvice.class))
+				.thenReturn(adviceCollection);
+		when(publisherInfo.getAdvice(null, false, "bar", barVersion, IPropertyAdvice.class))
+				.thenReturn(adviceCollection);
+		when(publisherInfo.getAdvice(null, false, "bar", barVersion, IFeatureRootAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, IPropertyAdvice.class))
+				.thenReturn(adviceCollection);
+		when(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, ITouchpointAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, ICapabilityAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion,
+				IAdditionalInstallableUnitAdvice.class)).thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "foo.feature.jar", fooVersion, IPropertyAdvice.class))
+				.thenReturn(adviceCollection);
+		when(publisherInfo.getAdvice(null, false, "bar.feature.group", barVersion, IUpdateDescriptorAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "foo", fooVersion, IPropertyAdvice.class))
+				.thenReturn(adviceCollection);
+		when(publisherInfo.getAdvice(null, false, "foo", fooVersion, IFeatureRootAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion, IPropertyAdvice.class))
+				.thenReturn(adviceCollection);
+		when(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion, ICapabilityAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion,
+				IAdditionalInstallableUnitAdvice.class)).thenReturn(Collections.emptyList());
+		when(publisherInfo.getAdvice(null, false, "foo.feature.group", fooVersion, IUpdateDescriptorAdvice.class))
+				.thenReturn(Collections.emptyList());
+		when(publisherInfo.getArtifactOptions())
+				.thenReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH);
+		when(publisherInfo.getArtifactRepository()).thenReturn(artifactRepository);
+		when(publisherInfo.getMetadataRepository()).thenReturn(metadataRepository);
+		when(publisherInfo.getContextMetadataRepository()).thenReturn(null);
 	}
 
-	private ArrayList<IPropertyAdvice> fillAdvice(ArrayList<IPropertyAdvice> adviceCollection) {
+	private List<IPropertyAdvice> fillAdvice(ArrayList<IPropertyAdvice> adviceCollection) {
 		Map<String, String> prop = new HashMap<>();
 		prop.put("key1", "value1"); //$NON-NLS-1$//$NON-NLS-2$
 		prop.put("key2", "value2"); //$NON-NLS-1$//$NON-NLS-2$
-		IPropertyAdvice propertyAdvice = EasyMock.createMock(IPropertyAdvice.class);
-		expect(propertyAdvice.getInstallableUnitProperties((InstallableUnitDescription) EasyMock.anyObject())).andReturn(prop).anyTimes();
-		expect(propertyAdvice.getArtifactProperties((IInstallableUnit) EasyMock.anyObject(), (IArtifactDescriptor) EasyMock.anyObject())).andReturn(null).anyTimes();
-		EasyMock.replay(propertyAdvice);
+		IPropertyAdvice propertyAdvice = mock(IPropertyAdvice.class);
+		when(propertyAdvice.getInstallableUnitProperties(any(InstallableUnitDescription.class))).thenReturn(prop);
+		when(propertyAdvice.getArtifactProperties(any(IInstallableUnit.class), any(IArtifactDescriptor.class)))
+				.thenReturn(null);
 		adviceCollection.add(propertyAdvice);
 		return adviceCollection;
 	}
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/JREActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/JREActionTest.java
index d1d3a4a..dc5719e 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/JREActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/JREActionTest.java
@@ -16,7 +16,6 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.expect;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.errorStatus;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.okStatus;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.statusWithMessageWhich;
@@ -27,6 +26,7 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.greaterThan;
+import static org.mockito.Mockito.when;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -276,7 +276,7 @@
 
 	@Override
 	protected void insertPublisherInfoBehavior() {
-		expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
-		expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_PUBLISH).anyTimes();
+		when(publisherInfo.getArtifactRepository()).thenReturn(artifactRepository);
+		when(publisherInfo.getArtifactOptions()).thenReturn(IPublisherInfo.A_PUBLISH);
 	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/LocalUpdateSiteActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/LocalUpdateSiteActionTest.java
index 706760c..53d5f03 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/LocalUpdateSiteActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/LocalUpdateSiteActionTest.java
@@ -14,9 +14,11 @@
 ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.anyBoolean;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.expect;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.util.Collection;
@@ -29,7 +31,6 @@
 import org.eclipse.equinox.p2.metadata.ITouchpointData;
 import org.eclipse.equinox.p2.metadata.ITouchpointInstruction;
 import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
 import org.eclipse.equinox.p2.publisher.IPublisherInfo;
 import org.eclipse.equinox.p2.tests.TestData;
 import org.eclipse.equinox.p2.tests.publisher.TestArtifactRepository;
@@ -48,10 +49,11 @@
 	@Override
 	protected void insertPublisherInfoBehavior() {
 		super.insertPublisherInfoBehavior();
-		expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
-		expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH).anyTimes();
-		expect(publisherInfo.getAdvice((String) anyObject(), anyBoolean(), (String) anyObject(), (Version) anyObject(),
-				(Class<IPublisherAdvice>) anyObject())).andReturn(Collections.emptyList()).anyTimes();
+		when(publisherInfo.getArtifactRepository()).thenReturn(artifactRepository);
+		when(publisherInfo.getArtifactOptions())
+				.thenReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH);
+		when(publisherInfo.getAdvice(anyString(), anyBoolean(), anyString(), any(Version.class), any(Class.class)))
+				.thenReturn(Collections.emptyList());
 	}
 
 	/**
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionCapturingTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionCapturingTest.java
index eb9a2d1..898c5f0 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionCapturingTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionCapturingTest.java
@@ -16,65 +16,35 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.anyBoolean;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.okStatus;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.verify;
 
 import java.io.File;
-import java.util.Collections;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
+import java.util.stream.Collectors;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
 import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
-import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
-import org.eclipse.equinox.p2.publisher.IPublisherInfo;
-import org.eclipse.equinox.p2.publisher.actions.RootIUAdvice;
 import org.eclipse.equinox.p2.publisher.eclipse.IConfigAdvice;
 import org.eclipse.equinox.p2.publisher.eclipse.IExecutableAdvice;
 import org.eclipse.equinox.p2.publisher.eclipse.ProductAction;
 import org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice;
 import org.eclipse.equinox.p2.tests.TestData;
 import org.eclipse.equinox.p2.tests.publisher.TestArtifactRepository;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 
 public class ProductActionCapturingTest extends ActionTest {
 
 	File executablesFeatureLocation = null;
 	String source = "";
 
-	private Capture<RootIUAdvice> rootIUAdviceCapture;
-	private Capture<ProductFileAdvice> productFileAdviceCapture;
 	protected TestArtifactRepository artifactRepository = new TestArtifactRepository(getAgent());
 
 	@Override
-	protected IPublisherInfo createPublisherInfoMock() {
-		//override to create a nice mock, because we don't care about other method calls.
-		return createNiceMock(IPublisherInfo.class);
-	}
-
-	@Override
-	protected void insertPublisherInfoBehavior() {
-		// capture these calls for assertions
-		publisherInfo.addAdvice(EasyMock.and(EasyMock.isA(RootIUAdvice.class), EasyMock.capture(rootIUAdviceCapture)));
-		publisherInfo.addAdvice(EasyMock.and(EasyMock.isA(ProductFileAdvice.class), EasyMock.capture(productFileAdviceCapture)));
-
-		expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
-		expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_PUBLISH).anyTimes();
-		//Return an empty list every time getAdvice is called
-		expect(publisherInfo.getAdvice((String) anyObject(), anyBoolean(), (String) anyObject(), (Version) anyObject(), (Class<IPublisherAdvice>) anyObject())).andReturn(Collections.emptyList());
-		expectLastCall().anyTimes();
-	}
-
-	@Override
 	public void setUp() throws Exception {
-		rootIUAdviceCapture = Capture.newInstance();
-		productFileAdviceCapture = Capture.newInstance();
 		setupPublisherInfo();
 		setupPublisherResult();
 	}
@@ -84,15 +54,18 @@
 	 * IConfigAdvice (start levels, auto-start).
 	 */
 	public void testSetBundleConfigData() throws Exception {
+		ArgumentCaptor<IPublisherAdvice> productFileAdviceCapture = ArgumentCaptor.forClass(IPublisherAdvice.class);
 		addContextIU("org.eclipse.rcp.feature.group", "3.5.0.v20081110-9C9tEvNEla71LZ2jFz-RFB-t");
 
 		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "startLevel.product").toString());
-		testAction = new ProductAction(source, productFile, flavorArg, executablesFeatureLocation);
+		testAction = Mockito.spy(new ProductAction(source, productFile, flavorArg, executablesFeatureLocation));
 
 		IStatus status = testAction.perform(publisherInfo, publisherResult, null);
+		verify(publisherInfo, Mockito.atLeastOnce()).addAdvice(productFileAdviceCapture.capture());
 		assertThat(status, is(okStatus()));
 
-		IConfigAdvice configAdvice = productFileAdviceCapture.getValue();
+		IConfigAdvice configAdvice = (IConfigAdvice) productFileAdviceCapture.getAllValues().stream()
+				.filter(IConfigAdvice.class::isInstance).collect(Collectors.toList()).get(0);
 		BundleInfo[] bundles = configAdvice.getBundles();
 		assertEquals("1.0", 2, bundles.length);
 		assertEquals("1.1", "org.eclipse.equinox.common", bundles[0].getSymbolicName());
@@ -110,14 +83,17 @@
 	 * Tests that correct advice is created for the org.eclipse.platform product.
 	 */
 	public void testPlatformProduct() throws Exception {
+		ArgumentCaptor<IPublisherAdvice> productFileAdviceCapture = ArgumentCaptor.forClass(IPublisherAdvice.class);
 		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "platform.product").toString());
 		addContextIU("org.eclipse.platform.feature.group", "1.2.3");
 
-		testAction = new ProductAction(source, productFile, flavorArg, executablesFeatureLocation);
+		testAction = Mockito.spy(new ProductAction(source, productFile, flavorArg, executablesFeatureLocation));
 		IStatus status = testAction.perform(publisherInfo, publisherResult, null);
+		verify(publisherInfo, Mockito.atLeastOnce()).addAdvice(productFileAdviceCapture.capture());
 		assertThat(status, is(okStatus()));
 
-		IExecutableAdvice launchAdvice = productFileAdviceCapture.getValue();
+		IExecutableAdvice launchAdvice = (IExecutableAdvice) productFileAdviceCapture.getAllValues().stream()
+				.filter(ProductFileAdvice.class::isInstance).collect(Collectors.toList()).get(0);
 		assertEquals("1.0", "eclipse", launchAdvice.getExecutableName());
 
 		String[] programArgs = launchAdvice.getProgramArguments();
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java
index 3405c53..994cfaf 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java
@@ -16,7 +16,6 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.createNiceMock;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.errorStatus;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.okStatus;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.statusWithMessageWhich;
@@ -71,21 +70,18 @@
 	String source = "";
 	protected TestArtifactRepository artifactRepository = new TestArtifactRepository(getAgent());
 
-	@Override protected IPublisherInfo createPublisherInfoMock() {
-		//override to create a nice mock, because we don't care about other method calls.
-		return createNiceMock(IPublisherInfo.class);
-	}
-
-	@Override public void setUp() throws Exception {
+	@Override
+	public void setUp() throws Exception {
 		setupPublisherInfo();
 		setupPublisherResult();
 	}
 
-	@Override public void setupPublisherInfo() {
+	@Override
+	public void setupPublisherInfo() {
 		PublisherInfo publisherInfoImpl = new PublisherInfo();
 		publisherInfoImpl.setArtifactRepository(artifactRepository);
 		publisherInfoImpl.setArtifactOptions(IPublisherInfo.A_PUBLISH);
-		publisherInfoImpl.setConfigurations(new String[] {configSpec});
+		publisherInfoImpl.setConfigurations(new String[] { configSpec });
 
 		publisherInfo = publisherInfoImpl;
 	}
@@ -95,18 +91,20 @@
 	 * splash screen, icon, etc.
 	 */
 	public void testBrandedApplication() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "brandedProduct/branded.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "brandedProduct/branded.product").toString());
 		addContextIU("org.eclipse.platform.feature.group", "1.2.3");
 
 		performProductAction(productFile);
 		Collection<IInstallableUnit> ius = publisherResult.getIUs("branded.product", IPublisherResult.NON_ROOT);
 		assertEquals("1.0", 1, ius.size());
 
-		//TODO assert branding was done correctly
+		// TODO assert branding was done correctly
 	}
 
 	public void testLicense() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "productWithLicense.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "productWithLicense.product").toString());
 		performProductAction(productFile);
 		Collection<IInstallableUnit> ius = publisherResult.getIUs("licenseIU.product", IPublisherResult.NON_ROOT);
 		assertEquals("1.0", 1, ius.size());
@@ -116,7 +114,8 @@
 	}
 
 	public void testLicenseNoURL() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "licenseNoURL.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "licenseNoURL.product").toString());
 		performProductAction(productFile);
 		Collection<IInstallableUnit> ius = publisherResult.getIUs("licenseIU.product", IPublisherResult.NON_ROOT);
 		assertEquals("1.0", 1, ius.size());
@@ -126,7 +125,8 @@
 	}
 
 	public void testLicenseNoText() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "licenseNoText.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "licenseNoText.product").toString());
 		performProductAction(productFile);
 		Collection<IInstallableUnit> ius = publisherResult.getIUs("licenseIU.product", IPublisherResult.NON_ROOT);
 		assertEquals("1.0", 1, ius.size());
@@ -136,7 +136,8 @@
 	}
 
 	public void testMissingLicense() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "productWithNoLicense.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "productWithNoLicense.product").toString());
 		performProductAction(productFile);
 		Collection<IInstallableUnit> ius = publisherResult.getIUs("licenseIU.product", IPublisherResult.NON_ROOT);
 		assertEquals("1.0", 1, ius.size());
@@ -145,8 +146,10 @@
 	}
 
 	public void testMultiProductPublishing() throws Exception {
-		ProductFile productFile1 = new ProductFile(TestData.getFile("ProductActionTest", "boundedVersionConfigurations.product").toString());
-		ProductFile productFile2 = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		ProductFile productFile1 = new ProductFile(
+				TestData.getFile("ProductActionTest", "boundedVersionConfigurations.product").toString());
+		ProductFile productFile2 = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
 
 		addContextIU("org.eclipse.core.runtime", "4.0.0");
 		performProductAction(productFile1);
@@ -158,7 +161,8 @@
 	}
 
 	public void testMultiPlatformCUs_DifferentPlatforms() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
 		setConfiguration(LINUX_CONFIG_SPEC);
 		addContextIU("org.eclipse.core.runtime", "0.0.0", WIN_FILTER);
 
@@ -169,7 +173,8 @@
 	}
 
 	public void testMultiPlatformCUs_SamePlatforms() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
 		setConfiguration(LINUX_CONFIG_SPEC);
 		addContextIU("org.eclipse.core.runtime", "0.0.0", LINUX_FILTER);
 
@@ -180,7 +185,8 @@
 	}
 
 	public void testMultiPlatformCUs_SamePlatforms_NoVersion() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
 		setConfiguration(LINUX_CONFIG_SPEC);
 		addContextIU("org.eclipse.core.runtime", null, LINUX_FILTER);
 
@@ -191,11 +197,13 @@
 	}
 
 	public void testMultiPlatformCUs_SamePlatforms_BoundedVersions() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
 		setConfiguration(LINUX_CONFIG_SPEC);
 
-		// Set a specific version number, the one in the .product file uses 0.0.0.  Let's see if it binds properly
-		//filter is different from linuxConfigSpec, but will still match
+		// Set a specific version number, the one in the .product file uses 0.0.0. Let's
+		// see if it binds properly
+		// filter is different from linuxConfigSpec, but will still match
 		addContextIU("org.eclipse.core.runtime", "4.0.0", "(osgi.os=linux)");
 
 		performProductAction(productFile);
@@ -205,36 +213,45 @@
 	}
 
 	public void testCUsHost() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
 		setConfiguration(LINUX_CONFIG_SPEC);
 
-		// Set a specific version number, the one in the .product file uses 0.0.0.  Let's see if it binds properly
-		//filter is different from linuxConfigSpec, but will still match
+		// Set a specific version number, the one in the .product file uses 0.0.0. Let's
+		// see if it binds properly
+		// filter is different from linuxConfigSpec, but will still match
 		addContextIU("org.eclipse.core.runtime", "4.0.0", "(osgi.os=linux)");
 
 		performProductAction(productFile);
 
-		IInstallableUnitFragment fragment = (IInstallableUnitFragment) getUniquePublishedIU(flavorArg + LINUX_CONFIG_SPEC + "org.eclipse.core.runtime");
-		assertEquals("1.1", "org.eclipse.core.runtime", RequiredCapability.extractName(fragment.getHost().iterator().next().getMatches()));
-		assertEquals("1.2", Version.create("4.0.0"), RequiredCapability.extractRange(fragment.getHost().iterator().next().getMatches()).getMinimum());
+		IInstallableUnitFragment fragment = (IInstallableUnitFragment) getUniquePublishedIU(
+				flavorArg + LINUX_CONFIG_SPEC + "org.eclipse.core.runtime");
+		assertEquals("1.1", "org.eclipse.core.runtime",
+				RequiredCapability.extractName(fragment.getHost().iterator().next().getMatches()));
+		assertEquals("1.2", Version.create("4.0.0"),
+				RequiredCapability.extractRange(fragment.getHost().iterator().next().getMatches()).getMinimum());
 		assertEquals("1.3", Version.create("1.0.0"), fragment.getVersion());
 
 	}
 
 	public void testMultiConfigspecProductPublishing() throws IOException, Exception {
 		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "platform.product").toString());
-		((PublisherInfo) publisherInfo).setConfigurations(new String[] {"carbon.macos.x86", "cocoa.macos.x86"});
+		((PublisherInfo) publisherInfo).setConfigurations(new String[] { "carbon.macos.x86", "cocoa.macos.x86" });
 		addContextIU("org.eclipse.platform.feature.group", "1.2.3");
 
 		performProductAction(productFile);
 
-		Collection<IConfigAdvice> advice = publisherInfo.getAdvice("carbon.macos.x86", false, null, null, IConfigAdvice.class);
+		Collection<IConfigAdvice> advice = publisherInfo.getAdvice("carbon.macos.x86", false, null, null,
+				IConfigAdvice.class);
 		assertEquals("1.0", 1, advice.size());
 	}
 
 	public void testANYConfigSpecPublishing_GeneralBundle() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
-		String configSpecANY = AbstractPublisherAction.createConfigSpec("ANY", "ANY", "ANY"); // configuration spec to create CUs without filters
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		String configSpecANY = AbstractPublisherAction.createConfigSpec("ANY", "ANY", "ANY"); // configuration spec to
+																								// create CUs without
+																								// filters
 		setConfiguration(configSpecANY);
 
 		addContextIU("org.eclipse.core.runtime", "4.0.0");
@@ -242,16 +259,22 @@
 		performProductAction(productFile);
 
 		// there is a CU for the IU because it applies to all platforms
-		IInstallableUnitFragment fragment = (IInstallableUnitFragment) getUniquePublishedIU(flavorArg + configSpecANY + "org.eclipse.core.runtime");
-		assertEquals("1.1", "org.eclipse.core.runtime", RequiredCapability.extractName(fragment.getHost().iterator().next().getMatches()));
-		assertEquals("1.2", Version.create("4.0.0"), RequiredCapability.extractRange(fragment.getHost().iterator().next().getMatches()).getMinimum());
+		IInstallableUnitFragment fragment = (IInstallableUnitFragment) getUniquePublishedIU(
+				flavorArg + configSpecANY + "org.eclipse.core.runtime");
+		assertEquals("1.1", "org.eclipse.core.runtime",
+				RequiredCapability.extractName(fragment.getHost().iterator().next().getMatches()));
+		assertEquals("1.2", Version.create("4.0.0"),
+				RequiredCapability.extractRange(fragment.getHost().iterator().next().getMatches()).getMinimum());
 		assertEquals("1.3", Version.create("1.0.0"), fragment.getVersion());
 		assertNull("1.3", fragment.getFilter());
 	}
 
 	public void testANYConfigSpecPublishing_PlatformSpecificBundle() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
-		String configSpecANY = AbstractPublisherAction.createConfigSpec("ANY", "ANY", "ANY"); // configuration spec to create CUs without filters
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString());
+		String configSpecANY = AbstractPublisherAction.createConfigSpec("ANY", "ANY", "ANY"); // configuration spec to
+																								// create CUs without
+																								// filters
 		setConfiguration(configSpecANY);
 
 		addContextIU("org.eclipse.core.runtime", "4.0.0", WIN_FILTER); // any valid filter can be set here
@@ -276,13 +299,15 @@
 		testAction = new ProductAction(source, productFile, flavorArg, executablesFeatureLocation);
 		PublisherInfo info = new PublisherInfo();
 		info.setContextMetadataRepository(repository);
-		// TODO this line doesn't have any effect -> is this a bug in the implementation?
+		// TODO this line doesn't have any effect -> is this a bug in the
+		// implementation?
 		info.addAdvice(new QueryableFilterAdvice(info.getContextMetadataRepository()));
 
 		IStatus status = testAction.perform(info, publisherResult, null);
 		assertThat(status, is(okStatus()));
 
-		IQueryResult<IInstallableUnit> results = publisherResult.query(QueryUtil.createIUQuery("org.eclipse.platform.ide", Version.create("3.5.0.I20081118")), null);
+		IQueryResult<IInstallableUnit> results = publisherResult
+				.query(QueryUtil.createIUQuery("org.eclipse.platform.ide", Version.create("3.5.0.I20081118")), null);
 		assertEquals("1.0", 1, queryResultSize(results));
 		IInstallableUnit unit = results.iterator().next();
 		Collection<IRequirement> requiredCapabilities = unit.getRequirements();
@@ -296,12 +321,14 @@
 			}
 		}
 		assertTrue("1.1", capability != null);
-		assertEquals("1.2", InstallableUnit.parseFilter("(org.eclipse.update.install.features=true)"), capability.getFilter());
+		assertEquals("1.2", InstallableUnit.parseFilter("(org.eclipse.update.install.features=true)"),
+				capability.getFilter());
 	}
 
 	public void testProductWithAdviceFile() throws Exception {
 		// product file that has a corresponding advice file (p2.inf).
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest/productWithAdvice", "productWithAdvice.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest/productWithAdvice", "productWithAdvice.product").toString());
 		testAction = new ProductAction(source, productFile, flavorArg, executablesFeatureLocation);
 		IStatus status = testAction.perform(new PublisherInfo(), publisherResult, null);
 		assertThat(status, is(okStatus()));
@@ -310,27 +337,30 @@
 		Collection<ITouchpointData> data = product.getTouchpointData();
 		assertEquals("1.1", 1, data.size());
 		String configure = data.iterator().next().getInstruction("configure").getBody();
-		assertEquals("1.2", "addRepository(type:0,location:http${#58}//download.eclipse.org/releases/fred);addRepository(type:1,location:http${#58}//download.eclipse.org/releases/fred);", configure);
+		assertEquals("1.2",
+				"addRepository(type:0,location:http${#58}//download.eclipse.org/releases/fred);addRepository(type:1,location:http${#58}//download.eclipse.org/releases/fred);",
+				configure);
 
-		//update.id = com.zoobar
-		//update.range = [4.0,4.3)
-		//update.severity = 0
-		//update.description = This is the description
+		// update.id = com.zoobar
+		// update.range = [4.0,4.3)
+		// update.severity = 0
+		// update.description = This is the description
 		IUpdateDescriptor update = product.getUpdateDescriptor();
 		assertEquals("2.0", 0, update.getSeverity());
 		assertEquals("2.1", "This is the description", update.getDescription());
-		//unit that fits in range
+		// unit that fits in range
 		assertTrue("2.2", update.isUpdateOf(createIU("com.zoobar", Version.createOSGi(4, 1, 0))));
-		//unit that is too old for range
+		// unit that is too old for range
 		assertFalse("2.3", update.isUpdateOf(createIU("com.zoobar", Version.createOSGi(3, 1, 0))));
-		//version that is too new and outside of range
+		// version that is too new and outside of range
 		assertFalse("2.4", update.isUpdateOf(createIU("com.zoobar", Version.createOSGi(6, 1, 0))));
-		//unit with matching version but not matching id
+		// unit with matching version but not matching id
 		assertFalse("2.6", update.isUpdateOf(createIU("com.other", Version.createOSGi(4, 1, 0))));
 	}
 
 	public void testFiltersOfInclusions() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "productIncludingFragments.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "productIncludingFragments.product").toString());
 		addContextIU("generalbundle", "1.0.1");
 		addContextIU("fragment.win", "1.0.2", WIN_FILTER);
 		// no fragment.linux in the context
@@ -338,39 +368,48 @@
 		IStatus status = performProductActionAndReturnStatus(productFile);
 
 		IInstallableUnit productIU = getUniquePublishedIU("productIncludingFragments.uid");
-		assertThat(productIU.getRequirements(), hasItem(createIURequirement("generalbundle", createStrictVersionRange("1.0.1"))));
-		assertThat(productIU.getRequirements(), hasItem(createIURequirement("fragment.win", createStrictVersionRange("1.0.2"), WIN_FILTER)));
+		assertThat(productIU.getRequirements(),
+				hasItem(createIURequirement("generalbundle", createStrictVersionRange("1.0.1"))));
+		assertThat(productIU.getRequirements(),
+				hasItem(createIURequirement("fragment.win", createStrictVersionRange("1.0.2"), WIN_FILTER)));
 
-		// this is bug 390361: the Linux fragment is required without filter, so the product cannot be installed for Windows ...
+		// this is bug 390361: the Linux fragment is required without filter, so the
+		// product cannot be installed for Windows ...
 		assertThat(productIU.getRequirements(), hasItem(createIURequirement("fragment.linux", ANY_VERSION)));
 
 		// ... therefore the action shall report an error
 		assertThat(status, is(errorStatus()));
-		assertThat(Arrays.asList(status.getChildren()), hasItem(statusWithMessageWhich(containsString("Included element fragment.linux 0.0.0 is missing"))));
+		assertThat(Arrays.asList(status.getChildren()),
+				hasItem(statusWithMessageWhich(containsString("Included element fragment.linux 0.0.0 is missing"))));
 	}
 
 	public void testMessageForProductWithIgnoredContent() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "mixedContentIgnored.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "mixedContentIgnored.product").toString());
 		IStatus status = performProductActionAndReturnStatus(productFile);
 
-		// expect a warning about redundant, ignored content in product file -> requested in bug 325611
+		// expect a warning about redundant, ignored content in product file ->
+		// requested in bug 325611
 		assertThat(Arrays.asList(status.getChildren()), hasItem(statusWithMessageWhich(containsString("are ignored"))));
 		// TODO the message should have a code identifying it
 	}
 
 	public void testJREIncluded() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "brandedProduct/branded.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "brandedProduct/branded.product").toString());
 		addContextIU("org.eclipse.platform.feature.group", "1.2.3");
 
 		performProductAction(productFile);
 		Collection<IInstallableUnit> ius = publisherResult.getIUs("branded.product", IPublisherResult.NON_ROOT);
 		assertEquals(1, ius.size());
 		assertEquals("Missing a.jre.javase", 1, publisherResult.getIUs("a.jre.javase", IPublisherResult.ROOT).size());
-		assertEquals("Missing config.a.jre.javase", 1, publisherResult.getIUs("config.a.jre.javase", IPublisherResult.ROOT).size());
+		assertEquals("Missing config.a.jre.javase", 1,
+				publisherResult.getIUs("config.a.jre.javase", IPublisherResult.ROOT).size());
 	}
 
 	public void testRequiredEEAsSpecified() throws Exception {
-		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "productFileActionTest.product").toString());
+		ProductFile productFile = new ProductFile(
+				TestData.getFile("ProductActionTest", "productFileActionTest.product").toString());
 		addContextIU("org.eclipse.core.commands", "5.0.0");
 
 		performProductAction(productFile);
@@ -407,7 +446,7 @@
 	}
 
 	private void setConfiguration(String configSpec) {
-		((PublisherInfo) publisherInfo).setConfigurations(new String[] {configSpec});
+		((PublisherInfo) publisherInfo).setConfigurations(new String[] { configSpec });
 	}
 
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTestMac.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTestMac.java
index a14b660..7673a09 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTestMac.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTestMac.java
@@ -13,30 +13,23 @@
  *******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.anyBoolean;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
 import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.okStatus;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.verify;
 
 import java.io.File;
-import java.util.Collections;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
+import java.util.stream.Collectors;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
-import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.publisher.AbstractPublisherAction;
 import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
-import org.eclipse.equinox.p2.publisher.IPublisherInfo;
-import org.eclipse.equinox.p2.publisher.actions.RootIUAdvice;
 import org.eclipse.equinox.p2.publisher.eclipse.IExecutableAdvice;
 import org.eclipse.equinox.p2.publisher.eclipse.ProductAction;
 import org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice;
 import org.eclipse.equinox.p2.tests.TestData;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
 
 /**
  * Tests for {@link ProductAction} specific to Mac.
@@ -44,30 +37,11 @@
 public class ProductActionTestMac extends ActionTest {
 
 	private File executablesFeatureLocation = null;
-	private Capture<RootIUAdvice> rootIUAdviceCapture;
-	private Capture<ProductFileAdvice> productFileAdviceCapture;
 	private String source = "";
 
 	@Override
-	protected IPublisherInfo createPublisherInfoMock() {
-		//override to create a nice mock, because we don't care about other method calls.
-		return createNiceMock(IPublisherInfo.class);
-	}
-
-	@Override
-	protected void insertPublisherInfoBehavior() {
-		publisherInfo.addAdvice(EasyMock.and(EasyMock.isA(RootIUAdvice.class), EasyMock.capture(rootIUAdviceCapture)));
-		publisherInfo.addAdvice(EasyMock.and(EasyMock.isA(ProductFileAdvice.class), EasyMock.capture(productFileAdviceCapture)));
-		//Return an empty list every time getAdvice is called
-		expect(publisherInfo.getAdvice((String) anyObject(), anyBoolean(), (String) anyObject(), (Version) anyObject(), (Class<IPublisherAdvice>) anyObject())).andReturn(Collections.emptyList());
-		expectLastCall().anyTimes();
-	}
-
-	@Override
 	public void setUp() throws Exception {
 		configSpec = AbstractPublisherAction.createConfigSpec("carbon", "macosx", "x86");
-		rootIUAdviceCapture = Capture.newInstance();
-		productFileAdviceCapture = Capture.newInstance();
 		setupPublisherInfo();
 		setupPublisherResult();
 	}
@@ -76,13 +50,16 @@
 	 * Tests that correct advice is created for the org.eclipse.platform product.
 	 */
 	public void testPlatformProduct() throws Exception {
+		ArgumentCaptor<IPublisherAdvice> productFileAdviceCapture = ArgumentCaptor.forClass(IPublisherAdvice.class);
 		ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "platform.product").toString());
 		addContextIU("org.eclipse.platform.feature.group", "3.8.3");
-		testAction = new ProductAction(source, productFile, flavorArg, executablesFeatureLocation);
+		testAction = Mockito.spy(new ProductAction(source, productFile, flavorArg, executablesFeatureLocation));
 		IStatus status = testAction.perform(publisherInfo, publisherResult, null);
+		verify(publisherInfo, Mockito.atLeastOnce()).addAdvice(productFileAdviceCapture.capture());
 		assertThat(status, is(okStatus()));
 
-		IExecutableAdvice launchAdvice = productFileAdviceCapture.getValue();
+		IExecutableAdvice launchAdvice = (IExecutableAdvice) productFileAdviceCapture.getAllValues().stream()
+				.filter(ProductFileAdvice.class::isInstance).collect(Collectors.toList()).get(0);
 		assertEquals("1.0", "eclipse", launchAdvice.getExecutableName());
 
 		String[] programArgs = launchAdvice.getProgramArguments();
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductFileAdviceTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductFileAdviceTest.java
index 3a93eb5..91bc64d 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductFileAdviceTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductFileAdviceTest.java
@@ -208,7 +208,7 @@
 		configProperties.put("osgi.bundles", "org.eclipse.equinox.simpleconfigurator@1:start");
 		writeProperties(new File(rootFolder, "config.ini"), configProperties);
 
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		buffer.append("org.eclipse.equinox.common,3.5.100.v20090817,plugins/org.eclipse.equinox.common_3.5.100.v20090817.jar,2,true\n");
 		buffer.append("org.eclipse.equinox.simpleconfigurator,1.0.200.v20090729-1800,plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20090729-1800.jar,1,true\n");
 		writeBuffer(new File(rootFolder, "org.eclipse.equinox.simpleconfigurator/bundles.info"), buffer);
@@ -229,7 +229,7 @@
 		File root = getTestFolder("configNullLauncher");
 		File testProduct = new File(root, "test.product");
 
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		buffer.append("<product id=\"test.product\" version=\"1\" useFeatures=\"false\">	\n");
 		buffer.append("   <configIni use=\"default\">										\n");
 		buffer.append("      <win32>config.ini</win32>										\n");
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootFilesActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootFilesActionTest.java
index 9fa2a5d..030cd8b 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootFilesActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootFilesActionTest.java
@@ -15,19 +15,30 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.when;
 
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.zip.ZipInputStream;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
 import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
 import org.eclipse.equinox.p2.metadata.IArtifactKey;
 import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.publisher.AbstractPublisherAction;
 import org.eclipse.equinox.p2.publisher.IPublisherInfo;
-import org.eclipse.equinox.p2.publisher.actions.*;
+import org.eclipse.equinox.p2.publisher.actions.IRootFilesAdvice;
+import org.eclipse.equinox.p2.publisher.actions.ITouchpointAdvice;
+import org.eclipse.equinox.p2.publisher.actions.RootFilesAction;
+import org.eclipse.equinox.p2.publisher.actions.RootFilesAdvice;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
 import org.eclipse.equinox.p2.tests.TestActivator;
 import org.eclipse.equinox.p2.tests.TestData;
@@ -68,10 +79,13 @@
 
 	@Override
 	public void insertPublisherInfoBehavior() {
-		expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
-		expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH).anyTimes();
-		expect(publisherInfo.getAdvice(configSpec, true, null, null, IRootFilesAdvice.class)).andReturn(adviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(configSpec, false, flavorArg + topArg, versionArg, ITouchpointAdvice.class)).andReturn(null).anyTimes();
+		when(publisherInfo.getArtifactRepository()).thenReturn(artifactRepository);
+		when(publisherInfo.getArtifactOptions())
+				.thenReturn(IPublisherInfo.A_INDEX | IPublisherInfo.A_OVERWRITE | IPublisherInfo.A_PUBLISH);
+		when(publisherInfo.getAdvice(configSpec, true, null, null, IRootFilesAdvice.class))
+				.thenReturn(adviceCollection);
+		when(publisherInfo.getAdvice(configSpec, false, flavorArg + topArg, versionArg, ITouchpointAdvice.class))
+				.thenReturn(null);
 	}
 
 	private void setupTestCase(int testArg) throws Exception {
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootIUActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootIUActionTest.java
index 21b4dd4..637465c 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootIUActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/RootIUActionTest.java
@@ -15,7 +15,7 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.tests.publisher.actions;
 
-import static org.easymock.EasyMock.expect;
+import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -358,16 +358,22 @@
 
 	@Override
 	public void insertPublisherInfoBehavior() {
-		expect(publisherInfo.getAdvice(null, false, rootIU, versionArg, ICapabilityAdvice.class)).andReturn(new ArrayList<>()).anyTimes();
-		expect(publisherInfo.getAdvice(null, true, null, null, IRootIUAdvice.class)).andReturn(rootIUAdviceCollection).anyTimes();
-		expect(publisherInfo.getAdvice(null, true, null, null, IVersionAdvice.class)).andReturn(null).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, rootIU, versionArg, ITouchpointAdvice.class)).andReturn(new ArrayList<>()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, rootIU, versionArg, IUpdateDescriptorAdvice.class)).andReturn(new ArrayList<>()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, rootIU, versionArg, IPropertyAdvice.class)).andReturn(new ArrayList<>()).anyTimes();
-		expect(publisherInfo.getAdvice(null, false, rootIU, versionArg, IAdditionalInstallableUnitAdvice.class)).andReturn(new ArrayList<>()).anyTimes();
-		expect(publisherInfo.getAdvice(null, true, rootIU, versionArg, ILicenseAdvice.class)).andReturn(new ArrayList<>()).anyTimes();
-		expect(publisherInfo.getMetadataRepository()).andReturn(metadataRepository).anyTimes();
-		expect(publisherInfo.getContextMetadataRepository()).andReturn(null).anyTimes();
+		when(publisherInfo.getAdvice(null, false, rootIU, versionArg, ICapabilityAdvice.class))
+				.thenReturn(new ArrayList<>());
+		when(publisherInfo.getAdvice(null, true, null, null, IRootIUAdvice.class)).thenReturn(rootIUAdviceCollection);
+		when(publisherInfo.getAdvice(null, true, null, null, IVersionAdvice.class)).thenReturn(null);
+		when(publisherInfo.getAdvice(null, false, rootIU, versionArg, ITouchpointAdvice.class))
+				.thenReturn(new ArrayList<>());
+		when(publisherInfo.getAdvice(null, false, rootIU, versionArg, IUpdateDescriptorAdvice.class))
+				.thenReturn(new ArrayList<>());
+		when(publisherInfo.getAdvice(null, false, rootIU, versionArg, IPropertyAdvice.class))
+				.thenReturn(new ArrayList<>());
+		when(publisherInfo.getAdvice(null, false, rootIU, versionArg, IAdditionalInstallableUnitAdvice.class))
+				.thenReturn(new ArrayList<>());
+		when(publisherInfo.getAdvice(null, true, rootIU, versionArg, ILicenseAdvice.class))
+				.thenReturn(new ArrayList<>());
+		when(publisherInfo.getMetadataRepository()).thenReturn(metadataRepository);
+		when(publisherInfo.getContextMetadataRepository()).thenReturn(null);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetLauncherNameActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetLauncherNameActionTest.java
index de6ddd6..f01f88d 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetLauncherNameActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetLauncherNameActionTest.java
@@ -14,7 +14,9 @@
 package org.eclipse.equinox.p2.tests.touchpoint.eclipse;
 
 import java.io.File;
-import java.util.*;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
 import org.eclipse.equinox.internal.p2.engine.InstallableUnitOperand;
 import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
@@ -99,7 +101,7 @@
 		//profile will start using "eclipse" by default, give it some content and see if it
 		//survives a name change.
 		File eclipseIni = new File(tempFolder, "eclipse.ini");
-		StringBuffer ini = new StringBuffer();
+		StringBuilder ini = new StringBuilder();
 		ini.append("-startup\n");
 		ini.append("plugins/org.eclipse.equinox.launcher_1.2.4.v1234.jar\n");
 		writeBuffer(eclipseIni, ini);