1 package com.atlassian.plugin.util.resource;
2
3 import junit.framework.TestCase;
4
5 import java.net.MalformedURLException;
6 import java.io.File;
7 import java.io.IOException;
8 import java.io.InputStream;
9
10 import org.apache.commons.io.IOUtils;
11 import org.apache.commons.io.FileUtils;
12 import com.atlassian.plugin.util.resource.AlternativeDirectoryResourceLoader;
13 import com.atlassian.plugin.util.resource.AlternativeResourceLoader;
14
15 public class TestAlternativeDirectoryResourceLoader extends TestCase
16 {
17 File base;
18 File kid;
19
20 @Override
21 public void setUp() throws IOException
22 {
23 base = new File("target");
24 if (!base.exists())
25 {
26 base = File.createTempFile("tests", ".tmp");
27 base.delete();
28 base.mkdir();
29 }
30 File classes = new File(base, "classes");
31 if (!classes.exists())
32 {
33 classes.mkdir();
34 new File(classes, "com").mkdir();
35 }
36 kid = new File(base, "kid.txt");
37 kid.createNewFile();
38 }
39
40 @Override
41 protected void tearDown() throws Exception
42 {
43 if (!"target".equals(base.getName()))
44 {
45 FileUtils.deleteDirectory(base);
46 }
47 kid.delete();
48 }
49
50 public void testGetResource() throws MalformedURLException
51 {
52 try
53 {
54 System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES, base.getAbsolutePath());
55 AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
56 assertEquals(new File(base, "classes").toURL(), loader.getResource("classes"));
57 assertNull(loader.getResource("asdfasdfasf"));
58 }
59 finally
60 {
61 System.getProperties().remove(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES);
62 }
63 }
64
65 public void testGetResourceWithTwoDefined() throws MalformedURLException
66 {
67 try
68 {
69 File classesDir = new File(base, "classes");
70 System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES,
71 base.getAbsolutePath()+","+classesDir.getAbsolutePath());
72 AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
73 assertEquals(new File(base, "classes").toURL(), loader.getResource("classes"));
74 assertEquals(new File(classesDir, "com").toURL(), loader.getResource("com"));
75 assertNull(loader.getResource("asdfasdfasf"));
76 }
77 finally
78 {
79 System.getProperties().remove(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES);
80 }
81 }
82
83 public void testGetResourceWithWhitespace() throws MalformedURLException
84 {
85 try
86 {
87 File classesDir = new File(base, "classes");
88 System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES,
89 "\n" +
90 " " + base.getAbsolutePath() + ",\n" +
91 " " + classesDir.getAbsolutePath() + "\n" +
92 " ");
93 AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
94 assertEquals(new File(base, "classes").toURL(), loader.getResource("classes"));
95 assertEquals(new File(classesDir, "com").toURL(), loader.getResource("com"));
96 assertNull(loader.getResource("asdfasdfasf"));
97 }
98 finally
99 {
100 System.getProperties().remove(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES);
101 }
102 }
103
104 public void testGetResourceNoProperty() throws MalformedURLException
105 {
106 AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
107 assertNull(loader.getResource("classes"));
108 assertNull(loader.getResource("asdfasdfasf"));
109 }
110
111 public void testGetResourceAsStream() throws MalformedURLException
112 {
113 InputStream in = null;
114 try
115 {
116 System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES, base.getAbsolutePath());
117 AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
118 in = loader.getResourceAsStream("kid.txt");
119 assertNotNull(in);
120 assertNull(loader.getResource("asdfasdfasf"));
121 }
122 finally
123 {
124 System.getProperties().remove(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES);
125 IOUtils.closeQuietly(in);
126 }
127 }
128 }