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.

DefaultPluginFactoryTest.java 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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 com.google.testing.compile.JavaFileObjects;
  18. import org.junit.jupiter.api.Test;
  19. import org.pf4j.test.JavaFileObjectClassLoader;
  20. import org.pf4j.test.JavaFileObjectUtils;
  21. import org.pf4j.test.JavaSources;
  22. import org.pf4j.test.TestPlugin;
  23. import javax.tools.JavaFileObject;
  24. import static org.hamcrest.CoreMatchers.instanceOf;
  25. import static org.hamcrest.MatcherAssert.assertThat;
  26. import static org.junit.jupiter.api.Assertions.assertEquals;
  27. import static org.junit.jupiter.api.Assertions.assertNotNull;
  28. import static org.junit.jupiter.api.Assertions.assertNull;
  29. import static org.mockito.Mockito.mock;
  30. import static org.mockito.Mockito.when;
  31. /**
  32. * @author Mario Franco
  33. */
  34. public class DefaultPluginFactoryTest {
  35. public static final JavaFileObject FailTestPlugin = JavaFileObjects.forSourceLines("FailTestPlugin",
  36. "package test;",
  37. "import org.pf4j.Plugin;",
  38. "",
  39. "public class FailTestPlugin {",
  40. "}");
  41. public static final JavaFileObject AnotherFailTestPlugin = JavaFileObjects.forSourceLines("AnotherFailTestPlugin",
  42. "package test;",
  43. "import org.pf4j.Plugin;",
  44. "",
  45. "public class AnotherFailTestPlugin extends Plugin {",
  46. " public AnotherFailTestPlugin() { super(null); }",
  47. "}");
  48. public static final JavaFileObject AnotherTestPlugin = JavaFileObjects.forSourceLines("AnotherTestPlugin",
  49. "package test;",
  50. "import org.pf4j.Plugin;",
  51. "",
  52. "public class AnotherTestPlugin extends Plugin {",
  53. " public AnotherTestPlugin() { super(); }",
  54. "}");
  55. @Test
  56. public void testCreate() {
  57. PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
  58. when(pluginDescriptor.getPluginClass()).thenReturn(TestPlugin.class.getName());
  59. PluginWrapper pluginWrapper = mock(PluginWrapper.class);
  60. when(pluginWrapper.getDescriptor()).thenReturn(pluginDescriptor);
  61. when(pluginWrapper.getPluginClassLoader()).thenReturn(getClass().getClassLoader());
  62. PluginFactory pluginFactory = new DefaultPluginFactory();
  63. Plugin result = pluginFactory.create(pluginWrapper);
  64. assertNotNull(result);
  65. assertThat(result, instanceOf(TestPlugin.class));
  66. }
  67. @Test
  68. public void pluginConstructorNoParameters() {
  69. PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
  70. JavaFileObject object = JavaSources.compile(AnotherTestPlugin);
  71. String pluginClassName = JavaFileObjectUtils.getClassName(object);
  72. when(pluginDescriptor.getPluginClass()).thenReturn(pluginClassName);
  73. PluginWrapper pluginWrapper = mock(PluginWrapper.class);
  74. when(pluginWrapper.getDescriptor()).thenReturn(pluginDescriptor);
  75. JavaFileObjectClassLoader classLoader = new JavaFileObjectClassLoader();
  76. classLoader.load(AnotherTestPlugin);
  77. when(pluginWrapper.getPluginClassLoader()).thenReturn(classLoader);
  78. PluginFactory pluginFactory = new DefaultPluginFactory();
  79. Plugin result = pluginFactory.create(pluginWrapper);
  80. assertNotNull(result);
  81. assertEquals(pluginClassName, result.getClass().getName());
  82. }
  83. @Test
  84. public void testCreateFail() {
  85. PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
  86. JavaFileObject object = JavaSources.compile(FailTestPlugin);
  87. String pluginClassName = JavaFileObjectUtils.getClassName(object);
  88. when(pluginDescriptor.getPluginClass()).thenReturn(pluginClassName);
  89. PluginWrapper pluginWrapper = mock(PluginWrapper.class);
  90. when(pluginWrapper.getDescriptor()).thenReturn(pluginDescriptor);
  91. JavaFileObjectClassLoader classLoader = new JavaFileObjectClassLoader();
  92. classLoader.load(FailTestPlugin);
  93. when(pluginWrapper.getPluginClassLoader()).thenReturn(classLoader);
  94. PluginFactory pluginFactory = new DefaultPluginFactory();
  95. Plugin plugin = pluginFactory.create(pluginWrapper);
  96. assertNull(plugin);
  97. }
  98. @Test
  99. public void testCreateFailNotFound() {
  100. PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
  101. when(pluginDescriptor.getPluginClass()).thenReturn("org.pf4j.plugin.NotFoundTestPlugin");
  102. PluginWrapper pluginWrapper = mock(PluginWrapper.class);
  103. when(pluginWrapper.getDescriptor()).thenReturn(pluginDescriptor);
  104. when(pluginWrapper.getPluginClassLoader()).thenReturn(getClass().getClassLoader());
  105. PluginFactory pluginFactory = new DefaultPluginFactory();
  106. Plugin plugin = pluginFactory.create(pluginWrapper);
  107. assertNull(plugin);
  108. }
  109. @Test
  110. public void testCreateFailConstructor() {
  111. PluginDescriptor pluginDescriptor = mock(PluginDescriptor.class);
  112. JavaFileObject object = JavaSources.compile(AnotherFailTestPlugin);
  113. String pluginClassName = JavaFileObjectUtils.getClassName(object);
  114. when(pluginDescriptor.getPluginClass()).thenReturn(pluginClassName);
  115. PluginWrapper pluginWrapper = mock(PluginWrapper.class);
  116. when(pluginWrapper.getDescriptor()).thenReturn(pluginDescriptor);
  117. JavaFileObjectClassLoader classLoader = new JavaFileObjectClassLoader();
  118. classLoader.load(AnotherFailTestPlugin);
  119. when(pluginWrapper.getPluginClassLoader()).thenReturn(classLoader);
  120. PluginFactory pluginFactory = new DefaultPluginFactory();
  121. Plugin plugin = pluginFactory.create(pluginWrapper);
  122. assertNull(plugin);
  123. }
  124. }