選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

PropertiesPluginDescriptorFinderTest.java 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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.BeforeEach;
  18. import org.junit.jupiter.api.Test;
  19. import org.junit.jupiter.api.io.TempDir;
  20. import java.io.IOException;
  21. import java.nio.charset.Charset;
  22. import java.nio.file.Files;
  23. import java.nio.file.Path;
  24. import java.util.Arrays;
  25. import java.util.List;
  26. import static org.junit.jupiter.api.Assertions.assertEquals;
  27. import static org.junit.jupiter.api.Assertions.assertFalse;
  28. import static org.junit.jupiter.api.Assertions.assertThrows;
  29. import static org.junit.jupiter.api.Assertions.assertTrue;
  30. public class PropertiesPluginDescriptorFinderTest {
  31. private VersionManager versionManager;
  32. @TempDir
  33. Path pluginsPath;
  34. @BeforeEach
  35. public void setUp() throws IOException {
  36. Charset charset = Charset.forName("UTF-8");
  37. Path pluginPath = Files.createDirectories(pluginsPath.resolve("test-plugin-1"));
  38. Files.write(pluginPath.resolve("plugin.properties"), getPlugin1Properties(), charset);
  39. pluginPath = Files.createDirectories(pluginsPath.resolve("test-plugin-2"));
  40. Files.write(pluginPath.resolve("plugin.properties"), getPlugin2Properties(), charset);
  41. // empty plugin
  42. Files.createDirectories(pluginsPath.resolve("test-plugin-3"));
  43. // no plugin class
  44. pluginPath = Files.createDirectories(pluginsPath.resolve("test-plugin-4"));
  45. Files.write(pluginPath.resolve("plugin.properties"), getPlugin4Properties(), charset);
  46. // no plugin version
  47. pluginPath = Files.createDirectories(pluginsPath.resolve("test-plugin-5"));
  48. Files.write(pluginPath.resolve("plugin.properties"), getPlugin5Properties(), charset);
  49. // no plugin id
  50. pluginPath = Files.createDirectories(pluginsPath.resolve("test-plugin-6"));
  51. Files.write(pluginPath.resolve("plugin.properties"), getPlugin6Properties(), charset);
  52. versionManager = new DefaultVersionManager();
  53. }
  54. @Test
  55. public void testFind() throws Exception {
  56. PluginDescriptorFinder descriptorFinder = new PropertiesPluginDescriptorFinder();
  57. PluginDescriptor plugin1 = descriptorFinder.find(pluginsPath.resolve("test-plugin-1"));
  58. PluginDescriptor plugin2 = descriptorFinder.find(pluginsPath.resolve("test-plugin-2"));
  59. assertEquals("test-plugin-1", plugin1.getPluginId());
  60. assertEquals("Test Plugin 1", plugin1.getPluginDescription());
  61. assertEquals("org.pf4j.plugin.TestPlugin", plugin1.getPluginClass());
  62. assertEquals("0.0.1", plugin1.getVersion());
  63. assertEquals("Decebal Suiu", plugin1.getProvider());
  64. assertEquals(2, plugin1.getDependencies().size());
  65. assertEquals("test-plugin-2", plugin1.getDependencies().get(0).getPluginId());
  66. assertEquals("test-plugin-3", plugin1.getDependencies().get(1).getPluginId());
  67. assertEquals("~1.0", plugin1.getDependencies().get(1).getPluginVersionSupport());
  68. assertEquals("Apache-2.0", plugin1.getLicense());
  69. assertEquals(">=1", plugin1.getRequires());
  70. assertTrue(versionManager.checkVersionConstraint("1.0.0", plugin1.getRequires()));
  71. assertFalse(versionManager.checkVersionConstraint("0.1.0", plugin1.getRequires()));
  72. assertEquals("test-plugin-2", plugin2.getPluginId());
  73. assertEquals("", plugin2.getPluginDescription());
  74. assertEquals("org.pf4j.plugin.TestPlugin", plugin2.getPluginClass());
  75. assertEquals("0.0.1", plugin2.getVersion());
  76. assertEquals("Decebal Suiu", plugin2.getProvider());
  77. assertEquals(0, plugin2.getDependencies().size());
  78. assertEquals("*", plugin2.getRequires()); // Default is *
  79. assertTrue(versionManager.checkVersionConstraint("1.0.0", plugin2.getRequires()));
  80. }
  81. @Test
  82. public void testNotFound() {
  83. PluginDescriptorFinder descriptorFinder = new PropertiesPluginDescriptorFinder();
  84. assertThrows(PluginException.class, () -> descriptorFinder.find(pluginsPath.resolve("test-plugin-3")));
  85. }
  86. private List<String> getPlugin1Properties() {
  87. String[] lines = new String[] {
  88. "plugin.id=test-plugin-1\n"
  89. + "plugin.version=0.0.1\n"
  90. + "plugin.description=Test Plugin 1\n"
  91. + "plugin.provider=Decebal Suiu\n"
  92. + "plugin.class=org.pf4j.plugin.TestPlugin\n"
  93. + "plugin.dependencies=test-plugin-2,test-plugin-3@~1.0\n"
  94. + "plugin.requires=>=1\n"
  95. + "plugin.license=Apache-2.0\n"
  96. + "\n"
  97. + ""
  98. };
  99. return Arrays.asList(lines);
  100. }
  101. private List<String> getPlugin2Properties() {
  102. String[] lines = new String[] {
  103. "plugin.id=test-plugin-2\n"
  104. + "plugin.version=0.0.1\n"
  105. + "plugin.provider=Decebal Suiu\n"
  106. + "plugin.class=org.pf4j.plugin.TestPlugin\n"
  107. + "plugin.dependencies=\n"
  108. + "\n"
  109. + ""
  110. };
  111. return Arrays.asList(lines);
  112. }
  113. private List<String> getPlugin4Properties() {
  114. String[] lines = new String[] {
  115. "plugin.id=test-plugin-2\n"
  116. + "plugin.version=0.0.1\n"
  117. + "plugin.provider=Decebal Suiu\n"
  118. + "plugin.dependencies=\n"
  119. + "plugin.requires=*\n"
  120. + "\n"
  121. + ""
  122. };
  123. return Arrays.asList(lines);
  124. }
  125. private List<String> getPlugin5Properties() {
  126. String[] lines = new String[] {
  127. "plugin.id=test-plugin-2\n"
  128. + "plugin.provider=Decebal Suiu\n"
  129. + "plugin.class=org.pf4j.plugin.TestPlugin\n"
  130. + "plugin.dependencies=\n"
  131. + "plugin.requires=*\n"
  132. + "\n"
  133. + ""
  134. };
  135. return Arrays.asList(lines);
  136. }
  137. private List<String> getPlugin6Properties() {
  138. String[] lines = new String[] {
  139. "plugin.version=0.0.1\n"
  140. + "plugin.provider=Decebal Suiu\n"
  141. + "plugin.class=org.pf4j.plugin.TestPlugin\n"
  142. + "plugin.dependencies=\n"
  143. + "plugin.requires=*\n"
  144. + "\n"
  145. + ""
  146. };
  147. return Arrays.asList(lines);
  148. }
  149. }