Skip to content
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.moreunit.core.extension;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;
import org.moreunit.core.MoreUnitCore;

public class ExtensionPointsTest
{
@Test
public void LANGUAGES_should_be_correct_extension_point_id()
{
String expected = MoreUnitCore.PLUGIN_ID + ".languages";

assertEquals(expected, ExtensionPoints.LANGUAGES);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package org.moreunit.core.extension;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
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 org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.resources.IFile;
import org.eclipse.ui.IEditorPart;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.moreunit.core.extension.jump.IJumpContext;
import org.moreunit.core.extension.jump.IJumper;
import org.moreunit.core.extension.jump.JumpResult;
import org.moreunit.core.log.Logger;

public class JumperExtensionManagerTest
{
private LanguageExtensionManager languageExtensionManager;
private Logger logger;
private JumperExtensionManager manager;

@BeforeEach
public void setUp()
{
languageExtensionManager = mock(LanguageExtensionManager.class);
logger = mock(Logger.class);
manager = new JumperExtensionManager(languageExtensionManager, logger);
}

@Test
public void jump_should_return_notDone_when_no_jumpers_for_extension()
{
IJumpContext context = createMockContext("java");

when(languageExtensionManager.getJumpersFor("java")).thenReturn(new Iterable<IJumper>()
{
@Override
public java.util.Iterator<IJumper> iterator()
{
return java.util.Collections.emptyIterator();
}
});

JumpResult result = manager.jump(context);

assertEquals(JumpResult.notDone(), result);

Check failure on line 50 in org.moreunit.core.test/test/org/moreunit/core/extension/JumperExtensionManagerTest.java

View workflow job for this annotation

GitHub Actions / test results

JumperExtensionManagerTest.jump_should_return_notDone_when_no_jumpers_for_extension

expected: <org.moreunit.core.extension.jump.JumpResult@774d286> but was: <org.moreunit.core.extension.jump.JumpResult@31311d54>
Raw output
org.opentest4j.AssertionFailedError: expected: <org.moreunit.core.extension.jump.JumpResult@774d286> but was: <org.moreunit.core.extension.jump.JumpResult@31311d54>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
	at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145)
	at org.moreunit.core.extension.JumperExtensionManagerTest.jump_should_return_notDone_when_no_jumpers_for_extension(JumperExtensionManagerTest.java:50)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
}

@Test
public void jump_should_return_done_when_jumper_returns_done()
{
IJumpContext context = createMockContext("java");
IJumper jumper = mock(IJumper.class);

when(languageExtensionManager.getJumpersFor("java")).thenReturn(() -> java.util.Collections.singleton(jumper).iterator());
when(jumper.jump(context)).thenReturn(JumpResult.done());

JumpResult result = manager.jump(context);

assertEquals(JumpResult.done(), result);

Check failure on line 64 in org.moreunit.core.test/test/org/moreunit/core/extension/JumperExtensionManagerTest.java

View workflow job for this annotation

GitHub Actions / test results

JumperExtensionManagerTest.jump_should_return_done_when_jumper_returns_done

expected: <org.moreunit.core.extension.jump.JumpResult@4c85eb6b> but was: <org.moreunit.core.extension.jump.JumpResult@368d76d7>
Raw output
org.opentest4j.AssertionFailedError: expected: <org.moreunit.core.extension.jump.JumpResult@4c85eb6b> but was: <org.moreunit.core.extension.jump.JumpResult@368d76d7>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
	at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145)
	at org.moreunit.core.extension.JumperExtensionManagerTest.jump_should_return_done_when_jumper_returns_done(JumperExtensionManagerTest.java:64)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
}

@Test
public void jump_should_stop_at_first_done_result()
{
IJumpContext context = createMockContext("java");
IJumper jumper1 = mock(IJumper.class);
IJumper jumper2 = mock(IJumper.class);

when(languageExtensionManager.getJumpersFor("java")).thenReturn(() -> java.util.Arrays.asList(jumper1, jumper2).iterator());
when(jumper1.jump(context)).thenReturn(JumpResult.done());
when(jumper2.jump(context)).thenReturn(JumpResult.notDone());

JumpResult result = manager.jump(context);

assertEquals(JumpResult.done(), result);

Check failure on line 80 in org.moreunit.core.test/test/org/moreunit/core/extension/JumperExtensionManagerTest.java

View workflow job for this annotation

GitHub Actions / test results

JumperExtensionManagerTest.jump_should_stop_at_first_done_result

expected: <org.moreunit.core.extension.jump.JumpResult@770ad1f0> but was: <org.moreunit.core.extension.jump.JumpResult@4cda59e6>
Raw output
org.opentest4j.AssertionFailedError: expected: <org.moreunit.core.extension.jump.JumpResult@770ad1f0> but was: <org.moreunit.core.extension.jump.JumpResult@4cda59e6>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
	at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145)
	at org.moreunit.core.extension.JumperExtensionManagerTest.jump_should_stop_at_first_done_result(JumperExtensionManagerTest.java:80)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
verify(jumper1).jump(context);
verify(jumper2).jump(context);
}

