Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Mockito to simplify mocking #151

Merged
merged 1 commit into from
May 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions org.eclipse.m2e.tests/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ Import-Package: org.eclipse.equinox.p2.metadata,
org.eclipse.ui.part,
org.eclipse.ui.views.markers,
org.mockito;version="[4.1.0,5.0.0)",
org.mockito.invocation;version="[4.1.0,5.0.0)",
org.mockito.stubbing;version="[4.1.0,5.0.0)",
org.slf4j
Automatic-Module-Name: org.eclipse.m2e.tests
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

import org.codehaus.plexus.classworlds.realm.ClassRealm;

Expand All @@ -44,81 +45,42 @@ public void setUp() throws Exception {
ClassRealmManagerDelegate.class, EclipseClassRealmManagerDelegate.ROLE_HINT);
}

@Test
public void testRealmSetup() throws Exception {
DummyRealm realm = new DummyRealm();

final List<ClassRealmConstituent> constituents = new ArrayList<>();

ClassRealmRequest request = new ClassRealmRequest() {

@Override
public List<ClassRealmConstituent> getConstituents() {
return constituents;
}

@Deprecated
@Override
public List<String> getImports() {
return new ArrayList<>();
}

List<String> realmImports = new ArrayList<>();
ClassRealm realm = new ClassRealm(null, "test-" + System.currentTimeMillis(), null) {
@Override
public ClassLoader getParent() {
return null;
public void importFrom(ClassLoader classLoader, String packageName) {
realmImports.add(packageName);
}

@Override
public RealmType getType() {
return RealmType.Plugin;
}

@Override
public Map<String, ClassLoader> getForeignImports() {
return null;
}

@Override
public List<String> getParentImports() {
return null;
}

};

List<ClassRealmConstituent> constituents = new ArrayList<>();
ClassRealmRequest request = Mockito.mock(ClassRealmRequest.class);
Mockito.when(request.getConstituents()).thenReturn(constituents);

delegate.setupRealm(realm, request);

assertFalse(realm.imports.toString(), realm.imports.contains("org.sonatype.plexus.build.incremental"));
assertFalse(realmImports.toString(), realmImports.contains("org.sonatype.plexus.build.incremental"));

constituents.add(new DummyConstituent("0.0.3"));

delegate.setupRealm(realm, request);

assertTrue(realm.imports.toString(), realm.imports.contains("org.sonatype.plexus.build.incremental"));
assertTrue(realmImports.toString(), realmImports.contains("org.sonatype.plexus.build.incremental"));

realm.imports.clear();
realmImports.clear();
constituents.clear();
constituents.add(new DummyConstituent("999.0"));

delegate.setupRealm(realm, request);

assertFalse(realm.imports.toString(), realm.imports.contains("org.sonatype.plexus.build.incremental"));
assertFalse(realmImports.toString(), realmImports.contains("org.sonatype.plexus.build.incremental"));
}

static class DummyRealm extends ClassRealm {

public List<String> imports = new ArrayList<>();

public DummyRealm() {
super(null, "test-" + System.currentTimeMillis(), null);
}

@Override
public void importFrom(ClassLoader classLoader, String packageName) {
imports.add(packageName);
}

}

static class DummyConstituent implements ClassRealmConstituent {
private static class DummyConstituent implements ClassRealmConstituent {

private String version;

Expand Down Expand Up @@ -155,7 +117,5 @@ public String getVersion() {
public File getFile() {
return new File("");
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,32 @@

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.stubbing.Answer;

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.Launch;
import org.eclipse.jdt.launching.IVMRunner;

Expand All @@ -40,7 +51,6 @@
import org.eclipse.m2e.internal.launch.MavenLaunchUtils;
import org.eclipse.m2e.internal.launch.MavenRuntimeLaunchSupport.VMArguments;
import org.eclipse.m2e.internal.launch.MavenSourceLocator;
import org.eclipse.m2e.tests.mocks.MockLaunchConfiguration;
import org.eclipse.m2e.tests.mocks.MockVMRunner;


Expand Down Expand Up @@ -103,8 +113,8 @@ public void testGetVMArgumentsSubstituteMultiModuleDir() throws Exception {
if(!Files.exists(mvn)) {
Files.createDirectories(mvn);
}
ILaunchConfiguration configuration = new MockLaunchConfiguration(
Map.of(MavenLaunchConstants.ATTR_POM_DIR, "${workspace_loc}/foo/bar"));
ILaunchConfiguration configuration = mockLaunchConfiguration(
Map.of(MavenLaunchConstants.ATTR_POM_DIR, "${workspace_loc}/foo/bar"), null);
launcher.appendRuntimeSpecificArguments("3.3.3", arguments, configuration);
String expectedVmArgs = "-Dmaven.multiModuleProjectDirectory="
+ MavenLaunchUtils.quote(ResourcesPlugin.getWorkspace().getRoot().getLocation().append("foo").toOSString());
Expand All @@ -114,7 +124,7 @@ public void testGetVMArgumentsSubstituteMultiModuleDir() throws Exception {
@Test
public void testGlobalSettingsProgramArguments() throws Exception {
IMavenConfiguration mavenConfig = MavenPlugin.getMavenConfiguration();
MockLaunchConfiguration configuration = getLaunchConfiguration("projects/444262_settings");
ILaunchConfiguration configuration = getLaunchConfiguration("projects/444262_settings");
try {
performDummyLaunch(configuration);
assertArrayEquals(new String[] {"-B"}, runner.getConfiguration().getProgramArguments());
Expand All @@ -139,7 +149,7 @@ public void testGlobalSettingsProgramArguments() throws Exception {
@Test
public void testUserSettingsProgramArguments() throws Exception {
IMavenConfiguration mavenConfig = MavenPlugin.getMavenConfiguration();
MockLaunchConfiguration configuration = getLaunchConfiguration("projects/444262_settings");
ILaunchConfiguration configuration = getLaunchConfiguration("projects/444262_settings");
try {
mavenConfig.setUserSettingsFile(new File("settings_empty.xml").getAbsolutePath());
performDummyLaunch(configuration);
Expand All @@ -163,11 +173,38 @@ private void performDummyLaunch(ILaunchConfiguration configuration) throws Excep
}
}

private MockLaunchConfiguration getLaunchConfiguration(String pomDirectory) {
private ILaunchConfiguration getLaunchConfiguration(String pomDirectory) throws CoreException {
File file = new File(pomDirectory);
String absPomDir = file.getAbsolutePath();
Map<String, Object> attributes = new HashMap<>();
attributes.put(MavenLaunchConstants.ATTR_POM_DIR, absPomDir);
return new MockLaunchConfiguration(attributes);
return mockLaunchConfiguration(attributes, null);
}

@SuppressWarnings("unchecked")
static ILaunchConfiguration mockLaunchConfiguration(Map<String, Object> attributes, ILaunchConfigurationType type)
throws CoreException {
ILaunchConfiguration config = mock(ILaunchConfiguration.class);
when(config.getType()).thenReturn(type);
when(config.getAttribute(anyString(), anyBoolean())).then(returnAttributeOrDefault(attributes));
when(config.getAttribute(anyString(), anyInt())).then(returnAttributeOrDefault(attributes));
//Use any() matcher because that one also matches null-arguments
when(config.getAttribute(anyString(), (List<String>) any())).then(returnAttributeOrDefault(attributes));
when(config.getAttribute(anyString(), (Set<String>) any())).then(returnAttributeOrDefault(attributes));
when(config.getAttribute(anyString(), (Map<String, String>) any())).then(returnAttributeOrDefault(attributes));
when(config.getAttribute(anyString(), (String) any())).then(returnAttributeOrDefault(attributes));
when(config.getAttributes()).thenReturn(attributes);
when(config.hasAttribute(anyString())).thenAnswer(a -> attributes.containsKey(a.getArgument(0)));
return config;
}

private static <T> Answer<T> returnAttributeOrDefault(Map<String, Object> attributes) {
return (Answer<T>) a -> {
String attributeName = a.getArgument(0);
T defaultValue = a.getArgument(1);
@SuppressWarnings("unchecked")
T attr = (T) attributes.get(attributeName);
return attr == null ? defaultValue : attr;
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,18 @@
import java.util.Map;

import org.junit.Test;
import org.mockito.Mockito;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.launching.IRuntimeClasspathEntry;

import org.eclipse.m2e.actions.MavenLaunchConstants;
import org.eclipse.m2e.core.project.ResolverConfiguration;
import org.eclipse.m2e.jdt.internal.launch.MavenRuntimeClasspathProvider;
import org.eclipse.m2e.tests.common.AbstractMavenProjectTestCase;
import org.eclipse.m2e.tests.mocks.MockLaunchConfiguration;
import org.eclipse.m2e.tests.mocks.MockLaunchConfigurationType;


public class MavenRuntimeClasspathProviderTest extends AbstractMavenProjectTestCase {
Expand Down Expand Up @@ -128,7 +129,8 @@ private void runClasspathScopeTest(String baseDir, String[] pomNames,
String... expectedBinFolders)
throws Exception {
importProjects(baseDir, pomNames, new ResolverConfiguration());
MockLaunchConfiguration configuration = getAppLaunchConfiguration(baseDir + "/" + subModuleWithLaunch);
ILaunchConfiguration configuration = getLaunchConfiguration(baseDir + "/" + subModuleWithLaunch,
MavenRuntimeClasspathProvider.JDT_JAVA_APPLICATION);
configuration.getAttributes().put(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
subModuleWithLaunch);
configuration.getAttributes().put(IJavaLaunchConfigurationConstants.ATTR_EXCLUDE_TEST_CODE, useRuntimeScope);
Expand Down Expand Up @@ -157,7 +159,8 @@ private void assertResolveClasspathEndsWithFolders(

private void runAddJunit5DepsTest(String projectName, String... expectedJars) throws IOException, CoreException {
importProject("projects/" + projectName + "/pom.xml");
MockLaunchConfiguration configuration = getTestLaunchConfiguration("projects/" + projectName);
ILaunchConfiguration configuration = getLaunchConfiguration("projects/" + projectName,
MavenRuntimeClasspathProvider.JDT_JUNIT_TEST);
configuration.getAttributes().put("org.eclipse.jdt.junit.TEST_KIND", "org.eclipse.jdt.junit.loader.junit5");
configuration.getAttributes().put(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectName);
MavenRuntimeClasspathProvider mavenRuntimeClasspathProvider = new MavenRuntimeClasspathProvider();
Expand Down Expand Up @@ -187,19 +190,13 @@ private void assertResolveClasspathEndsWithJars(IRuntimeClasspathEntry[] resolve
assertEquals(jars.length, resolveClasspath.length - i);
}

private MockLaunchConfiguration getAppLaunchConfiguration(String pomDirectory) {
return getLaunchConfiguration(pomDirectory, MavenRuntimeClasspathProvider.JDT_JAVA_APPLICATION);
}

private MockLaunchConfiguration getTestLaunchConfiguration(String pomDirectory) {
return getLaunchConfiguration(pomDirectory, MavenRuntimeClasspathProvider.JDT_JUNIT_TEST);
}

private MockLaunchConfiguration getLaunchConfiguration(String pomDirectory, String type) {
private ILaunchConfiguration getLaunchConfiguration(String pomDirectory, String type) throws CoreException {
File file = new File(pomDirectory);
String absPomDir = file.getAbsolutePath();
Map<String, Object> attributes = new HashMap<>();
attributes.put(MavenLaunchConstants.ATTR_POM_DIR, absPomDir);
return new MockLaunchConfiguration(attributes, new MockLaunchConfigurationType(Map.of("id", type)));
ILaunchConfigurationType launchConfigurationType = Mockito.mock(ILaunchConfigurationType.class);
Mockito.when(launchConfigurationType.getAttribute("id")).thenReturn(type);
return MavenLaunchDelegateTest.mockLaunchConfiguration(attributes, launchConfigurationType);
}
}
Loading