package org.jabref.logic.util; import java.util.Arrays; import java.util.List; import java.util.Optional; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class VersionTest { @Test public void unknownVersionAsString() { Version version = Version.parse(BuildInfo.UNKNOWN_VERSION); assertEquals(BuildInfo.UNKNOWN_VERSION, version.getFullVersion()); } @Test public void unknownVersionAsNull() { Version version = Version.parse(null); assertEquals(BuildInfo.UNKNOWN_VERSION, version.getFullVersion()); } @Test public void unknownVersionAsEmptyString() { Version version = Version.parse(""); assertEquals(BuildInfo.UNKNOWN_VERSION, version.getFullVersion()); } @Test public void initVersionFromWrongStringResultsInUnknownVersion() { Version version = Version.parse("${version}"); assertEquals(BuildInfo.UNKNOWN_VERSION, version.getFullVersion()); } @Test public void versionOneDigit() { String versionText = "1"; Version version = Version.parse(versionText); assertEquals(versionText, version.getFullVersion()); assertEquals(1, version.getMajor()); assertEquals(0, version.getMinor()); assertEquals(0, version.getPatch()); assertFalse(version.isDevelopmentVersion()); } @Test public void versionTwoDigits() { String versionText = "1.2"; Version version = Version.parse(versionText); assertEquals(versionText, version.getFullVersion()); assertEquals(1, version.getMajor()); assertEquals(2, version.getMinor()); assertEquals(0, version.getPatch()); assertFalse(version.isDevelopmentVersion()); } @Test public void versionThreeDigits() { String versionText = "1.2.3"; Version version = Version.parse(versionText); assertEquals(versionText, version.getFullVersion()); assertEquals(1, version.getMajor()); assertEquals(2, version.getMinor()); assertEquals(3, version.getPatch()); assertFalse(version.isDevelopmentVersion()); } @Test public void versionOneDigitDevVersion() { String versionText = "1dev"; Version version = Version.parse(versionText); assertEquals(versionText, version.getFullVersion()); assertEquals(1, version.getMajor()); assertEquals(0, version.getMinor()); assertEquals(0, version.getPatch()); assertTrue(version.isDevelopmentVersion()); } @Test public void versionTwoDigitDevVersion() { String versionText = "1.2dev"; Version version = Version.parse(versionText); assertEquals(versionText, version.getFullVersion()); assertEquals(1, version.getMajor()); assertEquals(2, version.getMinor()); assertEquals(0, version.getPatch()); assertTrue(version.isDevelopmentVersion()); } @Test public void versionThreeDigitDevVersion() { String versionText = "1.2.3dev"; Version version = Version.parse(versionText); assertEquals(versionText, version.getFullVersion()); assertEquals(1, version.getMajor()); assertEquals(2, version.getMinor()); assertEquals(3, version.getPatch()); assertTrue(version.isDevelopmentVersion()); } @Test public void validVersionIsNotNewerThanUnknownVersion() { // Reason: unknown version should only happen for developer builds where we don't want an update notification Version unknownVersion = Version.parse(BuildInfo.UNKNOWN_VERSION); Version validVersion = Version.parse("4.2"); assertFalse(validVersion.isNewerThan(unknownVersion)); } @Test public void unknownVersionIsNotNewerThanValidVersion() { Version unknownVersion = Version.parse(BuildInfo.UNKNOWN_VERSION); Version validVersion = Version.parse("4.2"); assertFalse(unknownVersion.isNewerThan(validVersion)); } @Test public void versionNewerThan() { Version olderVersion = Version.parse("2.4"); Version newerVersion = Version.parse("4.2"); assertTrue(newerVersion.isNewerThan(olderVersion)); } @Test public void versionNotNewerThan() { Version olderVersion = Version.parse("2.4"); Version newerVersion = Version.parse("4.2"); assertFalse(olderVersion.isNewerThan(newerVersion)); } @Test public void versionNotNewerThanSameVersion() { Version version1 = Version.parse("4.2"); Version version2 = Version.parse("4.2"); assertFalse(version1.isNewerThan(version2)); } @Test public void versionNewerThanDevTwoDigits() { Version older = Version.parse("4.2"); Version newer = Version.parse("4.3dev"); assertTrue(newer.isNewerThan(older)); } @Test public void versionNewerThanDevVersion() { Version older = Version.parse("1.2dev"); Version newer = Version.parse("1.2"); assertTrue(newer.isNewerThan(older)); assertFalse(older.isNewerThan(newer)); } @Test public void versionNewerThanDevThreeDigits() { Version older = Version.parse("4.2.1"); Version newer = Version.parse("4.3dev"); assertTrue(newer.isNewerThan(older)); } @Test public void versionNewerMinor() { Version older = Version.parse("4.1"); Version newer = Version.parse("4.2.1"); assertTrue(newer.isNewerThan(older)); } @Test public void versionNotNewerMinor() { Version older = Version.parse("4.1"); Version newer = Version.parse("4.2.1"); assertFalse(older.isNewerThan(newer)); } @Test public void versionNewerPatch() { Version older = Version.parse("4.2.1"); Version newer = Version.parse("4.2.2"); assertTrue(newer.isNewerThan(older)); } @Test public void versionNotNewerPatch() { Version older = Version.parse("4.2.1"); Version newer = Version.parse("4.2.2"); assertFalse(older.isNewerThan(newer)); } @Test public void equalVersionsNotNewer() { Version version1 = Version.parse("4.2.2"); Version version2 = Version.parse("4.2.2"); assertFalse(version1.isNewerThan(version2)); } @Test public void changelogOfDevelopmentVersionWithDash() { Version version = Version.parse("4.0-dev"); assertEquals("https://github.com/JabRef/jabref/blob/master/CHANGELOG.md#unreleased", version.getChangelogUrl()); } @Test public void changelogOfDevelopmentVersionWithoutDash() { Version version = Version.parse("3.7dev"); assertEquals("https://github.com/JabRef/jabref/blob/master/CHANGELOG.md#unreleased", version.getChangelogUrl()); } @Test public void changelogWithTwoDigits() { Version version = Version.parse("3.4"); assertEquals("https://github.com/JabRef/jabref/blob/v3.4/CHANGELOG.md", version.getChangelogUrl()); } @Test public void changelogWithThreeDigits() { Version version = Version.parse("3.4.1"); assertEquals("https://github.com/JabRef/jabref/blob/v3.4.1/CHANGELOG.md", version.getChangelogUrl()); } @Test public void versionNull() { String versionText = null; Version version = Version.parse(versionText); assertEquals(BuildInfo.UNKNOWN_VERSION, version.getFullVersion()); } @Test public void versionEmpty() { String versionText = ""; Version version = Version.parse(versionText); assertEquals(BuildInfo.UNKNOWN_VERSION, version.getFullVersion()); } @Test public void betaNewerThanAlpha() { Version older = Version.parse("2.7-alpha"); Version newer = Version.parse("2.7-beta"); assertTrue(newer.isNewerThan(older)); } @Test public void stableNewerThanBeta() { Version older = Version.parse("2.8-alpha"); Version newer = Version.parse("2.8"); assertTrue(newer.isNewerThan(older)); } @Test public void alphaShouldBeUpdatedToBeta() { Version alpha = Version.parse("2.8-alpha"); Version beta = Version.parse("2.8-beta"); assertTrue(alpha.shouldBeUpdatedTo(beta)); } @Test public void betaShouldBeUpdatedToStable() { Version beta = Version.parse("2.8-beta"); Version stable = Version.parse("2.8"); assertTrue(beta.shouldBeUpdatedTo(stable)); } @Test public void stableShouldNotBeUpdatedToAlpha() { Version stable = Version.parse("2.8"); Version alpha = Version.parse("2.9-alpha"); assertFalse(stable.shouldBeUpdatedTo(alpha)); } @Test public void stableShouldNotBeUpdatedToBeta() { Version stable = Version.parse("3.8.2"); Version beta = Version.parse("4.0-beta"); assertFalse(stable.shouldBeUpdatedTo(beta)); } @Test public void alphaShouldBeUpdatedToStables() { Version alpha = Version.parse("2.8-alpha"); Version stable = Version.parse("2.8"); List<Version> availableVersions = Arrays.asList(Version.parse("2.8-beta"), stable); assertEquals(Optional.of(stable), alpha.shouldBeUpdatedTo(availableVersions)); } }