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
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 }