You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AbstractExtensionFinderTest.java 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /*
  2. * Copyright (C) 2012-present the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.pf4j;
  17. import org.junit.jupiter.api.AfterEach;
  18. import org.junit.jupiter.api.BeforeEach;
  19. import org.junit.jupiter.api.Test;
  20. import org.pf4j.plugin.FailTestPlugin;
  21. import org.pf4j.plugin.TestExtensionPoint;
  22. import java.util.Collections;
  23. import java.util.HashSet;
  24. import java.util.LinkedHashMap;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.Set;
  28. import static org.junit.jupiter.api.Assertions.assertEquals;
  29. import static org.mockito.Mockito.eq;
  30. import static org.mockito.Mockito.mock;
  31. import static org.mockito.Mockito.when;
  32. /**
  33. * @author Mario Franco
  34. */
  35. public class AbstractExtensionFinderTest {
  36. private PluginManager pluginManager;
  37. @BeforeEach
  38. public void setUp() {
  39. PluginWrapper pluginStarted = mock(PluginWrapper.class);
  40. when(pluginStarted.getPluginClassLoader()).thenReturn(getClass().getClassLoader());
  41. when(pluginStarted.getPluginState()).thenReturn(PluginState.STARTED);
  42. PluginWrapper pluginStopped = mock(PluginWrapper.class);
  43. when(pluginStopped.getPluginClassLoader()).thenReturn(getClass().getClassLoader());
  44. when(pluginStopped.getPluginState()).thenReturn(PluginState.STOPPED);
  45. pluginManager = mock(PluginManager.class);
  46. when(pluginManager.getPlugin(eq("plugin1"))).thenReturn(pluginStarted);
  47. when(pluginManager.getPlugin(eq("plugin2"))).thenReturn(pluginStopped);
  48. when(pluginManager.getPluginClassLoader(eq("plugin1"))).thenReturn(getClass().getClassLoader());
  49. when(pluginManager.getExtensionFactory()).thenReturn(new DefaultExtensionFactory());
  50. }
  51. @AfterEach
  52. public void tearDown() {
  53. pluginManager = null;
  54. }
  55. /**
  56. * Test of {@link AbstractExtensionFinder#find(Class)}.
  57. */
  58. @Test
  59. public void testFindFailType() {
  60. ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
  61. @Override
  62. public Map<String, Set<String>> readPluginsStorages() {
  63. return Collections.emptyMap();
  64. }
  65. @Override
  66. public Map<String, Set<String>> readClasspathStorages() {
  67. return Collections.emptyMap();
  68. }
  69. };
  70. List<ExtensionWrapper<FailTestPlugin>> list = instance.find(FailTestPlugin.class);
  71. assertEquals(0, list.size());
  72. }
  73. /**
  74. * Test of {@link AbstractExtensionFinder#find(Class)}.
  75. */
  76. @Test
  77. public void testFindFromClasspath() {
  78. ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
  79. @Override
  80. public Map<String, Set<String>> readPluginsStorages() {
  81. return Collections.emptyMap();
  82. }
  83. @Override
  84. public Map<String, Set<String>> readClasspathStorages() {
  85. Map<String, Set<String>> entries = new LinkedHashMap<>();
  86. Set<String> bucket = new HashSet<>();
  87. bucket.add("org.pf4j.plugin.TestExtension");
  88. bucket.add("org.pf4j.plugin.FailTestExtension");
  89. entries.put(null, bucket);
  90. return entries;
  91. }
  92. };
  93. List<ExtensionWrapper<TestExtensionPoint>> list = instance.find(TestExtensionPoint.class);
  94. assertEquals(2, list.size());
  95. }
  96. /**
  97. * Test of {@link AbstractExtensionFinder#find(Class, String)}.
  98. */
  99. @Test
  100. public void testFindFromPlugin() {
  101. ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
  102. @Override
  103. public Map<String, Set<String>> readPluginsStorages() {
  104. Map<String, Set<String>> entries = new LinkedHashMap<>();
  105. Set<String> bucket = new HashSet<>();
  106. bucket.add("org.pf4j.plugin.TestExtension");
  107. bucket.add("org.pf4j.plugin.FailTestExtension");
  108. entries.put("plugin1", bucket);
  109. bucket = new HashSet<>();
  110. bucket.add("org.pf4j.plugin.TestExtension");
  111. entries.put("plugin2", bucket);
  112. return entries;
  113. }
  114. @Override
  115. public Map<String, Set<String>> readClasspathStorages() {
  116. return Collections.emptyMap();
  117. }
  118. };
  119. List<ExtensionWrapper<TestExtensionPoint>> list = instance.find(TestExtensionPoint.class);
  120. assertEquals(2, list.size());
  121. list = instance.find(TestExtensionPoint.class, "plugin1");
  122. assertEquals(2, list.size());
  123. list = instance.find(TestExtensionPoint.class, "plugin2");
  124. assertEquals(0, list.size());
  125. }
  126. /**
  127. * Test of {@link AbstractExtensionFinder#findClassNames(String)}.
  128. */
  129. @Test
  130. public void testFindClassNames() {
  131. ExtensionFinder instance = new AbstractExtensionFinder(pluginManager) {
  132. @Override
  133. public Map<String, Set<String>> readPluginsStorages() {
  134. Map<String, Set<String>> entries = new LinkedHashMap<>();
  135. Set<String> bucket = new HashSet<>();
  136. bucket.add("org.pf4j.plugin.TestExtension");
  137. entries.put("plugin1", bucket);
  138. return entries;
  139. }
  140. @Override
  141. public Map<String, Set<String>> readClasspathStorages() {
  142. Map<String, Set<String>> entries = new LinkedHashMap<>();
  143. Set<String> bucket = new HashSet<>();
  144. bucket.add("org.pf4j.plugin.TestExtension");
  145. bucket.add("org.pf4j.plugin.FailTestExtension");
  146. entries.put(null, bucket);
  147. return entries;
  148. }
  149. };
  150. Set<String> result = instance.findClassNames(null);
  151. assertEquals(2, result.size());
  152. result = instance.findClassNames("plugin1");
  153. assertEquals(1, result.size());
  154. }
  155. }