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 }