diff --git a/.travis.yml b/.travis.yml index 5292f5c7..1594d962 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ script: admin/build.sh jdk: - openjdk6 - openjdk7 + - oraclejdk8 notifications: email: diff --git a/build.sbt b/build.sbt index 8c61e4ad..2962f2f6 100644 --- a/build.sbt +++ b/build.sbt @@ -1,24 +1,49 @@ -scalaModuleSettings - -name := "scala-parser-combinators" - -version := "1.1.0-SNAPSHOT" - -scalaVersion := crossScalaVersions.value.head - -crossScalaVersions := Seq("2.11.6", "2.12.0-M1") - -// important!! must come here (why?) -scalaModuleOsgiSettings - -OsgiKeys.exportPackage := Seq(s"scala.util.parsing.*;version=${version.value}") - -// needed to fix classloader issues (see scala-xml#20) -fork in Test := true - -libraryDependencies += "junit" % "junit" % "4.11" % "test" - -libraryDependencies += "com.novocode" % "junit-interface" % "0.10" % "test" - -mimaPreviousVersion := None +crossScalaVersions in ThisBuild := { + val javaVersion = System.getProperty("java.version") + val isJDK6Or7 = + javaVersion.startsWith("1.6.") || javaVersion.startsWith("1.7.") + if (isJDK6Or7) + Seq("2.11.7") + else + Seq("2.11.7", "2.12.0-M3") +} + +lazy val `scala-parser-combinators` = crossProject.in(file(".")). + settings(scalaModuleSettings: _*). + jvmSettings( + name := "scala-parser-combinators-jvm" + ). + jsSettings( + name := "scala-parser-combinators-js" + ). + settings( + moduleName := "scala-parser-combinators", + version := "1.1.0-SNAPSHOT", + scalaVersion := crossScalaVersions.value.head + ). + jvmSettings( + // important!! must come here (why?) + scalaModuleOsgiSettings: _* + ). + jvmSettings( + OsgiKeys.exportPackage := Seq(s"scala.util.parsing.*;version=${version.value}"), + + // needed to fix classloader issues (see scala-xml#20) + fork in Test := true + ). + jsSettings( + // Scala.js cannot run forked tests + fork in Test := false + ). + jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin)). + jvmSettings( + libraryDependencies += "junit" % "junit" % "4.11" % "test", + libraryDependencies += "com.novocode" % "junit-interface" % "0.10" % "test" + ). + settings( + mimaPreviousVersion := None + ) + +lazy val `scala-parser-combinatorsJVM` = `scala-parser-combinators`.jvm +lazy val `scala-parser-combinatorsJS` = `scala-parser-combinators`.js diff --git a/src/test/scala/scala/util/parsing/combinator/t4929.scala b/jvm/src/test/scala/scala/util/parsing/combinator/t4929.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/t4929.scala rename to jvm/src/test/scala/scala/util/parsing/combinator/t4929.scala diff --git a/project/plugins.sbt b/project/plugins.sbt index 25f33731..9eb822e3 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1 +1,3 @@ addSbtPlugin("org.scala-lang.modules" % "scala-module-plugin" % "1.0.3") + +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.6") diff --git a/src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala b/shared/src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala rename to shared/src/main/scala/scala/util/parsing/combinator/ImplicitConversions.scala diff --git a/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala similarity index 88% rename from src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala rename to shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala index 1e6b1624..12bb4838 100644 --- a/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala +++ b/shared/src/main/scala/scala/util/parsing/combinator/JavaTokenParsers.scala @@ -26,8 +26,12 @@ trait JavaTokenParsers extends RegexParsers { * The Java Language Spec. * Generally, this means a letter, followed by zero or more letters or numbers. */ - def ident: Parser[String] = - """\p{javaJavaIdentifierStart}\p{javaJavaIdentifierPart}*""".r + def ident: Parser[String] = ( + "" ~> // handle whitespace + rep1(acceptIf(Character.isJavaIdentifierStart)("identifier expected but `" + _ + "' found"), + elem("identifier part", Character.isJavaIdentifierPart(_: Char))) ^^ (_.mkString) + ) + /** An integer, without sign or with a negative sign. */ def wholeNumber: Parser[String] = """-?\d+""".r @@ -49,7 +53,7 @@ trait JavaTokenParsers extends RegexParsers { */ @migration("`stringLiteral` allows escaping single and double quotes, but not forward slashes any longer.", "2.10.0") def stringLiteral: Parser[String] = - ("\""+"""([^"\p{Cntrl}\\]|\\[\\'"bfnrt]|\\u[a-fA-F0-9]{4})*+"""+"\"").r + ("\""+"""([^"\x00-\x1F\x7F\\]|\\[\\'"bfnrt]|\\u[a-fA-F0-9]{4})*"""+"\"").r /** A number following the rules of `decimalNumber`, with the following * optional additions: * diff --git a/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/PackratParsers.scala rename to shared/src/main/scala/scala/util/parsing/combinator/PackratParsers.scala diff --git a/src/main/scala/scala/util/parsing/combinator/Parsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/Parsers.scala rename to shared/src/main/scala/scala/util/parsing/combinator/Parsers.scala diff --git a/src/main/scala/scala/util/parsing/combinator/RegexParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/RegexParsers.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/RegexParsers.scala rename to shared/src/main/scala/scala/util/parsing/combinator/RegexParsers.scala diff --git a/src/main/scala/scala/util/parsing/combinator/SubSequence.scala b/shared/src/main/scala/scala/util/parsing/combinator/SubSequence.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/SubSequence.scala rename to shared/src/main/scala/scala/util/parsing/combinator/SubSequence.scala diff --git a/src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala b/shared/src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala rename to shared/src/main/scala/scala/util/parsing/combinator/lexical/Lexical.scala diff --git a/src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala b/shared/src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala rename to shared/src/main/scala/scala/util/parsing/combinator/lexical/Scanners.scala diff --git a/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala b/shared/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala rename to shared/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala diff --git a/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala rename to shared/src/main/scala/scala/util/parsing/combinator/syntactical/StandardTokenParsers.scala diff --git a/src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala rename to shared/src/main/scala/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala diff --git a/src/main/scala/scala/util/parsing/combinator/syntactical/TokenParsers.scala b/shared/src/main/scala/scala/util/parsing/combinator/syntactical/TokenParsers.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/syntactical/TokenParsers.scala rename to shared/src/main/scala/scala/util/parsing/combinator/syntactical/TokenParsers.scala diff --git a/src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala b/shared/src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala rename to shared/src/main/scala/scala/util/parsing/combinator/token/StdTokens.scala diff --git a/src/main/scala/scala/util/parsing/combinator/token/Tokens.scala b/shared/src/main/scala/scala/util/parsing/combinator/token/Tokens.scala similarity index 100% rename from src/main/scala/scala/util/parsing/combinator/token/Tokens.scala rename to shared/src/main/scala/scala/util/parsing/combinator/token/Tokens.scala diff --git a/src/main/scala/scala/util/parsing/input/CharArrayReader.scala b/shared/src/main/scala/scala/util/parsing/input/CharArrayReader.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/CharArrayReader.scala rename to shared/src/main/scala/scala/util/parsing/input/CharArrayReader.scala diff --git a/src/main/scala/scala/util/parsing/input/CharSequenceReader.scala b/shared/src/main/scala/scala/util/parsing/input/CharSequenceReader.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/CharSequenceReader.scala rename to shared/src/main/scala/scala/util/parsing/input/CharSequenceReader.scala diff --git a/src/main/scala/scala/util/parsing/input/NoPosition.scala b/shared/src/main/scala/scala/util/parsing/input/NoPosition.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/NoPosition.scala rename to shared/src/main/scala/scala/util/parsing/input/NoPosition.scala diff --git a/src/main/scala/scala/util/parsing/input/OffsetPosition.scala b/shared/src/main/scala/scala/util/parsing/input/OffsetPosition.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/OffsetPosition.scala rename to shared/src/main/scala/scala/util/parsing/input/OffsetPosition.scala diff --git a/src/main/scala/scala/util/parsing/input/PagedSeqReader.scala b/shared/src/main/scala/scala/util/parsing/input/PagedSeqReader.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/PagedSeqReader.scala rename to shared/src/main/scala/scala/util/parsing/input/PagedSeqReader.scala diff --git a/src/main/scala/scala/util/parsing/input/Position.scala b/shared/src/main/scala/scala/util/parsing/input/Position.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/Position.scala rename to shared/src/main/scala/scala/util/parsing/input/Position.scala diff --git a/src/main/scala/scala/util/parsing/input/Positional.scala b/shared/src/main/scala/scala/util/parsing/input/Positional.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/Positional.scala rename to shared/src/main/scala/scala/util/parsing/input/Positional.scala diff --git a/src/main/scala/scala/util/parsing/input/Reader.scala b/shared/src/main/scala/scala/util/parsing/input/Reader.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/Reader.scala rename to shared/src/main/scala/scala/util/parsing/input/Reader.scala diff --git a/src/main/scala/scala/util/parsing/input/StreamReader.scala b/shared/src/main/scala/scala/util/parsing/input/StreamReader.scala similarity index 100% rename from src/main/scala/scala/util/parsing/input/StreamReader.scala rename to shared/src/main/scala/scala/util/parsing/input/StreamReader.scala diff --git a/src/main/scala/scala/util/parsing/json/JSON.scala b/shared/src/main/scala/scala/util/parsing/json/JSON.scala similarity index 100% rename from src/main/scala/scala/util/parsing/json/JSON.scala rename to shared/src/main/scala/scala/util/parsing/json/JSON.scala diff --git a/src/main/scala/scala/util/parsing/json/Lexer.scala b/shared/src/main/scala/scala/util/parsing/json/Lexer.scala similarity index 100% rename from src/main/scala/scala/util/parsing/json/Lexer.scala rename to shared/src/main/scala/scala/util/parsing/json/Lexer.scala diff --git a/src/main/scala/scala/util/parsing/json/Parser.scala b/shared/src/main/scala/scala/util/parsing/json/Parser.scala similarity index 100% rename from src/main/scala/scala/util/parsing/json/Parser.scala rename to shared/src/main/scala/scala/util/parsing/json/Parser.scala diff --git a/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala similarity index 96% rename from src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala rename to shared/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala index 28cf1ba7..9527feea 100644 --- a/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/JavaTokenParsersTest.scala @@ -97,7 +97,7 @@ class JavaTokenParsersTest { case Failure(message, next) => assertEquals(next.pos.line, 1) assertEquals(next.pos.column, 1) - assert(message.endsWith(s"regex `\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*' expected but `-' found")) + assert(message.endsWith(s"identifier expected but `-' found")) case _ => sys.error(parseResult.toString) } diff --git a/src/test/scala/scala/util/parsing/combinator/JsonTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/JsonTest.scala similarity index 98% rename from src/test/scala/scala/util/parsing/combinator/JsonTest.scala rename to shared/src/test/scala/scala/util/parsing/combinator/JsonTest.scala index cb24a334..84e15bfb 100644 --- a/src/test/scala/scala/util/parsing/combinator/JsonTest.scala +++ b/shared/src/test/scala/scala/util/parsing/combinator/JsonTest.scala @@ -120,7 +120,10 @@ class JsonTest { assertEquals("{\"name\" : {\"name1\" : \"va1ue1\", \"name2\" : \"va1ue2\"}}", JSONObject(Map("name" -> JSONObject(TreeMap("name1" -> "va1ue1", "name2" -> "va1ue2")))).toString()) - assertEquals("[4.0, 1.0, 3.0, 2.0, 6.0, 5.0, 8.0, 7.0]", JSONArray(List[Double](4,1,3,2,6,5,8,7)).toString()) + val expected = + if (1.0.toString == "1") "[4, 1, 3, 2, 6, 5, 8, 7]" + else "[4.0, 1.0, 3.0, 2.0, 6.0, 5.0, 8.0, 7.0]" + assertEquals(expected, JSONArray(List[Double](4,1,3,2,6,5,8,7)).toString()) } // A test method that escapes all characters in strings diff --git a/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala rename to shared/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala diff --git a/src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala b/shared/src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala rename to shared/src/test/scala/scala/util/parsing/combinator/RegexParsersTest.scala diff --git a/src/test/scala/scala/util/parsing/combinator/UnitTestIO.scala b/shared/src/test/scala/scala/util/parsing/combinator/UnitTestIO.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/UnitTestIO.scala rename to shared/src/test/scala/scala/util/parsing/combinator/UnitTestIO.scala diff --git a/src/test/scala/scala/util/parsing/combinator/t0700.scala b/shared/src/test/scala/scala/util/parsing/combinator/t0700.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/t0700.scala rename to shared/src/test/scala/scala/util/parsing/combinator/t0700.scala diff --git a/src/test/scala/scala/util/parsing/combinator/t1100.scala b/shared/src/test/scala/scala/util/parsing/combinator/t1100.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/t1100.scala rename to shared/src/test/scala/scala/util/parsing/combinator/t1100.scala diff --git a/src/test/scala/scala/util/parsing/combinator/t4138.scala b/shared/src/test/scala/scala/util/parsing/combinator/t4138.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/t4138.scala rename to shared/src/test/scala/scala/util/parsing/combinator/t4138.scala diff --git a/src/test/scala/scala/util/parsing/combinator/t5514.scala b/shared/src/test/scala/scala/util/parsing/combinator/t5514.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/t5514.scala rename to shared/src/test/scala/scala/util/parsing/combinator/t5514.scala diff --git a/src/test/scala/scala/util/parsing/combinator/t8879.scala b/shared/src/test/scala/scala/util/parsing/combinator/t8879.scala similarity index 100% rename from src/test/scala/scala/util/parsing/combinator/t8879.scala rename to shared/src/test/scala/scala/util/parsing/combinator/t8879.scala