@Test
public void jump_should_return_done_when_jumper_throws_exception()
{
IJumpContext context = createMockContext("java");
IJumper jumper = mock(IJumper.class);

when(languageExtensionManager.getJumpersFor("java")).thenReturn(() -> java.util.Collections.singleton(jumper).iterator());
when(jumper.jump(context)).thenThrow(new RuntimeException("test exception"));

JumpResult result = manager.jump(context);

assertEquals(JumpResult.done(), result);

Check failure on line 96 in org.moreunit.core.test/test/org/moreunit/core/extension/JumperExtensionManagerTest.java

View workflow job for this annotation

GitHub Actions / test results

JumperExtensionManagerTest.jump_should_return_done_when_jumper_throws_exception

expected: <org.moreunit.core.extension.jump.JumpResult@628cd698> but was: <org.moreunit.core.extension.jump.JumpResult@7b6bf8c1>
Raw output
org.opentest4j.AssertionFailedError: expected: <org.moreunit.core.extension.jump.JumpResult@628cd698> but was: <org.moreunit.core.extension.jump.JumpResult@7b6bf8c1>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
	at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145)
	at org.moreunit.core.extension.JumperExtensionManagerTest.jump_should_return_done_when_jumper_throws_exception(JumperExtensionManagerTest.java:96)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
}

@Test
public void jump_should_return_done_when_jumper_returns_null()
{
IJumpContext context = createMockContext("java");
IJumper jumper = mock(IJumper.class);

when(languageExtensionManager.getJumpersFor("java")).thenReturn(() -> java.util.Collections.singleton(jumper).iterator());
when(jumper.jump(context)).thenReturn(null);

JumpResult result = manager.jump(context);

assertEquals(JumpResult.done(), result);

Check failure on line 110 in org.moreunit.core.test/test/org/moreunit/core/extension/JumperExtensionManagerTest.java

View workflow job for this annotation

GitHub Actions / test results

JumperExtensionManagerTest.jump_should_return_done_when_jumper_returns_null

expected: <org.moreunit.core.extension.jump.JumpResult@23358a67> but was: <org.moreunit.core.extension.jump.JumpResult@5ed84d6d>
Raw output
org.opentest4j.AssertionFailedError: expected: <org.moreunit.core.extension.jump.JumpResult@23358a67> but was: <org.moreunit.core.extension.jump.JumpResult@5ed84d6d>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
	at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
	at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145)
	at org.moreunit.core.extension.JumperExtensionManagerTest.jump_should_return_done_when_jumper_returns_null(JumperExtensionManagerTest.java:110)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
}

