import com.github.zafarkhaja.semver.Version;
import java.io.File;
-import java.net.URL;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
*/
public class ManifestPluginDescriptorFinderTest {
+ @Rule
+ public TemporaryFolder testFolder = new TemporaryFolder();
+
+ @Before
+ public void setUp() throws IOException {
+ Charset charset = Charset.forName("UTF-8");
+
+ File plugin = testFolder.newFolder("test-plugin-1", "classes", "META-INF");
+ Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes());
+ Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin1Manifest(), charset);
+
+ plugin = testFolder.newFolder("test-plugin-2", "classes", "META-INF");
+ Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes());
+ Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin2Manifest(), charset);
+
+ // Empty Plugin
+ testFolder.newFolder("test-plugin-3");
+
+ // No Plugin Class
+ plugin = testFolder.newFolder("test-plugin-4", "classes", "META-INF");
+ Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes());
+ Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin4Manifest(), charset);
+
+ // No Plugin Version
+ plugin = testFolder.newFolder("test-plugin-5", "classes", "META-INF");
+ Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes());
+ Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin5Manifest(), charset);
+
+ // No Plugin Id
+ plugin = testFolder.newFolder("test-plugin-6", "classes", "META-INF");
+ Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes());
+ Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin6Manifest(), charset);
+ }
+
/**
* Test of find method, of class ManifestPluginDescriptorFinder.
*/
@Test
public void testFind() throws Exception {
DefaultPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath());
- URL url = getClass().getResource("/test-plugin-1");
- PluginDescriptor plugin1 = instance.find(new File(url.getPath()));
- url = getClass().getResource("/test-plugin-2");
- PluginDescriptor plugin2 = instance.find(new File(url.getPath()));
+
+ PluginDescriptor plugin1 = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-1").toFile());
+
+ PluginDescriptor plugin2 = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-2").toFile());
assertEquals("test-plugin-1", plugin1.getPluginId());
assertEquals("Test Plugin 1", plugin1.getPluginDescription());
public void testFindNotFound() throws Exception {
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath());
- URL url = getClass().getResource("/test-plugin-3");
- PluginDescriptor result = instance.find(new File(url.getPath()));
+ PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-3").toFile());
}
/**
* Test of find method, of class ManifestPluginDescriptorFinder.
*/
@Test(expected = PluginException.class)
- public void testFindMissingPluginId() throws Exception {
+ public void testFindMissingPluginClass() throws Exception {
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath());
- URL url = getClass().getResource("/test-plugin-6");
- PluginDescriptor result = instance.find(new File(url.getPath()));
+ PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-4").toFile());
}
/**
* Test of find method, of class ManifestPluginDescriptorFinder.
*/
@Test(expected = PluginException.class)
- public void testFindMissingPluginClass() throws Exception {
+ public void testFindMissingPluginVersion() throws Exception {
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath());
- URL url = getClass().getResource("/test-plugin-4");
- PluginDescriptor result = instance.find(new File(url.getPath()));
+ PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-5").toFile());
}
/**
* Test of find method, of class ManifestPluginDescriptorFinder.
*/
@Test(expected = PluginException.class)
- public void testFindMissingPluginVersion() throws Exception {
+ public void testFindMissingPluginId() throws Exception {
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath());
- URL url = getClass().getResource("/test-plugin-5");
- PluginDescriptor result = instance.find(new File(url.getPath()));
+ PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-6").toFile());
+ }
+
+ private List<String> getPlugin1Manifest() {
+
+ String[] lines = new String[]{"Manifest-Version: 1.0\n"
+ + "Implementation-Title: Test Plugin #1\n"
+ + "Implementation-Version: 0.10.0-SNAPSHOT\n"
+ + "Archiver-Version: Plexus Archiver\n"
+ + "Built-By: Mario Franco\n"
+ + "Specification-Title: Test Plugin #1\n"
+ + "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n"
+ + "Plugin-Version: 0.0.1\n"
+ + "Plugin-Id: test-plugin-1\n"
+ + "Plugin-Description: Test Plugin 1\n"
+ + "Plugin-Provider: Decebal Suiu\n"
+ + "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n"
+ + "Plugin-Dependencies: test-plugin-2,test-plugin-3@~1.0\n"
+ + "Plugin-Requires: *\n"
+ + "Created-By: Apache Maven 3.0.5\n"
+ + "Build-Jdk: 1.8.0_45\n"
+ + "Specification-Version: 0.10.0-SNAPSHOT\n"
+ + "\n"
+ + ""};
+
+ return Arrays.asList(lines);
+ }
+
+ private List<String> getPlugin2Manifest() {
+
+ String[] lines = new String[]{"Manifest-Version: 1.0\n"
+ + "Plugin-Dependencies: \n"
+ + "Implementation-Title: Test Plugin #2\n"
+ + "Implementation-Version: 0.10.0-SNAPSHOT\n"
+ + "Archiver-Version: Plexus Archiver\n"
+ + "Built-By: Mario Franco\n"
+ + "Specification-Title: Test Plugin #2\n"
+ + "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n"
+ + "Plugin-Version: 0.0.1\n"
+ + "Plugin-Id: test-plugin-2\n"
+ + "Plugin-Provider: Decebal Suiu\n"
+ + "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n"
+ + "Created-By: Apache Maven 3.0.5\n"
+ + "Build-Jdk: 1.8.0_45\n"
+ + "Specification-Version: 0.10.0-SNAPSHOT\n"
+ + "\n"
+ + ""};
+
+ return Arrays.asList(lines);
+ }
+
+ private List<String> getPlugin4Manifest() {
+
+ String[] lines = new String[]{"Manifest-Version: 1.0\n"
+ + "Implementation-Title: Test Plugin #4\n"
+ + "Implementation-Version: 0.10.0-SNAPSHOT\n"
+ + "Archiver-Version: Plexus Archiver\n"
+ + "Built-By: Mario Franco\n"
+ + "Specification-Title: Test Plugin #4\n"
+ + "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n"
+ + "Plugin-Version: 0.0.1\n"
+ + "Plugin-Id: test-plugin-2\n"
+ + "Plugin-Provider: Decebal Suiu\n"
+ + "Created-By: Apache Maven 3.0.5\n"
+ + "Build-Jdk: 1.8.0_45\n"
+ + "Specification-Version: 0.10.0-SNAPSHOT\n"
+ + "\n"
+ + ""};
+
+ return Arrays.asList(lines);
}
+ private List<String> getPlugin5Manifest() {
+
+ String[] lines = new String[]{"Manifest-Version: 1.0\n"
+ + "Implementation-Title: Test Plugin #5\n"
+ + "Implementation-Version: 0.10.0-SNAPSHOT\n"
+ + "Archiver-Version: Plexus Archiver\n"
+ + "Built-By: Mario Franco\n"
+ + "Specification-Title: Test Plugin #5\n"
+ + "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n"
+ + "Plugin-Id: test-plugin-2\n"
+ + "Plugin-Provider: Decebal Suiu\n"
+ + "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n"
+ + "Created-By: Apache Maven 3.0.5\n"
+ + "Build-Jdk: 1.8.0_45\n"
+ + "Specification-Version: 0.10.0-SNAPSHOT\n"
+ + "\n"
+ + ""};
+
+ return Arrays.asList(lines);
+ }
+
+ private List<String> getPlugin6Manifest() {
+
+ String[] lines = new String[]{"Manifest-Version: 1.0\n"
+ + "Implementation-Title: Test Plugin #6\n"
+ + "Implementation-Version: 0.10.0-SNAPSHOT\n"
+ + "Archiver-Version: Plexus Archiver\n"
+ + "Built-By: Mario Franco\n"
+ + "Specification-Title: Test Plugin #6\n"
+ + "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n"
+ + "Plugin-Provider: Decebal Suiu\n"
+ + "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n"
+ + "Created-By: Apache Maven 3.0.5\n"
+ + "Build-Jdk: 1.8.0_45\n"
+ + "Specification-Version: 0.10.0-SNAPSHOT\n"
+ + "\n"
+ + ""};
+
+ return Arrays.asList(lines);
+ }
}