|  | // Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  | package com.android.tools.r8; | 
|  |  | 
|  | import static com.android.tools.r8.Version.LABEL; | 
|  | import static org.junit.Assert.assertEquals; | 
|  | import static org.junit.Assert.assertFalse; | 
|  | import static org.junit.Assert.assertNotNull; | 
|  | import static org.junit.Assert.assertNull; | 
|  | import static org.junit.Assert.assertTrue; | 
|  |  | 
|  | import org.junit.Test; | 
|  | import org.junit.runner.RunWith; | 
|  | import org.junit.runners.Parameterized; | 
|  | import org.junit.runners.Parameterized.Parameters; | 
|  |  | 
|  | @RunWith(Parameterized.class) | 
|  | public class VersionTests extends TestBase { | 
|  |  | 
|  | @Parameters(name = "{0}") | 
|  | public static TestParametersCollection data() { | 
|  | return getTestParameters().withNoneRuntime().build(); | 
|  | } | 
|  |  | 
|  | public VersionTests(TestParameters parameters) { | 
|  | parameters.assertNoneRuntime(); | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void testSemVerInfo() { | 
|  | int majorVersion = Version.getMajorVersion(); | 
|  | int minorVersion = Version.getMinorVersion(); | 
|  | int patchVersion = Version.getPatchVersion(); | 
|  | String preReleaseString = Version.getPreReleaseString(); | 
|  | if (LABEL.equals("main")) { | 
|  | assertEquals(-1, majorVersion); | 
|  | assertEquals(-1, minorVersion); | 
|  | assertEquals(-1, patchVersion); | 
|  | assertNull(preReleaseString); | 
|  | assertTrue(Version.getVersionString().startsWith("main")); | 
|  | } else { | 
|  | assertTrue(majorVersion > 0); | 
|  | assertTrue(minorVersion >= 0); | 
|  | assertTrue(patchVersion >= 0); | 
|  | assertNotNull(preReleaseString); | 
|  | assertTrue( | 
|  | Version.getVersionString() | 
|  | .startsWith( | 
|  | "" | 
|  | + majorVersion | 
|  | + "." | 
|  | + minorVersion | 
|  | + "." | 
|  | + patchVersion | 
|  | + (preReleaseString.isEmpty() ? "" : "-" + preReleaseString))); | 
|  | } | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void testDevelopmentPredicate() { | 
|  | if (LABEL.equals("main") || LABEL.contains("-dev")) { | 
|  | assertTrue(Version.isDevelopmentVersion()); | 
|  | } else { | 
|  | // This is a release branch, but Version.isDevelopmentVersion will still return true | 
|  | // since this is not the release archive with the r8-version.properties file. | 
|  | assertFalse(Version.isDevelopmentVersion(LABEL, false)); | 
|  | } | 
|  | } | 
|  |  | 
|  | @Test | 
|  | public void testLabelParsing() { | 
|  | assertEquals(-1, Version.getMajorVersion("main")); | 
|  | assertEquals(-1, Version.getMinorVersion("main")); | 
|  | assertEquals(-1, Version.getPatchVersion("main")); | 
|  | assertNull(Version.getPreReleaseString("main")); | 
|  | // 'main' is checked before 'isEngineering'. | 
|  | assertTrue(Version.isDevelopmentVersion("main", false)); | 
|  | assertTrue(Version.isDevelopmentVersion("main", true)); | 
|  |  | 
|  | assertEquals(1, Version.getMajorVersion("1.2.3-dev")); | 
|  | assertEquals(2, Version.getMinorVersion("1.2.3-dev")); | 
|  | assertEquals(3, Version.getPatchVersion("1.2.3-dev")); | 
|  | assertEquals("dev", Version.getPreReleaseString("1.2.3-dev")); | 
|  | // '-dev' suffix is checked before 'isEngineering'. | 
|  | assertTrue(Version.isDevelopmentVersion("1.2.3-dev", false)); | 
|  | assertTrue(Version.isDevelopmentVersion("1.2.3-dev", true)); | 
|  |  | 
|  | assertEquals(1, Version.getMajorVersion("1.2.3")); | 
|  | assertEquals(2, Version.getMinorVersion("1.2.3")); | 
|  | assertEquals(3, Version.getPatchVersion("1.2.3")); | 
|  | assertEquals("", Version.getPreReleaseString("1.2.3")); | 
|  | assertFalse(Version.isDevelopmentVersion("1.2.3", false)); | 
|  | assertTrue(Version.isDevelopmentVersion("1.2.3", true)); | 
|  | } | 
|  | } |