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