View Javadoc

1   package com.atlassian.plugin.util.resource;
2   
3   import java.io.File;
4   import java.io.InputStream;
5   
6   import com.atlassian.plugin.test.CapturedLogging;
7   
8   import org.apache.commons.io.IOUtils;
9   import org.junit.Before;
10  import org.junit.Rule;
11  import org.junit.Test;
12  import org.junit.contrib.java.lang.system.RestoreSystemProperties;
13  import org.junit.rules.TemporaryFolder;
14  
15  import static com.atlassian.plugin.test.CapturedLogging.didLogDebug;
16  import static com.atlassian.plugin.test.CapturedLogging.didLogWarn;
17  import static org.hamcrest.MatcherAssert.assertThat;
18  import static org.hamcrest.Matchers.contains;
19  import static org.hamcrest.Matchers.equalTo;
20  import static org.hamcrest.Matchers.not;
21  import static org.hamcrest.Matchers.notNullValue;
22  import static org.hamcrest.Matchers.nullValue;
23  
24  public class TestAlternativeDirectoryResourceLoader
25  {
26      @Rule
27      public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties(
28              AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES);
29  
30      @Rule
31      public TemporaryFolder temporaryFolder = new TemporaryFolder(new File("target"));
32  
33      @Rule
34      public CapturedLogging capturedLogging = new CapturedLogging(AlternativeDirectoryResourceLoader.class);
35  
36      private File base;
37      private File classes;
38      private File com;
39  
40      @Before
41      public void setUp() throws Exception
42      {
43          base = temporaryFolder.getRoot();
44          com = temporaryFolder.newFolder("classes", "com");
45          classes = com.getParentFile();
46          temporaryFolder.newFile("kid.txt");
47      }
48  
49      @Test
50      public void testGetResource() throws Exception
51      {
52          System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES, base.getAbsolutePath());
53          final AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
54          assertThat(loader.getResource("classes"), equalTo(classes.toURL()));
55          assertThat(loader.getResource("com"), nullValue());
56          assertThat(loader.getResource("asdfasdfasf"), nullValue());
57      }
58  
59      @Test
60      public void testGetResourceWithTwoDefined() throws Exception
61      {
62          System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES,
63                  base.getAbsolutePath()+","+ classes.getAbsolutePath());
64          final AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
65          assertThat(loader.getResource("classes"), equalTo(classes.toURL()));
66          assertThat(loader.getResource("com"), equalTo(com.toURL()));
67          assertThat(loader.getResource("asdfasdfasf"), nullValue());
68      }
69  
70      @Test
71      public void testGetResourceWithWhitespace() throws Exception
72      {
73          System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES,
74                  "\n" +
75                          "         " + base.getAbsolutePath() + ",\n" +
76                          "         " + classes.getAbsolutePath() + "\n" +
77                          "         ");
78          final AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
79          assertThat(loader.getResource("classes"), equalTo(classes.toURL()));
80          assertThat(loader.getResource("com"), equalTo(com.toURL()));
81          assertThat(loader.getResource("asdfasdfasf"), nullValue());
82      }
83  
84      @Test
85      public void testGetResourceNoProperty() throws Exception
86      {
87          final AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
88          assertThat(loader.getResource("classes"), nullValue());
89          assertThat(loader.getResource("asdfasdfasf"), nullValue());
90      }
91  
92      @Test
93      public void testGetResourceAsStream() throws Exception
94      {
95          System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES, base.getAbsolutePath());
96          final AlternativeResourceLoader loader = new AlternativeDirectoryResourceLoader();
97          InputStream kidInputStream = null;
98          InputStream junkInputStream = null;
99          try
100         {
101             kidInputStream  = loader.getResourceAsStream("kid.txt");
102             junkInputStream = loader.getResourceAsStream("asdfasdfasf");
103             assertThat(kidInputStream, notNullValue());
104             assertThat(junkInputStream, nullValue());
105         }
106         finally
107         {
108             IOUtils.closeQuietly(kidInputStream);
109             IOUtils.closeQuietly(junkInputStream);
110         }
111     }
112 
113     @Test
114     public void constructionLogsFoundAsDebugAndNotFoundAsWarning()
115     {
116         final File classes = new File(base, "classes");
117         final File nonexistent = new File(base, "non-existent");
118         System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES, nonexistent + "," + classes);
119         final AlternativeDirectoryResourceLoader loader = new AlternativeDirectoryResourceLoader();
120         assertThat(loader.getResourceDirectories(), contains(classes));
121         assertThat(capturedLogging, didLogDebug(classes.getPath(), "Found"));
122         assertThat(capturedLogging, didLogWarn(nonexistent.getPath(), nonexistent.getAbsolutePath(), "does not exist"));
123     }
124 
125     @Test
126     public void emptyNamePluginResourceDirectoriesDoNotLogWarnings()
127     {
128         final File classes = new File(base, "classes");
129         System.setProperty(AlternativeDirectoryResourceLoader.PLUGIN_RESOURCE_DIRECTORIES, "," + classes);
130         final AlternativeDirectoryResourceLoader loader = new AlternativeDirectoryResourceLoader();
131         assertThat(loader.getResourceDirectories(), contains(classes));
132         // We should get no warnings at all
133         assertThat(capturedLogging, not(didLogWarn()));
134     }
135 }