summaryrefslogtreecommitdiff
path: root/test/junit/scala/util/SpecVersionTest.scala
blob: 82fc4fdf7b055f05c2f16c54e582f02ebd0bea3d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package scala.util

import org.junit.Assert._
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4

import scala.tools.testing.AssertUtil._

/** The java version property uses the spec version
 *  and must work for legacy "major.minor" and plain version_number,
 *  and fail otherwise.
 */
@RunWith(classOf[JUnit4])
class SpecVersionTest {
  class TestProperties(versionAt: String) extends PropertiesTrait {
    override def javaSpecVersion = versionAt

    override protected def pickJarBasedOn: Class[_] = ???
    override protected def propCategory: String = "test"

    // override because of vals like releaseVersion
    override lazy val scalaProps = new java.util.Properties
  }

  @Test
  def comparesJDK9Correctly(): Unit = {
    val sut9 = new TestProperties("9")
    assert(sut9 isJavaAtLeast "1")
    assert(sut9 isJavaAtLeast "1.5")
    assert(sut9 isJavaAtLeast "5")
    assert(sut9 isJavaAtLeast "1.8")
    assert(sut9 isJavaAtLeast "8")
    assert(sut9 isJavaAtLeast "9")
    assertFalse(sut9.isJavaAtLeast("10"))
  }

  // SI-7265
  @Test
  def comparesCorrectly(): Unit = {
    val sut7 = new TestProperties("1.7")
    assert(sut7 isJavaAtLeast "1")
    assert(sut7 isJavaAtLeast "1.5")
    assert(sut7 isJavaAtLeast "5")
    assert(sut7 isJavaAtLeast "1.6")
    assert(sut7 isJavaAtLeast "1.7")
    assert(sut7.isJavaAtLeast("7"))
    assertFalse(sut7.isJavaAtLeast("9"))
    assertFalse(sut7 isJavaAtLeast "1.8")
    assertFalse(sut7 isJavaAtLeast "9")
    assertFalse(sut7 isJavaAtLeast "10")
  }

  @Test def variousBadVersionStrings(): Unit = {
    val sut = new TestProperties("9")
    assertThrows[NumberFormatException](sut.isJavaAtLeast("1.9"), _ == "Not a version: 1.9")
    assertThrows[NumberFormatException](sut.isJavaAtLeast("1."))
    assertThrows[NumberFormatException](sut.isJavaAtLeast("1.8."))
    assertThrows[NumberFormatException](sut.isJavaAtLeast("1.a"))
    assertThrows[NumberFormatException](sut.isJavaAtLeast(""))
    assertThrows[NumberFormatException](sut.isJavaAtLeast("."))
    assertThrows[NumberFormatException](sut.isJavaAtLeast(".."))
    assertThrows[NumberFormatException](sut.isJavaAtLeast(".5"))
    assertThrows[NumberFormatException](sut.isJavaAtLeast("9-ea"))  //version number, not version string
  }

  @Test def `spec has minor or more`(): Unit = {
    val sut = new TestProperties("9.2.5")
    assert(sut.isJavaAtLeast("9"))
    assert(sut.isJavaAtLeast("9.0.1"))
    assert(sut.isJavaAtLeast("9.2.1"))
    assert(sut.isJavaAtLeast("8.3.1"))
    assert(sut.isJavaAtLeast("8.3.1.1.1"))
    assertFalse(sut.isJavaAtLeast("9.3.1"))
    assertFalse(sut.isJavaAtLeast("10.3.1"))
  }

  @Test def `compares only major minor security`(): Unit = {
    val sut = new TestProperties("9.2.5.1.2.3")
    assert(sut.isJavaAtLeast("9"))
    assert(sut.isJavaAtLeast("9.0.1"))
    assert(sut.isJavaAtLeast("9.2.5.9.9.9"))
    assertFalse(sut.isJavaAtLeast("9.2.6"))
  }

  @Test def `futurely proofed`(): Unit = {
    val sut = new TestProperties("10.2.5")
    assert(sut.isJavaAtLeast("10"))
    assert(sut.isJavaAtLeast("9"))
    assert(sut.isJavaAtLeast("9.0.1"))
    assert(sut.isJavaAtLeast("9.2.1"))
    assert(sut.isJavaAtLeast("8.3.1"))
    assert(sut.isJavaAtLeast("8.3.1.1.1"))
    assert(sut.isJavaAtLeast("9.3.1"))
    assertFalse(sut.isJavaAtLeast("10.3.1"))
  }
}