Merge pull request #255 from typesafehub/java8

Switch to Java 8
This commit is contained in:
Havoc Pennington 2015-02-25 20:41:41 -05:00
commit 9d16f3bf61
5 changed files with 64 additions and 23 deletions

View File

@ -15,7 +15,7 @@ cache:
language: scala
jdk:
- openjdk6
- oraclejdk8
script:
- sbt ++$TRAVIS_SCALA_VERSION test

View File

@ -71,7 +71,7 @@ to merge it in.
- [Concatenation](#concatenation)
- [Miscellaneous Notes](#miscellaneous-notes)
- [Debugging Your Configuration](#debugging-your-configuration)
- [Supports Java 6 and Later](#supports-java-6-and-later)
- [Supports Java 8 and Later](#supports-java-8-and-later)
- [Rationale for Supported File Formats](#rationale-for-supported-file-formats)
- [Other APIs (Wrappers and Ports)](#other-apis-wrappers-and-ports)
- [Scala wrappers for the Java library](#scala-wrappers-for-the-java-library)
@ -87,7 +87,10 @@ The license is Apache 2.0, see LICENSE-2.0.txt.
### Binary Releases
You can find published releases (compiled for Java 6 and above) on
Version 1.2.1 and earlier were built for Java 6, while newer
versions will be built for Java 8.
You can find published releases (compiled for Java 8 and above) on
Maven Central.
<dependency>
@ -685,10 +688,10 @@ If you have trouble with your configuration, some useful tips.
- Use `myConfig.root().render()` to get a `Config` printed out as a
string with comments showing where each value came from.
### Supports Java 6 and Later
### Supports Java 8 and Later
Currently the library is maintained against Java 6. It does not
build with Java 5.
Currently the library is maintained against Java 8, but
version 1.2.1 and earlier will work with Java 6.
### Rationale for Supported File Formats

View File

@ -22,7 +22,7 @@ findbugsMaxMemory := 1000
jacoco.settings
javacOptions in (Compile, compile) ++= Seq("-source", "1.6", "-target", "1.6", "-g")
javacOptions in (Compile, compile) ++= Seq("-source", "1.6", "-target", "1.8", "-g")
// because we test some global state such as singleton caches,
// we have to run tests in serial.
@ -30,4 +30,4 @@ parallelExecution in Test := false
sources in (Compile, doc) ~= (_.filter(_.getParentFile.getName != "impl"))
javaVersionPrefix in javaVersionCheck := Some("1.6")
javaVersionPrefix in javaVersionCheck := Some("1.8")

View File

@ -924,20 +924,24 @@ class ConfigSubstitutionTest extends TestUtils {
@Test
def substSelfReferenceIndirect() {
// this has two possible outcomes depending on whether
// we resolve and memoize a first or b first. currently
// java 8's hash table makes it resolve OK, but
// it's also allowed to throw an exception.
val obj = parseObject("""a=1, b=${a}, a=${b}""")
val e = intercept[ConfigException.UnresolvedSubstitution] {
resolve(obj)
}
assertTrue("wrong exception: " + e.getMessage, e.getMessage.contains("cycle"))
val resolved = resolve(obj)
assertEquals(1, resolved.getInt("a"))
}
@Test
def substSelfReferenceDoubleIndirect() {
// this has two possible outcomes depending on whether we
// resolve and memoize a, b, or c first. currently java
// 8's hash table makes it resolve OK, but it's also
// allowed to throw an exception.
val obj = parseObject("""a=1, b=${c}, c=${a}, a=${b}""")
val e = intercept[ConfigException.UnresolvedSubstitution] {
resolve(obj)
}
assertTrue("wrong exception: " + e.getMessage, e.getMessage.contains("cycle"))
val resolved = resolve(obj)
assertEquals(1, resolved.getInt("a"))
}
@Test
@ -1002,7 +1006,7 @@ class ConfigSubstitutionTest extends TestUtils {
@Test
def substOptionalIndirectSelfReferenceInConcat() {
val obj = parseObject("""a=${?b}foo,b=${a}""")
val obj = parseObject("""a=${?b}foo,b=${?a}""")
val resolved = resolve(obj)
assertEquals("foo", resolved.getString("a"))
}

View File

@ -212,7 +212,7 @@ class ConfigValueTest extends TestUtils {
}
@Test
def configObjectSerializable() {
def java6ConfigObjectSerializable() {
val expectedSerialization = "" +
"ACED0005_s_r00_._c_o_m_._t_y_p_e_s_a_f_e_._c_o_n_f_i_g_._i_m_p_l_._S_e_r_i_a_l_i" +
"_z_e_d_C_o_n_f_i_g_V_a_l_u_e00000000000000010C0000_x_p_w_z02000000_n050000001906" +
@ -220,6 +220,40 @@ class ConfigValueTest extends TestUtils {
"000101040000000802000000010001_1010001_c050000000101040000000802000000030001_301" +
"0001_b050000000101040000000802000000020001_2010103000000010001_x"
val aMap = configMap("a" -> 1, "b" -> 2, "c" -> 3)
val a = new SimpleConfigObject(fakeOrigin(), aMap)
val b = checkSerializableOldFormat(expectedSerialization, a)
assertEquals(1, b.toConfig.getInt("a"))
// check that deserialized Config and ConfigObject refer to each other
assertTrue(b.toConfig.root eq b)
}
@Test
def java6ConfigConfigSerializable() {
val expectedSerialization = "" +
"ACED0005_s_r00_._c_o_m_._t_y_p_e_s_a_f_e_._c_o_n_f_i_g_._i_m_p_l_._S_e_r_i_a_l_i" +
"_z_e_d_C_o_n_f_i_g_V_a_l_u_e00000000000000010C0000_x_p_w_z02000000_n050000001906" +
"0000000D000B_f_a_k_e_ _o_r_i_g_i_n0900000001000104000000_J07000000030001_a050000" +
"000101040000000802000000010001_1010001_c050000000101040000000802000000030001_301" +
"0001_b050000000101040000000802000000020001_2010103000000010101_x"
val aMap = configMap("a" -> 1, "b" -> 2, "c" -> 3)
val a = new SimpleConfigObject(fakeOrigin(), aMap)
val b = checkSerializableOldFormat(expectedSerialization, a.toConfig())
assertEquals(1, b.getInt("a"))
// check that deserialized Config and ConfigObject refer to each other
assertTrue(b.root.toConfig eq b)
}
@Test
def configObjectSerializable() {
val expectedSerialization = "" +
"ACED0005_s_r00_._c_o_m_._t_y_p_e_s_a_f_e_._c_o_n_f_i_g_._i_m_p_l_._S_e_r_i_a_l_i" +
"_z_e_d_C_o_n_f_i_g_V_a_l_u_e00000000000000010C0000_x_p_w_z02000000_n050000001906" +
"0000000D000B_f_a_k_e_ _o_r_i_g_i_n0900000001000104000000_J07000000030001_a050000" +
"000101040000000802000000010001_1010001_b050000000101040000000802000000020001_201" +
"0001_c050000000101040000000802000000030001_3010103000000010001_x"
val aMap = configMap("a" -> 1, "b" -> 2, "c" -> 3)
val a = new SimpleConfigObject(fakeOrigin(), aMap)
val b = checkSerializable(expectedSerialization, a)
@ -231,11 +265,11 @@ class ConfigValueTest extends TestUtils {
@Test
def configConfigSerializable() {
val expectedSerialization = "" +
"ACED0005_s_r00_._c_o_m_._t_y_p_e_s_a_f_e_._c_o_n_f_i_g_._i_m_p_l_._S_e_r_i_a_l_i" +
"_z_e_d_C_o_n_f_i_g_V_a_l_u_e00000000000000010C0000_x_p_w_z02000000_n050000001906" +
"0000000D000B_f_a_k_e_ _o_r_i_g_i_n0900000001000104000000_J07000000030001_a050000" +
"000101040000000802000000010001_1010001_c050000000101040000000802000000030001_301" +
"0001_b050000000101040000000802000000020001_2010103000000010101_x"
"ACED0005_s_r00_._c_o_m_._t_y_p_e_s_a_f_e_._c_o_n_f_i_g_._i_m_p_l_._S_e_r_i_a_l_i" +
"_z_e_d_C_o_n_f_i_g_V_a_l_u_e00000000000000010C0000_x_p_w_z02000000_n050000001906" +
"0000000D000B_f_a_k_e_ _o_r_i_g_i_n0900000001000104000000_J07000000030001_a050000" +
"000101040000000802000000010001_1010001_b050000000101040000000802000000020001_201" +
"0001_c050000000101040000000802000000030001_3010103000000010101_x"
val aMap = configMap("a" -> 1, "b" -> 2, "c" -> 3)
val a = new SimpleConfigObject(fakeOrigin(), aMap)