package org.pitest.junit; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class JUnitVersion implements Comparable<JUnitVersion> { private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d+)\\.(\\d+).*"); public static JUnitVersion parse(final String version) { final Matcher matcher = VERSION_PATTERN.matcher(version); if (!matcher.matches()) { throw new IllegalArgumentException("Invalid version string! Could not parse " + version); } final int major = Integer.parseInt(matcher.group(1)); final int minor = Integer.parseInt(matcher.group(2)); return new JUnitVersion(major, minor); } private final int major; private final int minor; private JUnitVersion(final int major, final int minor) { this.major = major; this.minor = minor; } @Override public int compareTo(final JUnitVersion that) { if (that == null) { return 1; } if (major != that.major) { return major - that.major; } if (minor != that.minor) { return minor - that.minor; } return 0; } public boolean is(final JUnitVersion version) { return equals(version); } public boolean isGreaterThan(final JUnitVersion version) { return compareTo(version) > 0; } public boolean isGreaterThanOrEqualTo(final JUnitVersion version) { return compareTo(version) >= 0; } public boolean isLessThan(final JUnitVersion version) { return compareTo(version) < 0; } public boolean isLessThanOrEqualTo(final JUnitVersion version) { return compareTo(version) <= 0; } @Override public int hashCode() { int result = major; result = 31 * result + minor; return result; } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (!(o instanceof JUnitVersion)) { return false; } final JUnitVersion that = (JUnitVersion) o; return major == that.major && minor == that.minor; } @Override public String toString() { return major + "." + minor; } }