1 package com.atlassian.plugin;
2
3 import com.atlassian.plugin.test.PluginJarBuilder;
4 import org.apache.commons.io.FileUtils;
5
6 import org.junit.Before;
7 import org.junit.Rule;
8 import org.junit.Test;
9 import org.junit.rules.TemporaryFolder;
10
11 import java.io.File;
12 import java.io.IOException;
13
14 import static com.atlassian.plugin.ReferenceMode.FORBID_REFERENCE;
15 import static com.atlassian.plugin.ReferenceMode.PERMIT_REFERENCE;
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.hamcrest.Matchers.is;
18 import static org.junit.Assert.assertFalse;
19 import static org.junit.Assert.assertNotNull;
20 import static org.junit.Assert.assertTrue;
21 import static org.junit.Assert.fail;
22
23 public class TestDefaultPluginArtifactFactory {
24 @Rule
25 public final TemporaryFolder temporaryFolder = new TemporaryFolder();
26
27 private File testDir;
28 private File spaceTestDir;
29 private File file;
30
31 @Before
32 public void setUp() throws IOException {
33 testDir = temporaryFolder.newFolder("test");
34 spaceTestDir = temporaryFolder.newFolder("space test");
35 file = new File(testDir, "some.jar");
36 }
37
38 @Test
39 public void testCreate() throws IOException {
40 doCreationTestInDirectory(testDir);
41 }
42
43 @Test
44 public void testCreateWithSpaceInArtifactPath() throws IOException {
45 doCreationTestInDirectory(spaceTestDir);
46 }
47
48 @Test
49 public void testReferenceModeForbidReferenceDoesNotAllowReference() {
50 final DefaultPluginArtifactFactory defaultPluginArtifactFactory = new DefaultPluginArtifactFactory(FORBID_REFERENCE);
51 final PluginArtifact pluginArtifact = defaultPluginArtifactFactory.create(file.toURI());
52 assertFalse(pluginArtifact.getReferenceMode().allowsReference());
53 assertThat(pluginArtifact.getReferenceMode(), is(FORBID_REFERENCE));
54 }
55
56 @Test
57 public void testReferenceModePermitReferenceAllowsReference() {
58 final DefaultPluginArtifactFactory defaultPluginArtifactFactory = new DefaultPluginArtifactFactory(PERMIT_REFERENCE);
59 final PluginArtifact pluginArtifact = defaultPluginArtifactFactory.create(file.toURI());
60 assertTrue(pluginArtifact.getReferenceMode().allowsReference());
61 assertThat(pluginArtifact.getReferenceMode(), is(PERMIT_REFERENCE));
62 }
63
64 @Test
65 public void testDefaultDoesNotAllowsReference() {
66 final DefaultPluginArtifactFactory defaultPluginArtifactFactory = new DefaultPluginArtifactFactory();
67 final PluginArtifact pluginArtifact = defaultPluginArtifactFactory.create(file.toURI());
68 assertFalse(pluginArtifact.getReferenceMode().allowsReference());
69 assertThat(pluginArtifact.getReferenceMode(), is(FORBID_REFERENCE));
70 }
71
72 @Test
73 public void testLegacyReferenceModeForbidReferenceDoesNotAllowReference() {
74 final DefaultPluginArtifactFactory defaultPluginArtifactFactory = new DefaultPluginArtifactFactory(
75 ReferenceMode.FORBID_REFERENCE);
76 final PluginArtifact pluginArtifact = defaultPluginArtifactFactory.create(file.toURI());
77 assertFalse(pluginArtifact.getReferenceMode().allowsReference());
78 }
79
80 @Test
81 public void testLegacyReferenceModePermitReferenceAllowsReference() {
82 final DefaultPluginArtifactFactory defaultPluginArtifactFactory = new DefaultPluginArtifactFactory(
83 ReferenceMode.PERMIT_REFERENCE);
84 final PluginArtifact pluginArtifact = defaultPluginArtifactFactory.create(file.toURI());
85 assertTrue(pluginArtifact.getReferenceMode().allowsReference());
86 }
87
88 private void doCreationTestInDirectory(File directory) throws IOException {
89 File xmlFile = new File(directory, "foo.xml");
90 FileUtils.writeStringToFile(xmlFile, "<xml/>");
91 File jarFile = new PluginJarBuilder("jar").build(directory);
92
93 DefaultPluginArtifactFactory factory = new DefaultPluginArtifactFactory();
94
95 PluginArtifact jarArt = factory.create(jarFile.toURI());
96 assertNotNull(jarArt);
97 assertTrue(jarArt instanceof JarPluginArtifact);
98
99 PluginArtifact xmlArt = factory.create(xmlFile.toURI());
100 assertNotNull(xmlArt);
101 assertTrue(xmlArt instanceof XmlPluginArtifact);
102
103 try {
104 factory.create(new File(testDir, "bob.jim").toURI());
105 fail("Should have thrown exception");
106 } catch (IllegalArgumentException ex) {
107
108 }
109 }
110 }