summaryrefslogtreecommitdiffstats
path: root/pf4j
diff options
context:
space:
mode:
authorDecebal Suiu <decebal.suiu@gmail.com>2017-04-06 22:10:50 +0300
committerDecebal Suiu <decebal.suiu@gmail.com>2017-04-06 22:10:50 +0300
commit0a0513b6634cf7ec4689a2ef88862f4d885f73c8 (patch)
treed25a585d7458af90ca3cffbfd3c642fc2e3bb4d7 /pf4j
parent28e716c71e5ced72c8a5e100e86072d641383a82 (diff)
downloadpf4j-0a0513b6634cf7ec4689a2ef88862f4d885f73c8.tar.gz
pf4j-0a0513b6634cf7ec4689a2ef88862f4d885f73c8.zip
Add more unit tests
Diffstat (limited to 'pf4j')
-rw-r--r--pf4j/src/test/java/ro/fortsoft/pf4j/AbstractExtensionFinderTest.java195
-rw-r--r--pf4j/src/test/java/ro/fortsoft/pf4j/ExtensionAnnotationProcessorTest.java42
-rw-r--r--pf4j/src/test/java/ro/fortsoft/pf4j/LegacyExtensionStorageTest.java50
-rw-r--r--pf4j/src/test/java/ro/fortsoft/pf4j/plugin/FailTestExtension.java7
-rw-r--r--pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtension.java6
-rw-r--r--pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtensionPoint.java25
6 files changed, 319 insertions, 6 deletions
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/AbstractExtensionFinderTest.java b/pf4j/src/test/java/ro/fortsoft/pf4j/AbstractExtensionFinderTest.java
new file mode 100644
index 0000000..47a1b20
--- /dev/null
+++ b/pf4j/src/test/java/ro/fortsoft/pf4j/AbstractExtensionFinderTest.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2015 Decebal Suiu
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ro.fortsoft.pf4j;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import ro.fortsoft.pf4j.plugin.FailTestPlugin;
+import ro.fortsoft.pf4j.plugin.TestExtensionPoint;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author Mario Franco
+ */
+public class AbstractExtensionFinderTest {
+
+ private PluginManager pluginManager;
+
+ @Before
+ public void setUp() {
+ PluginWrapper pluginStarted = mock(PluginWrapper.class);
+ when(pluginStarted.getPluginClassLoader()).thenReturn(getClass().getClassLoader());
+ when(pluginStarted.getPluginState()).thenReturn(PluginState.STARTED);
+
+ PluginWrapper pluginStopped = mock(PluginWrapper.class);
+ when(pluginStopped.getPluginClassLoader()).thenReturn(getClass().getClassLoader());
+ when(pluginStopped.getPluginState()).thenReturn(PluginState.STOPPED);
+
+ pluginManager = mock(PluginManager.class);
+ when(pluginManager.getPlugin(eq("plugin1"))).thenReturn(pluginStarted);
+ when(pluginManager.getPlugin(eq("plugin2"))).thenReturn(pluginStopped);
+ when(pluginManager.getPluginClassLoader(eq("plugin1"))).thenReturn(getClass().getClassLoader());
+ when(pluginManager.getExtensionFactory()).thenReturn(new DefaultExtensionFactory());
+ }
+
+ @After
+ public void tearDown() {
+ pluginManager = null;
+ }
+
+ /**
+ * Test of {@link AbstractExtensionFinder#find(Class)}.
+ */
+ @Test
+ public void testFindFailType() {
+ ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
+
+ @Override
+ public Map<String, Set<String>> readPluginsStorages() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Map<String, Set<String>> readClasspathStorages() {
+ return Collections.emptyMap();
+ }
+
+ };
+ List<ExtensionWrapper<FailTestPlugin>> list = instance.find(FailTestPlugin.class);
+ assertEquals(0, list.size());
+ }
+
+ /**
+ * Test of {@link AbstractExtensionFinder#find(Class)}.
+ */
+ @Test
+ public void testFindFromClasspath() {
+ ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
+
+ @Override
+ public Map<String, Set<String>> readPluginsStorages() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Map<String, Set<String>> readClasspathStorages() {
+ Map<String, Set<String>> entries = new LinkedHashMap<>();
+
+ Set<String> bucket = new HashSet<>();
+ bucket.add("ro.fortsoft.pf4j.plugin.TestExtension");
+ bucket.add("ro.fortsoft.pf4j.plugin.FailTestExtension");
+ entries.put(null, bucket);
+
+ return entries;
+ }
+
+ };
+
+ List<ExtensionWrapper<TestExtensionPoint>> list = instance.find(TestExtensionPoint.class);
+ assertEquals(2, list.size());
+ }
+
+ /**
+ * Test of {@link AbstractExtensionFinder#find(Class, String)}.
+ */
+ @Test
+ public void testFindFromPlugin() {
+ ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
+
+ @Override
+ public Map<String, Set<String>> readPluginsStorages() {
+ Map<String, Set<String>> entries = new LinkedHashMap<>();
+
+ Set<String> bucket = new HashSet<>();
+ bucket.add("ro.fortsoft.pf4j.plugin.TestExtension");
+ bucket.add("ro.fortsoft.pf4j.plugin.FailTestExtension");
+ entries.put("plugin1", bucket);
+ bucket = new HashSet<>();
+ bucket.add("ro.fortsoft.pf4j.plugin.TestExtension");
+ entries.put("plugin2", bucket);
+
+ return entries;
+ }
+
+ @Override
+ public Map<String, Set<String>> readClasspathStorages() {
+ return Collections.emptyMap();
+ }
+
+ };
+
+ List<ExtensionWrapper<TestExtensionPoint>> list = instance.find(TestExtensionPoint.class);
+ assertEquals(2, list.size());
+
+ list = instance.find(TestExtensionPoint.class, "plugin1");
+ assertEquals(2, list.size());
+
+ list = instance.find(TestExtensionPoint.class, "plugin2");
+ assertEquals(0, list.size());
+ }
+
+ /**
+ * Test of {@link AbstractExtensionFinder#findClassNames(String)}.
+ */
+ @Test
+ public void testFindClassNames() {
+ ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
+
+ @Override
+ public Map<String, Set<String>> readPluginsStorages() {
+ Map<String, Set<String>> entries = new LinkedHashMap<>();
+
+ Set<String> bucket = new HashSet<>();
+ bucket.add("ro.fortsoft.pf4j.plugin.TestExtension");
+ entries.put("plugin1", bucket);
+
+ return entries;
+ }
+
+ @Override
+ public Map<String, Set<String>> readClasspathStorages() {
+ Map<String, Set<String>> entries = new LinkedHashMap<>();
+
+ Set<String> bucket = new HashSet<>();
+ bucket.add("ro.fortsoft.pf4j.plugin.TestExtension");
+ bucket.add("ro.fortsoft.pf4j.plugin.FailTestExtension");
+ entries.put(null, bucket);
+
+ return entries;
+ }
+
+ };
+
+ Set<String> result = instance.findClassNames(null);
+ assertEquals(2, result.size());
+
+ result = instance.findClassNames("plugin1");
+ assertEquals(1, result.size());
+ }
+
+}
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/ExtensionAnnotationProcessorTest.java b/pf4j/src/test/java/ro/fortsoft/pf4j/ExtensionAnnotationProcessorTest.java
new file mode 100644
index 0000000..1c99396
--- /dev/null
+++ b/pf4j/src/test/java/ro/fortsoft/pf4j/ExtensionAnnotationProcessorTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2017 Decebal Suiu
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ro.fortsoft.pf4j;
+
+import org.junit.Test;
+import ro.fortsoft.pf4j.processor.ExtensionAnnotationProcessor;
+
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Mario Franco
+ */
+public class ExtensionAnnotationProcessorTest {
+
+ /**
+ * Test of {@link ExtensionAnnotationProcessor#getSupportedAnnotationTypes()}.
+ */
+ @Test
+ public void testGetSupportedAnnotationTypes() {
+ ExtensionAnnotationProcessor instance = new ExtensionAnnotationProcessor();
+ Set<String> result = instance.getSupportedAnnotationTypes();
+ assertEquals(1, result.size());
+ assertTrue(result.contains(Extension.class.getName()));
+ }
+
+}
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/LegacyExtensionStorageTest.java b/pf4j/src/test/java/ro/fortsoft/pf4j/LegacyExtensionStorageTest.java
new file mode 100644
index 0000000..aeeb371
--- /dev/null
+++ b/pf4j/src/test/java/ro/fortsoft/pf4j/LegacyExtensionStorageTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 Decebal Suiu
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ro.fortsoft.pf4j;
+
+import org.junit.Test;
+import ro.fortsoft.pf4j.processor.LegacyExtensionStorage;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Decebal Suiu
+ */
+public class LegacyExtensionStorageTest {
+
+ /**
+ * Test of {@link LegacyExtensionStorage#read(Reader, Set)}.
+ */
+ @Test
+ public void testRead() throws IOException {
+ Reader reader = new StringReader(
+ "# comment\n"
+ + "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting\n"
+ + "ro.fortsoft.pf4j.demo.welcome.WelcomePlugin$WelcomeGreeting\n"
+ + "ro.fortsoft.pf4j.demo.welcome.OtherGreeting\n");
+
+ Set<String> entries = new HashSet<>();
+ LegacyExtensionStorage.read(reader, entries);
+ assertEquals(3, entries.size());
+ }
+
+}
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/FailTestExtension.java b/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/FailTestExtension.java
index 4bc6110..3832b7f 100644
--- a/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/FailTestExtension.java
+++ b/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/FailTestExtension.java
@@ -15,14 +15,15 @@
*/
package ro.fortsoft.pf4j.plugin;
-import ro.fortsoft.pf4j.ExtensionPoint;
+import ro.fortsoft.pf4j.Extension;
/**
- *
* @author Mario Franco
*/
-public class FailTestExtension implements ExtensionPoint {
+@Extension
+public class FailTestExtension implements TestExtensionPoint {
public FailTestExtension(String name) {
}
+
}
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtension.java b/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtension.java
index 3d74ffb..181e90d 100644
--- a/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtension.java
+++ b/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtension.java
@@ -15,12 +15,12 @@
*/
package ro.fortsoft.pf4j.plugin;
-import ro.fortsoft.pf4j.ExtensionPoint;
+import ro.fortsoft.pf4j.Extension;
/**
- *
* @author Mario Franco
*/
-public class TestExtension implements ExtensionPoint {
+@Extension
+public class TestExtension implements TestExtensionPoint {
}
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtensionPoint.java b/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtensionPoint.java
new file mode 100644
index 0000000..3c1ee1e
--- /dev/null
+++ b/pf4j/src/test/java/ro/fortsoft/pf4j/plugin/TestExtensionPoint.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2015 Decebal Suiu
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ro.fortsoft.pf4j.plugin;
+
+import ro.fortsoft.pf4j.ExtensionPoint;
+
+/**
+ * @author Mario Franco
+ */
+public interface TestExtensionPoint extends ExtensionPoint {
+
+}