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