private IJumpContext createMockContext(String fileExtension)
{
IJumpContext context = mock(IJumpContext.class);
IFile file = mock(IFile.class);
when(file.getFileExtension()).thenReturn(fileExtension);
when(context.getSelectedFile()).thenReturn(file);
when(context.getExecutionEvent()).thenReturn(mock(ExecutionEvent.class));
when(context.getOpenEditorPart()).thenReturn(mock(IEditorPart.class));
when(context.isFileOpenInEditor()).thenReturn(false);
return context;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
package org.moreunit.core.extension;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.Collections;
import java.util.Iterator;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;

import org.moreunit.core.languages.Language;
import org.moreunit.core.log.Logger;

public class LanguageExtensionManagerTest
{
private BundleContext bundleContext;
private Logger logger;
private LanguageExtensionManager manager;
private IExtensionRegistry extensionRegistry;
private IConfigurationElement[] configElements;

@BeforeEach
public void setUp()
{
bundleContext = mock(BundleContext.class);
logger = mock(Logger.class);
extensionRegistry = mock(IExtensionRegistry.class);
configElements = new IConfigurationElement[0];
}

@Test
public void extensionExistsForLanguage_should_return_true_when_language_exists()
{
try (MockedStatic<Platform> platformMock = Mockito.mockStatic(Platform.class))
{
IConfigurationElement configElement = mock(IConfigurationElement.class);
when(configElement.getAttribute("fileExtension")).thenReturn("java");
when(configElement.getAttribute("name")).thenReturn("Java");
when(configElement.getChildren("condition")).thenReturn(new IConfigurationElement[0]);
when(configElement.getContributor()).thenReturn(mock(org.eclipse.core.runtime.IContributor.class));

IConfigurationElement[] elements = new IConfigurationElement[] { configElement };
when(extensionRegistry.getConfigurationElementsFor(ExtensionPoints.LANGUAGES)).thenReturn(elements);

platformMock.when(Platform::getExtensionRegistry).thenReturn(extensionRegistry);

manager = new LanguageExtensionManager(bundleContext, logger);

assertTrue(manager.extensionExistsForLanguage("java"));
}
}

@Test
public void extensionExistsForLanguage_should_return_false_when_language_not_exists()
{
try (MockedStatic<Platform> platformMock = Mockito.mockStatic(Platform.class))
{
when(extensionRegistry.getConfigurationElementsFor(ExtensionPoints.LANGUAGES)).thenReturn(new IConfigurationElement[0]);
platformMock.when(Platform::getExtensionRegistry).thenReturn(extensionRegistry);

manager = new LanguageExtensionManager(bundleContext, logger);

assertFalse(manager.extensionExistsForLanguage("nonexistent"));
}
}

@Test
public void extensionExistsForLanguage_should_return_false_when_dependency_not_met()
{
try (MockedStatic<Platform> platformMock = Mockito.mockStatic(Platform.class))
{
IConfigurationElement configElement = mock(IConfigurationElement.class);
when(configElement.getAttribute("fileExtension")).thenReturn("java");
when(configElement.getAttribute("name")).thenReturn("Java");

IConfigurationElement conditionElement = mock(IConfigurationElement.class);
when(conditionElement.getAttribute("type")).thenReturn("dependency");
when(conditionElement.getAttribute("value")).thenReturn("missing.bundle");

when(configElement.getChildren("condition")).thenReturn(new IConfigurationElement[] { conditionElement });
when(configElement.getContributor()).thenReturn(mock(org.eclipse.core.runtime.IContributor.class));

IConfigurationElement[] elements = new IConfigurationElement[] { configElement };
when(extensionRegistry.getConfigurationElementsFor(ExtensionPoints.LANGUAGES)).thenReturn(elements);

platformMock.when(Platform::getExtensionRegistry).thenReturn(extensionRegistry);

Bundle[] bundles = new Bundle[0];
when(bundleContext.getBundles()).thenReturn(bundles);

manager = new LanguageExtensionManager(bundleContext, logger);

assertFalse(manager.extensionExistsForLanguage("java"));
}
}

@Test
public void extensionExistsForLanguage_should_return_true_when_dependency_met()
{
try (MockedStatic<Platform> platformMock = Mockito.mockStatic(Platform.class))
{
IConfigurationElement configElement = mock(IConfigurationElement.class);
when(configElement.getAttribute("fileExtension")).thenReturn("java");
when(configElement.getAttribute("name")).thenReturn("Java");

IConfigurationElement conditionElement = mock(IConfigurationElement.class);
when(conditionElement.getAttribute("type")).thenReturn("dependency");
when(conditionElement.getAttribute("value")).thenReturn("org.eclipse.jdt.core");

when(configElement.getChildren("condition")).thenReturn(new IConfigurationElement[] { conditionElement });
when(configElement.getContributor()).thenReturn(mock(org.eclipse.core.runtime.IContributor.class));

IConfigurationElement[] elements = new IConfigurationElement[] { configElement };
when(extensionRegistry.getConfigurationElementsFor(ExtensionPoints.LANGUAGES)).thenReturn(elements);

platformMock.when(Platform::getExtensionRegistry).thenReturn(extensionRegistry);

Bundle bundle = mock(Bundle.class);
when(bundle.getSymbolicName()).thenReturn("org.eclipse.jdt.core");
Bundle[] bundles = new Bundle[] { bundle };
when(bundleContext.getBundles()).thenReturn(bundles);

manager = new LanguageExtensionManager(bundleContext, logger);

assertTrue(manager.extensionExistsForLanguage("java"));
}
}

@Test
public void extensionExistsForLanguage_should_ignore_unknown_condition_types()
{
try (MockedStatic<Platform> platformMock = Mockito.mockStatic(Platform.class))
{
IConfigurationElement configElement = mock(IConfigurationElement.class);
when(configElement.getAttribute("fileExtension")).thenReturn("java");
when(configElement.getAttribute("name")).thenReturn("Java");

IConfigurationElement conditionElement = mock(IConfigurationElement.class);
when(conditionElement.getAttribute("type")).thenReturn("unknown");
when(conditionElement.getAttribute("value")).thenReturn("some.value");

when(configElement.getChildren("condition")).thenReturn(new IConfigurationElement[] { conditionElement });
when(configElement.getContributor()).thenReturn(mock(org.eclipse.core.runtime.IContributor.class));

IConfigurationElement[] elements = new IConfigurationElement[] { configElement };
when(extensionRegistry.getConfigurationElementsFor(ExtensionPoints.LANGUAGES)).thenReturn(elements);

platformMock.when(Platform::getExtensionRegistry).thenReturn(extensionRegistry);

manager = new LanguageExtensionManager(bundleContext, logger);

assertTrue(manager.extensionExistsForLanguage("java"));

Check failure on line 166 in org.moreunit.core.test/test/org/moreunit/core/extension/LanguageExtensionManagerTest.java

View workflow job for this annotation

GitHub Actions / test results

LanguageExtensionManagerTest.extensionExistsForLanguage_should_ignore_unknown_condition_types

expected: <true> but was: <false>
Raw output
org.opentest4j.AssertionFailedError: expected: <true> but was: <false>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)
	at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)
	at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:31)
	at org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:183)
	at org.moreunit.core.extension.LanguageExtensionManagerTest.extensionExistsForLanguage_should_ignore_unknown_condition_types(LanguageExtensionManagerTest.java:166)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
}
}

