1 package com.atlassian.plugin.impl;
2
3 import com.atlassian.plugin.util.VersionStringComparator;
4
5 import org.apache.commons.lang.StringUtils;
6
7 import java.io.InputStream;
8 import java.net.URL;
9
10 import junit.framework.TestCase;
11
12 public class TestAbstractPlugin extends TestCase
13 {
14 public void testCompareTo()
15 {
16 final AbstractPlugin p1 = createAbstractPlugin();
17 p1.setKey("foo");
18 final AbstractPlugin p2 = createAbstractPlugin();
19 p2.setKey("bar");
20
21
22 assertTrue(p1.compareTo(p2) > 0);
23 assertTrue(p2.compareTo(p1) < 0);
24 }
25
26 public void testCompareToOnVersionWithMilestone()
27 {
28 final AbstractPlugin p1 = createAbstractPlugin();
29 p1.setKey("foo");
30 p1.getPluginInformation().setVersion("1.2.m2");
31 final AbstractPlugin p2 = createAbstractPlugin();
32 p2.setKey("foo");
33 p2.getPluginInformation().setVersion("1.2.1");
34
35
36 assertTrue(p1.compareTo(p2) < 0);
37 assertTrue(p2.compareTo(p1) > 0);
38 }
39
40 public void testCompareToOnVersion()
41 {
42 final AbstractPlugin p1 = createAbstractPlugin();
43 p1.setKey("foo");
44 p1.getPluginInformation().setVersion("3.4.1");
45 final AbstractPlugin p2 = createAbstractPlugin();
46 p2.setKey("foo");
47 p2.getPluginInformation().setVersion("3.1.4");
48
49
50 assertTrue(p1.compareTo(p2) > 0);
51 assertTrue(p2.compareTo(p1) < 0);
52 }
53
54 public void testCompareToWhenEqual()
55 {
56 final AbstractPlugin p1 = createAbstractPlugin();
57 p1.setKey("foo");
58 p1.getPluginInformation().setVersion("3.1.4");
59 final AbstractPlugin p2 = createAbstractPlugin();
60 p2.setKey("foo");
61 p2.getPluginInformation().setVersion("3.1.4");
62
63
64 assertTrue(p1.compareTo(p2) == 0);
65 assertTrue(p2.compareTo(p1) == 0);
66 }
67
68 public void testCompareToWithNullPluginInformation()
69 {
70 final AbstractPlugin p1 = createAbstractPlugin();
71 p1.setKey("foo");
72 p1.setPluginInformation(null);
73 final AbstractPlugin p2 = createAbstractPlugin();
74 p2.setKey("foo");
75
76
77 assertEquals("0.0", p2.getPluginInformation().getVersion());
78
79 assertTrue(p1.compareTo(p2) == 0);
80 assertTrue(p2.compareTo(p1) == 0);
81 }
82
83 public void testCompareWithInvalidVersion() throws Exception
84 {
85 final AbstractPlugin p1 = createAbstractPlugin();
86 p1.setKey("foo");
87 final String invalidVersion = "@$%^#";
88 assertFalse(VersionStringComparator.isValidVersionString(invalidVersion));
89 p1.getPluginInformation().setVersion(invalidVersion);
90 final AbstractPlugin p2 = createAbstractPlugin();
91 p2.setKey("foo");
92 p2.getPluginInformation().setVersion("3.2");
93
94
95 assertEquals(-1, p1.compareTo(p2));
96 assertEquals(1, p2.compareTo(p1));
97 }
98
99 public void testCompareWithBothVersionsInvalid() throws Exception
100 {
101 final AbstractPlugin p1 = createAbstractPlugin();
102 p1.setKey("foo");
103 p1.getPluginInformation().setVersion("@$%^#");
104 assertFalse(VersionStringComparator.isValidVersionString(p1.getPluginInformation().getVersion()));
105
106 final AbstractPlugin p2 = createAbstractPlugin();
107 p2.setKey("foo");
108 p2.getPluginInformation().setVersion("!!");
109
110
111 assertEquals(0, p1.compareTo(p2));
112 assertEquals(0, p2.compareTo(p1));
113 }
114
115 public void testCompareToWithNullKey()
116 {
117 final AbstractPlugin p1 = createAbstractPlugin();
118 final AbstractPlugin p2 = createAbstractPlugin();
119 p2.setKey("foo");
120
121
122 assertNull(p1.getKey());
123 assertTrue(p1.compareTo(p2) < 0);
124 assertTrue(p2.compareTo(p1) > 0);
125 }
126
127 public void testCompareToWithBothNullKeys()
128 {
129 final AbstractPlugin p1 = createAbstractPlugin();
130 final AbstractPlugin p2 = createAbstractPlugin();
131
132 assertNull(p1.getKey());
133 assertTrue(p1.compareTo(p2) == 0);
134 assertTrue(p2.compareTo(p1) == 0);
135 }
136
137 public void testGetNameReturnsKeyIfBlank()
138 {
139 final AbstractPlugin p1 = createAbstractPlugin();
140 p1.setKey("foo");
141 assertEquals("foo", p1.getName());
142 }
143
144 public void testGetNameReturnsSetName()
145 {
146 final AbstractPlugin p1 = createAbstractPlugin();
147 p1.setKey("key");
148 p1.setI18nNameKey("i18n");
149 p1.setName("name");
150 assertEquals("name", p1.getName());
151 }
152
153 public void testGetNameReturnsBlankIfI18nNameKeySpecified()
154 {
155 final AbstractPlugin p1 = createAbstractPlugin();
156 p1.setKey("foo");
157 p1.setI18nNameKey("i18n");
158 assertTrue(StringUtils.isBlank(p1.getName()));
159 }
160
161 private AbstractPlugin createAbstractPlugin()
162 {
163 return new AbstractPlugin()
164 {
165
166 @Override
167 public boolean isBundledPlugin()
168 {
169 return false;
170 }
171
172 public boolean isUninstallable()
173 {
174 return false;
175 }
176
177 public boolean isDeleteable()
178 {
179 return false;
180 }
181
182 public boolean isDynamicallyLoaded()
183 {
184 return false;
185 }
186
187 public <T> Class<T> loadClass(final String clazz, final Class<?> callingClass) throws ClassNotFoundException
188 {
189 return null;
190 }
191
192 public ClassLoader getClassLoader()
193 {
194 return null;
195 }
196
197 public URL getResource(final String path)
198 {
199 return null;
200 }
201
202 public InputStream getResourceAsStream(final String name)
203 {
204 return null;
205 }
206 };
207 }
208 }