View Javadoc

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          // foo should be after bar
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          // v1.2.1 should be after v1.2.m2
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          // v3.4.1 should be after v3.1.4
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          // Plugins are "equal" in order
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          // p2 has default version (== "0.0")
77          assertEquals("0.0", p2.getPluginInformation().getVersion());
78          // p1 has null PluginInformation, but the compareTo() will "clean up" this to use version "0", considered equal to "0.0"
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          // The valid version should be after the invalid version
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         // The plugins should sort equally
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         // null should be before "foo"
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 }