/maven-amps-plugin/src/test/java/com/atlassian/maven/plugins/amps/osgi/TestPackageImportRangeValidator.java

https://bitbucket.org/mmeinhold/amps · Java · 259 lines · 233 code · 22 blank · 4 comment · 7 complexity · e3fe456e1569e4fe73d511c9caaf5986 MD5 · raw file

  1. package com.atlassian.maven.plugins.amps.osgi;
  2. import junit.framework.TestCase;
  3. import org.apache.maven.plugin.MojoFailureException;
  4. import org.apache.maven.plugin.logging.Log;
  5. import org.apache.maven.project.MavenProject;
  6. import static org.mockito.Matchers.anyObject;
  7. import static org.mockito.Matchers.anyString;
  8. import static org.mockito.Mockito.mock;
  9. import static org.mockito.Mockito.never;
  10. import static org.mockito.Mockito.verify;
  11. import java.util.Iterator;
  12. import java.util.Map;
  13. import java.util.HashMap;
  14. /**
  15. *
  16. */
  17. public class TestPackageImportRangeValidator extends TestCase
  18. {
  19. private MavenProject project;
  20. private Log log;
  21. private PackageImportVersionValidator validator;
  22. @Override
  23. protected void setUp() throws Exception
  24. {
  25. super.setUp();
  26. project = mock(MavenProject.class);
  27. log = mock(Log.class);
  28. validator = new PackageImportVersionValidator(project, log, "foo");
  29. }
  30. public void testValidateWithProperVersion() throws MojoFailureException
  31. {
  32. validator.validate("foo.bar;version=\"[1.0,2.0)\"");
  33. verify(log, never()).warn(anyString());
  34. }
  35. public void testValidateNull()
  36. {
  37. validator.validate(null);
  38. verify(log, never()).warn(anyString());
  39. }
  40. public void testValidateEmpty()
  41. {
  42. validator.validate("");
  43. verify(log, never()).warn(anyString());
  44. }
  45. public void testValidateJustMinimum()
  46. {
  47. validator.validate("foo.bar;version=\"1.0\"");
  48. verify(log, never()).warn(anyString());
  49. }
  50. public void testValidateNoVersion()
  51. {
  52. validator.validate("foo.bar");
  53. verify(log).warn(anyString());
  54. }
  55. public void testValidateEmptyVersion()
  56. {
  57. validator.validate("foo.bar;version=\"\"");
  58. verify(log).warn(anyString());
  59. }
  60. public void testValidateNoVersionOneAttribute()
  61. {
  62. validator.validate("foo.bar;bar=foo");
  63. verify(log).warn(anyString());
  64. }
  65. public void testCompressImports()
  66. {
  67. Map<String, String> imports = PackageImportVersionValidator.compressPackages(new HashMap<String, String>()
  68. {{
  69. put("foo.bar.baz.jim", "1.0");
  70. put("foo", "1.0");
  71. put("foo.bar.baz.sara", "1.0");
  72. put("jim", "2.0");
  73. }});
  74. assertEquals(new HashMap<String, String>()
  75. {{
  76. put("foo.bar.baz.*", "1.0");
  77. put("foo", "1.0");
  78. put("jim", "2.0");
  79. }}, imports);
  80. }
  81. public void testCompressImportsNotTooShort()
  82. {
  83. Map<String, String> imports = PackageImportVersionValidator.compressPackages(new HashMap<String, String>()
  84. {{
  85. put("foo.bar", "1.0");
  86. put("faz.bar", "1.0");
  87. put("jim", "2.0");
  88. }});
  89. assertEquals(new HashMap<String, String>()
  90. {{
  91. put("foo.bar", "1.0");
  92. put("faz.bar", "1.0");
  93. put("jim", "2.0");
  94. }}, imports);
  95. }
  96. public void testCompressImportsNotTooShort2()
  97. {
  98. Map<String, String> imports = PackageImportVersionValidator.compressPackages(new HashMap<String, String>()
  99. {{
  100. put("foo.bar", "1.0");
  101. put("fos.bar", "1.0");
  102. put("jim", "2.0");
  103. }});
  104. assertEquals(new HashMap<String, String>()
  105. {{
  106. put("foo.bar", "1.0");
  107. put("fos.bar", "1.0");
  108. put("jim", "2.0");
  109. }}, imports);
  110. }
  111. public void testCompressImportsNotIncludeOutcast()
  112. {
  113. Map<String, String> imports = PackageImportVersionValidator.compressPackages(new HashMap<String, String>()
  114. {{
  115. put("foo.bar.sara.jim", "1.0");
  116. put("foo", "1.0");
  117. put("foo.bar.sara.jim.baz", "1.0");
  118. put("foo.jim", "2.0");
  119. }});
  120. assertEquals(new HashMap<String, String>()
  121. {{
  122. put("foo", "1.0");
  123. put("foo.bar.sara.jim*", "1.0");
  124. put("foo.jim", "2.0");
  125. }}, imports);
  126. }
  127. public void testCompressImportsNotAlwaysFullPackage()
  128. {
  129. Map<String, String> imports = PackageImportVersionValidator.compressPackages(new HashMap<String, String>()
  130. {{
  131. put("foo.bar", "1.0");
  132. put("foo.bar.baz", "1.0");
  133. put("foo.bara", "2.0");
  134. }});
  135. assertEquals(new HashMap<String, String>()
  136. {{
  137. put("foo.bar", "1.0");
  138. put("foo.bar.baz", "1.0");
  139. put("foo.bara", "2.0");
  140. }}, imports);
  141. }
  142. public void testCompressImportsRealWorld()
  143. {
  144. // note in this example, most of the packages were not on the classpath, and therefore,
  145. Map<String, String> imports = PackageImportVersionValidator.compressPackages(new HashMap<String, String>()
  146. {{
  147. put("com.atlassian.sal.api", "2.0");
  148. put("com.mchange.v2.c3p0", "0.0.0");
  149. put("javax.naming", "0.0.0");
  150. put("javax.naming.spi", "0.0.0");
  151. put("javax.net", "0.0.0");
  152. put("javax.net.ssl", "0.0.0");
  153. put("javax.security.cert", "0.0.0");
  154. put("javax.servlet", "0.0.0");
  155. put("javax.servlet.http", "0.0.0");
  156. put("javax.sql", "0.0.0");
  157. put("javax.swing", "0.0.0");
  158. put("javax.swing.border", "0.0.0");
  159. put("javax.swing.event", "0.0.0");
  160. put("javax.swing.table", "0.0.0");
  161. put("javax.swing.tree", "0.0.0");
  162. put("org.apache.commons.dbcp", "0.0.0");
  163. put("org.apache.lucene.analysis", "0.0.0");
  164. put("org.apache.lucene.document", "0.0.0");
  165. put("org.apache.lucene.index", "0.0.0");
  166. put("org.apache.lucene.queryParser", "0.0.0");
  167. put("org.apache.lucene.search", "0.0.0");
  168. put("org.apache.lucene.search.similar", "0.0.0");
  169. put("org.apache.lucene.store", "0.0.0");
  170. put("org.apache.tools.ant", "0.0.0");
  171. put("org.apache.tools.ant.types", "0.0.0");
  172. put("org.logicalcobwebs.proxool", "0.0.0");
  173. put("org.osgi.framework", "1.5");
  174. put("org.osgi.util.tracker", "1.4");
  175. put("org.slf4j", "1.5");
  176. put("snaq.db", "0.0.0");
  177. put("sun.security.action", "0.0.0");
  178. put("org.apache.lucene.queryParser", "0.0.0");
  179. put("org.apache.tools.ant.types", "0.0.0");
  180. put("org.apache.lucene.document", "0.0.0");
  181. }});
  182. assertMapEquals(new HashMap<String, String>()
  183. {{
  184. put("com.atlassian.sal.api", "2.0");
  185. put("com.mchange.v2.c3p0", "0.0.0");
  186. put("javax.naming", "0.0.0");
  187. put("javax.naming.spi", "0.0.0");
  188. put("javax.net", "0.0.0");
  189. put("javax.net.ssl", "0.0.0");
  190. put("javax.security.cert", "0.0.0");
  191. put("javax.servlet", "0.0.0");
  192. put("javax.servlet.http", "0.0.0");
  193. put("javax.sql", "0.0.0");
  194. put("javax.swing", "0.0.0");
  195. put("javax.swing.border", "0.0.0");
  196. put("javax.swing.event", "0.0.0");
  197. put("javax.swing.table", "0.0.0");
  198. put("javax.swing.tree", "0.0.0");
  199. put("org.apache.commons.dbcp", "0.0.0");
  200. put("org.apache.lucene.*", "0.0.0");
  201. put("org.apache.tools.ant*", "0.0.0");
  202. put("org.logicalcobwebs.proxool", "0.0.0");
  203. put("org.osgi.framework", "1.5");
  204. put("org.osgi.util.tracker", "1.4");
  205. put("org.slf4j", "1.5");
  206. put("snaq.db", "0.0.0");
  207. put("sun.security.action", "0.0.0");
  208. }}, imports);
  209. }
  210. private void assertMapEquals(HashMap<String, String> expected, Map<String, String> actual)
  211. {
  212. for (Iterator<Map.Entry<String,String>> i = expected.entrySet().iterator(); i.hasNext(); )
  213. {
  214. Map.Entry<String,String> entry = i.next();
  215. if (actual.containsKey(entry.getKey()) && actual.get(entry.getKey()).equals(entry.getValue()))
  216. {
  217. i.remove();
  218. actual.remove(entry.getKey());
  219. }
  220. }
  221. if (!expected.isEmpty() || !actual.isEmpty())
  222. {
  223. StringBuilder sb = new StringBuilder();
  224. sb.append("Missing expected entries:\n");
  225. for (Map.Entry<String,String> entry : expected.entrySet())
  226. {
  227. sb.append(entry.getKey()).append("=").append(entry.getValue()).append(",");
  228. }
  229. sb.append("\nUnique actual entries:\n");
  230. for (Map.Entry<String,String> entry : actual.entrySet())
  231. {
  232. sb.append(entry.getKey()).append("=").append(entry.getValue()).append(",");
  233. }
  234. fail(sb.toString());
  235. }
  236. }
  237. }