View Javadoc
1   package com.atlassian.plugin.spring.scanner.runtime.impl.util;
2   
3   import org.junit.Assume;
4   import org.junit.Test;
5   import org.junit.runner.RunWith;
6   import org.mockito.runners.MockitoJUnitRunner;
7   
8   import java.util.regex.Matcher;
9   import java.util.regex.Pattern;
10  
11  import static org.junit.Assert.fail;
12  
13  /**
14   * Just a smoke test to catch if the classnames we use to determine which product we're in ever change
15   */
16  @RunWith(MockitoJUnitRunner.class)
17  public class ProductFilterUtilTest {
18      @Test
19      public void testBambooClassIsPresent() {
20          assertClassIsPresentOnClasspath(ProductFilterUtil.CLASS_ON_BAMBOO_CLASSPATH, "Bamboo");
21      }
22  
23      @Test
24      public void testBitbucketClassIsPresent() {
25          Assume.assumeTrue(isAtLeastJavaVersion(8));
26          assertClassIsPresentOnClasspath(ProductFilterUtil.CLASS_ON_BITBUCKET_CLASSPATH, "Bitbucket");
27      }
28  
29      @Test
30      public void testConfluenceClassIsPresent() {
31          assertClassIsPresentOnClasspath(ProductFilterUtil.CLASS_ON_CONFLUENCE_CLASSPATH, "Confluence");
32      }
33  
34      @Test
35      public void testFecruClassIsPresent() {
36          assertClassIsPresentOnClasspath(ProductFilterUtil.CLASS_ON_FECRU_CLASSPATH, "Fecru");
37      }
38  
39      @Test
40      public void testJiraClassIsPresent() {
41          assertClassIsPresentOnClasspath(ProductFilterUtil.CLASS_ON_JIRA_CLASSPATH, "JIRA");
42      }
43  
44      @Test
45      public void testStashClassIsPresent() {
46          Assume.assumeTrue(isAtLeastJavaVersion(7));
47          assertClassIsPresentOnClasspath(ProductFilterUtil.CLASS_ON_STASH_CLASSPATH, "Stash");
48      }
49  
50      @Test
51      public void testRefappClassIsPresent() {
52          assertClassIsPresentOnClasspath(ProductFilterUtil.CLASS_ON_REFAPP_CLASSPATH, "Refapp");
53      }
54  
55      private void assertClassIsPresentOnClasspath(String clazz, String product) {
56          try {
57              Class.forName(clazz);
58          } catch (ClassNotFoundException e) {
59              fail(String.format(
60                      "Class %s not found on classpath, is it no longer exported from %s? If so, %s will need to be " +
61                              "updated to use an exported class from %s.",
62                      clazz, product, ProductFilterUtil.class.getName(), product));
63          }
64      }
65  
66      private boolean isAtLeastJavaVersion(int majorVersion) {
67          Pattern pattern = Pattern.compile("(\\d+)\\.(\\d+)");
68          Matcher matcher = pattern.matcher(System.getProperty("java.version"));
69          if (matcher.find()) {
70              int version = Integer.parseInt(matcher.group(2));
71              return version >= majorVersion;
72          }
73          return false;
74      }
75  }