package org.infernus.idea.checkstyle.service; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Properties; import org.infernus.idea.checkstyle.VersionComparator; import org.infernus.idea.checkstyle.exception.CheckStylePluginException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.junit.Assert; /** * Utility class for unit tests in 'csaccessTest' to query the currently used Checkstyle runtime. */ public class CsVersionInfo { private static final String PROPS_FILE_NAME = "/checkstyle-idea.properties"; public static final String CSVERSION_SYSPROP_NAME = "org.infernus.idea.checkstyle.version"; private static final String BASE_VERSION = readBaseVersion(); @NotNull private static String readBaseVersion() { String result = null; try (InputStream is = CsVersionInfo.class.getResourceAsStream(PROPS_FILE_NAME)) { Properties props = new Properties(); props.load(is); result = props.getProperty("baseVersion"); } catch (IOException e) { throw new CheckStylePluginException("internal error - Failed to read property file: " + PROPS_FILE_NAME, e); } Assert.assertNotNull(result); return result; } public static boolean isExactly(@NotNull final String pExpectedCsVersion) { return pExpectedCsVersion.equals(getCurrentCsVersion()); } public static boolean isOneOf(@NotNull final String pExpectedCsVersion, @Nullable final String... pOtherPossibleVersions) { final String actualCsVersion = getCurrentCsVersion(); final List<String> expectedVersions = new ArrayList<>(); expectedVersions.add(pExpectedCsVersion); if (pOtherPossibleVersions != null) { expectedVersions.addAll(Arrays.asList(pOtherPossibleVersions)); } return expectedVersions.contains(actualCsVersion); } public static boolean isLessThan(@NotNull final String pCsVersion) { final String actualCsVersion = getCurrentCsVersion(); return new VersionComparator().compare(actualCsVersion, pCsVersion) < 0; } public static boolean isGreaterThan(@NotNull final String pCsVersion) { final String actualCsVersion = getCurrentCsVersion(); return new VersionComparator().compare(actualCsVersion, pCsVersion) > 0; } @NotNull public static String getCurrentCsVersion() { final String sysPropValue = System.getProperty(CSVERSION_SYSPROP_NAME); if (sysPropValue == null) { return BASE_VERSION; } else { Assert.assertTrue("System property \"" + CSVERSION_SYSPROP_NAME // + "\" does not contain a valid Checkstyle version: " + sysPropValue, // VersionComparator.isValidVersion(System.getProperty(CSVERSION_SYSPROP_NAME))); return sysPropValue; } } }