@Test
public void extensionExistsForLanguage_should_handle_null_conditions()
{
try (MockedStatic<Platform> platformMock = Mockito.mockStatic(Platform.class))
{
IConfigurationElement configElement = mock(IConfigurationElement.class);
when(configElement.getAttribute("fileExtension")).thenReturn("java");
when(configElement.getAttribute("name")).thenReturn("Java");
when(configElement.getChildren("condition")).thenReturn(null);
when(configElement.getContributor()).thenReturn(mock(org.eclipse.core.runtime.IContributor.class));

IConfigurationElement[] elements = new IConfigurationElement[] { configElement };
when(extensionRegistry.getConfigurationElementsFor(ExtensionPoints.LANGUAGES)).thenReturn(elements);

platformMock.when(Platform::getExtensionRegistry).thenReturn(extensionRegistry);

manager = new LanguageExtensionManager(bundleContext, logger);

assertTrue(manager.extensionExistsForLanguage("java"));
}
}

@Test
public void extensionExistsForLanguage_should_log_warn_on_exception()
{
try (MockedStatic<Platform> platformMock = Mockito.mockStatic(Platform.class))
{
IConfigurationElement configElement = mock(IConfigurationElement.class);
when(configElement.getAttribute("fileExtension")).thenThrow(new RuntimeException("test error"));
when(configElement.getContributor()).thenReturn(mock(org.eclipse.core.runtime.IContributor.class));

IConfigurationElement[] elements = new IConfigurationElement[] { configElement };
when(extensionRegistry.getConfigurationElementsFor(ExtensionPoints.LANGUAGES)).thenReturn(elements);

platformMock.when(Platform::getExtensionRegistry).thenReturn(extensionRegistry);

manager = new LanguageExtensionManager(bundleContext, logger);

assertFalse(manager.extensionExistsForLanguage("java"));
verify(logger).warn(anyString());
}
}
}
Loading
Loading