View Javadoc
1   package com.atlassian.plugin.elements;
2   
3   import com.atlassian.plugin.mock.MockBear;
4   import org.dom4j.Document;
5   import org.dom4j.DocumentException;
6   import org.dom4j.DocumentHelper;
7   import org.dom4j.Element;
8   import org.junit.Test;
9   
10  import static org.junit.Assert.assertEquals;
11  import static org.junit.Assert.assertFalse;
12  import static org.junit.Assert.assertNull;
13  import static org.junit.Assert.assertTrue;
14  
15  public class TestResourceDescriptor {
16  
17      @Test
18      public void testBasicResource() throws DocumentException {
19          Document document = DocumentHelper.parseText("<resource type=\"velocity\" name=\"view\" location=\"/foo/bar.vm\" />");
20          ResourceDescriptor descriptor = new ResourceDescriptor(document.getRootElement());
21  
22          assertEquals("velocity", descriptor.getType());
23          assertEquals("view", descriptor.getName());
24          assertEquals("/foo/bar.vm", descriptor.getLocation());
25          assertNull(descriptor.getContent());
26      }
27  
28      @Test
29      public void testResourceWithContent() throws DocumentException {
30          Document document = DocumentHelper.parseText("<resource type=\"velocity\" name=\"view\">the content</resource>");
31          ResourceDescriptor descriptor = new ResourceDescriptor(document.getRootElement());
32  
33          assertEquals("velocity", descriptor.getType());
34          assertEquals("view", descriptor.getName());
35          assertNull(descriptor.getLocation());
36          assertEquals("the content", descriptor.getContent());
37      }
38  
39      @Test
40      public void testResourceWithParameters() throws DocumentException {
41          Document document = DocumentHelper.parseText("<resource type=\"velocity\" name=\"view\" location=\"/foo/bar.vm\">" +
42                  "<param name=\"attribute\" value=\"20\"/>" +
43                  "<param name=\"content\">fish</param></resource>");
44          ResourceDescriptor descriptor = new ResourceDescriptor(document.getRootElement());
45  
46          assertEquals("velocity", descriptor.getType());
47          assertEquals("view", descriptor.getName());
48          assertEquals("/foo/bar.vm", descriptor.getLocation());
49          assertNull(descriptor.getContent());
50          assertEquals("20", descriptor.getParameter("attribute"));
51          assertEquals("fish", descriptor.getParameter("content"));
52      }
53  
54      @Test
55      public void testResourceWithParametersAndContent() throws DocumentException {
56          Document document = DocumentHelper.parseText("<resource type=\"velocity\" name=\"view\">" +
57                  "<param name=\"attribute\" value=\"20\"/>" +
58                  "<param name=\"content\">fish</param>" +
59                  "This is the content.</resource>");
60          ResourceDescriptor descriptor = new ResourceDescriptor(document.getRootElement());
61  
62          assertEquals("velocity", descriptor.getType());
63          assertEquals("view", descriptor.getName());
64          assertNull(descriptor.getLocation());
65          assertEquals("This is the content.", descriptor.getContent());
66          assertEquals("20", descriptor.getParameter("attribute"));
67          assertEquals("fish", descriptor.getParameter("content"));
68      }
69  
70      @Test
71      public void testEquality() throws DocumentException {
72          Document velViewDoc = DocumentHelper.parseText("<resource type=\"velocity\" name=\"view\">the content</resource>");
73          Document velViewDoc2 = DocumentHelper.parseText("<resource type=\"velocity\" name=\"view\" location=\"foo\" />");
74          Document velViewDoc3 = DocumentHelper.parseText("<resource type=\"velocity\" name=\"view\" location=\"foo\"><param name=\"narrator\">Tyler Durden</param></resource>");
75          Document velEditDoc = DocumentHelper.parseText("<resource type=\"velocity\" name=\"edit\">the content</resource>");
76          Document fooEditDoc = DocumentHelper.parseText("<resource type=\"foo\" name=\"edit\">the content</resource>");
77          ResourceDescriptor velViewResource = new ResourceDescriptor(velViewDoc.getRootElement());
78          ResourceDescriptor velViewResource2 = new ResourceDescriptor(velViewDoc2.getRootElement());
79          ResourceDescriptor velViewResource3 = new ResourceDescriptor(velViewDoc3.getRootElement());
80          ResourceDescriptor velEditResource = new ResourceDescriptor(velEditDoc.getRootElement());
81          ResourceDescriptor fooEditResource = new ResourceDescriptor(fooEditDoc.getRootElement());
82  
83          assertFalse(velEditResource.equals(new MockBear()));
84          assertEquals(velViewResource, velViewResource);
85          assertEquals(velViewResource, velViewResource2);
86          assertEquals(velViewResource, velViewResource3);
87          assertEquals(velViewResource2, velViewResource);
88          assertEquals(velViewResource3, velViewResource);
89          assertFalse(velViewResource.equals(velEditResource));
90          assertFalse(velEditResource.equals(velViewResource));
91          assertFalse(fooEditResource.equals(velEditResource));
92      }
93  
94      @Test(expected = RuntimeException.class)
95      public void testMultiResourceDescriptor() throws DocumentException {
96          Document multiResources = DocumentHelper.parseText("<resource type=\"foo\" namePattern=\".*\\.jpg\" location=\"xxx/\"/>");
97          ResourceDescriptor rd = new ResourceDescriptor(multiResources.getRootElement());
98          final ResourceLocation location = rd.getResourceLocationForName("fred.jpg");
99          assertEquals("foo", location.getType());
100         assertEquals("fred.jpg", location.getName());
101         assertEquals("xxx/", location.getLocation());
102         rd.getResourceLocationForName("fred.gif");
103     }
104 
105     @Test
106     public void testGetResourceLocationForNameForSingleResource() throws DocumentException {
107         Document xml = DocumentHelper.parseText("<resource type=\"foo\" name=\"bob.jpg\" location=\"path/to/builders/\"/>");
108         ResourceDescriptor rd = new ResourceDescriptor(xml.getRootElement());
109         final ResourceLocation location = rd.getResourceLocationForName("builders/bob.jpg");
110         assertEquals(rd.getLocation(), location.getLocation());
111         assertEquals(rd.getType(), location.getType());
112         assertEquals(rd.getName(), location.getName());
113     }
114 
115     @Test
116     public void testEquals() {
117         Element desc = DocumentHelper.createElement("foo");
118         desc.addAttribute("name", "foo");
119         assertFalse(new ResourceDescriptor(desc).equals(null));
120     }
121 
122     @Test
123     public void testEqualsWithNullNameAndType() {
124         Element e = DocumentHelper.createElement("foo");
125         e.addAttribute("namePattern", "foo");
126         e.addAttribute("location", "/foo/");
127         ResourceDescriptor desc = new ResourceDescriptor(e);
128 
129         ResourceDescriptor desc2 = new ResourceDescriptor(e);
130         assertTrue(desc.equals(desc2));
131     }
132 
133     @Test
134     public void testEqualsWithNullType() {
135         Element e = DocumentHelper.createElement("foo");
136         e.addAttribute("name", "foo");
137         e.addAttribute("location", "/foo/");
138         ResourceDescriptor desc = new ResourceDescriptor(e);
139 
140         e.addAttribute("type", "foo");
141         ResourceDescriptor desc2 = new ResourceDescriptor(e);
142         assertFalse(desc.equals(desc2));
143 
144         desc = new ResourceDescriptor(e);
145 
146         e.addAttribute("type", null);
147         desc2 = new ResourceDescriptor(e);
148         assertFalse(desc.equals(desc2));
149     }
150 
151     @Test
152     public void testHashcode() {
153         Element desc = DocumentHelper.createElement("foo");
154         desc.addAttribute("name", "foo");
155         desc.addAttribute("type", "bar");
156         desc.addAttribute("type", null);
157         desc.addAttribute("name", null);
158         desc.addAttribute("namePattern", "foo");
159         desc.addAttribute("location", "bar");
160     }
161 }