View Javadoc

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