From b3f39ffefea911fa3966784e79ab15fada7660b6 Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Tue, 29 Dec 2015 11:51:16 -0800 Subject: [PATCH 1/8] Fixes OffsetPosition.lineContents so that it doesn't grab a newline at the end of the line. Includes tests. --- .../util/parsing/input/OffsetPosition.scala | 10 +++- .../scala/util/parsing/combinator/t56.scala | 57 +++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 src/test/scala/scala/util/parsing/combinator/t56.scala diff --git a/src/main/scala/scala/util/parsing/input/OffsetPosition.scala b/src/main/scala/scala/util/parsing/input/OffsetPosition.scala index 23fd2c8e..bbaa5e00 100644 --- a/src/main/scala/scala/util/parsing/input/OffsetPosition.scala +++ b/src/main/scala/scala/util/parsing/input/OffsetPosition.scala @@ -62,8 +62,14 @@ case class OffsetPosition(source: CharSequence, offset: Int) extends Position { * * @return the line at `offset` (not including a newline) */ - def lineContents: String = - source.subSequence(index(line - 1), index(line)).toString + def lineContents: String = { + val endIndex = if (source.charAt(index(line) - 1) == '\n') { + index(line) - 1 + } else { + index(line) + } + source.subSequence(index(line - 1), endIndex).toString + } /** Returns a string representation of the `Position`, of the form `line.column`. */ override def toString = line+"."+column diff --git a/src/test/scala/scala/util/parsing/combinator/t56.scala b/src/test/scala/scala/util/parsing/combinator/t56.scala new file mode 100644 index 00000000..fd1dcbd6 --- /dev/null +++ b/src/test/scala/scala/util/parsing/combinator/t56.scala @@ -0,0 +1,57 @@ +package scala.util.parsing.combinator + +import org.junit.Assert.{assertEquals, assertTrue} +import org.junit.Test + +import scala.util.parsing.combinator.syntactical.StandardTokenParsers + +/** + * Test for issue 56: https://github.com/scala/scala-parser-combinators/issues/56 + * + * Makes sure that lineContents (and thus longString) in the Position trait doesn't + * include a newline + */ +class t56 { + private object grammar extends StandardTokenParsers with PackratParsers { + lazy val term = (numericLit | stringLit | ident)+ + } + + @Test + def test1: Unit = { + import grammar._ + + val expr = + """/* an unclosed comment + |of multiple lines + |just to check longString/lineContents + """.stripMargin + + val fail = + """[1.1] failure: identifier expected + | + |/* an unclosed comment + |^""".stripMargin + + val parseResult = phrase(term)(new lexical.Scanner(expr)) + assertTrue(parseResult.isInstanceOf[Failure]) + assertEquals(fail, parseResult.toString) + } + + + @Test + def test2: Unit = { + import grammar._ + + val expr = "/* an unclosed comment without newline" + + val fail = + """[1.1] failure: identifier expected + | + |/* an unclosed comment without newline + |^""".stripMargin + + val parseResult = phrase(term)(new lexical.Scanner(expr)) + assertTrue(parseResult.isInstanceOf[Failure]) + assertEquals(fail, parseResult.toString) + } +} From ae632b569761fc5cfc5e265847da03773491087c Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Wed, 30 Dec 2015 15:06:01 -0800 Subject: [PATCH 2/8] Added a blank line to modify my pull request and re-run the Travis job. --- src/test/scala/scala/util/parsing/combinator/t56.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/scala/scala/util/parsing/combinator/t56.scala b/src/test/scala/scala/util/parsing/combinator/t56.scala index fd1dcbd6..8a1295ef 100644 --- a/src/test/scala/scala/util/parsing/combinator/t56.scala +++ b/src/test/scala/scala/util/parsing/combinator/t56.scala @@ -51,6 +51,7 @@ class t56 { |^""".stripMargin val parseResult = phrase(term)(new lexical.Scanner(expr)) + assertTrue(parseResult.isInstanceOf[Failure]) assertEquals(fail, parseResult.toString) } From 8d1c7a136edfd2c1a8606e73e9881f6d0bbd21ed Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Wed, 30 Dec 2015 15:35:02 -0800 Subject: [PATCH 3/8] Revert "Added a blank line to modify my pull request and re-run the Travis job." This reverts commit ae632b569761fc5cfc5e265847da03773491087c. --- src/test/scala/scala/util/parsing/combinator/t56.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/scala/scala/util/parsing/combinator/t56.scala b/src/test/scala/scala/util/parsing/combinator/t56.scala index 8a1295ef..fd1dcbd6 100644 --- a/src/test/scala/scala/util/parsing/combinator/t56.scala +++ b/src/test/scala/scala/util/parsing/combinator/t56.scala @@ -51,7 +51,6 @@ class t56 { |^""".stripMargin val parseResult = phrase(term)(new lexical.Scanner(expr)) - assertTrue(parseResult.isInstanceOf[Failure]) assertEquals(fail, parseResult.toString) } From 9a9955a391b00097323ab1e73e16c284f866f315 Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Sun, 3 Jan 2016 23:45:01 -0800 Subject: [PATCH 4/8] Renamed file. --- .../scala/util/parsing/combinator/{t56.scala => gh56.scala} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/scala/scala/util/parsing/combinator/{t56.scala => gh56.scala} (99%) diff --git a/src/test/scala/scala/util/parsing/combinator/t56.scala b/src/test/scala/scala/util/parsing/combinator/gh56.scala similarity index 99% rename from src/test/scala/scala/util/parsing/combinator/t56.scala rename to src/test/scala/scala/util/parsing/combinator/gh56.scala index fd1dcbd6..34e1d551 100644 --- a/src/test/scala/scala/util/parsing/combinator/t56.scala +++ b/src/test/scala/scala/util/parsing/combinator/gh56.scala @@ -11,7 +11,7 @@ import scala.util.parsing.combinator.syntactical.StandardTokenParsers * Makes sure that lineContents (and thus longString) in the Position trait doesn't * include a newline */ -class t56 { +class gh56 { private object grammar extends StandardTokenParsers with PackratParsers { lazy val term = (numericLit | stringLit | ident)+ } From 1b152b7cb87c479ddab8ed03c760a4478abb3bda Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Sun, 3 Jan 2016 23:49:53 -0800 Subject: [PATCH 5/8] Deleted test to see if that's causing the Travis issue. --- .../scala/util/parsing/combinator/gh56.scala | 57 ------------------- 1 file changed, 57 deletions(-) delete mode 100644 src/test/scala/scala/util/parsing/combinator/gh56.scala diff --git a/src/test/scala/scala/util/parsing/combinator/gh56.scala b/src/test/scala/scala/util/parsing/combinator/gh56.scala deleted file mode 100644 index 34e1d551..00000000 --- a/src/test/scala/scala/util/parsing/combinator/gh56.scala +++ /dev/null @@ -1,57 +0,0 @@ -package scala.util.parsing.combinator - -import org.junit.Assert.{assertEquals, assertTrue} -import org.junit.Test - -import scala.util.parsing.combinator.syntactical.StandardTokenParsers - -/** - * Test for issue 56: https://github.com/scala/scala-parser-combinators/issues/56 - * - * Makes sure that lineContents (and thus longString) in the Position trait doesn't - * include a newline - */ -class gh56 { - private object grammar extends StandardTokenParsers with PackratParsers { - lazy val term = (numericLit | stringLit | ident)+ - } - - @Test - def test1: Unit = { - import grammar._ - - val expr = - """/* an unclosed comment - |of multiple lines - |just to check longString/lineContents - """.stripMargin - - val fail = - """[1.1] failure: identifier expected - | - |/* an unclosed comment - |^""".stripMargin - - val parseResult = phrase(term)(new lexical.Scanner(expr)) - assertTrue(parseResult.isInstanceOf[Failure]) - assertEquals(fail, parseResult.toString) - } - - - @Test - def test2: Unit = { - import grammar._ - - val expr = "/* an unclosed comment without newline" - - val fail = - """[1.1] failure: identifier expected - | - |/* an unclosed comment without newline - |^""".stripMargin - - val parseResult = phrase(term)(new lexical.Scanner(expr)) - assertTrue(parseResult.isInstanceOf[Failure]) - assertEquals(fail, parseResult.toString) - } -} From 2161170508bab3c697d0e1b9f053cb5de7c5ed45 Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Wed, 6 Jan 2016 10:10:42 -0800 Subject: [PATCH 6/8] Added workaround for Travis bug on openjdk6 and openjdk7 --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 5633424f..6a44cc75 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,8 @@ language: scala +before_install: + - sudo hostname "$(hostname | cut -c1-63)" + env: global: - PUBLISH_JDK=openjdk6 From ec3d371addb00bc5de3d74547efbbacd34d341cd Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Wed, 6 Jan 2016 10:12:18 -0800 Subject: [PATCH 7/8] Revert "Deleted test to see if that's causing the Travis issue." This reverts commit 1b152b7cb87c479ddab8ed03c760a4478abb3bda. --- .../scala/util/parsing/combinator/gh56.scala | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/test/scala/scala/util/parsing/combinator/gh56.scala diff --git a/src/test/scala/scala/util/parsing/combinator/gh56.scala b/src/test/scala/scala/util/parsing/combinator/gh56.scala new file mode 100644 index 00000000..34e1d551 --- /dev/null +++ b/src/test/scala/scala/util/parsing/combinator/gh56.scala @@ -0,0 +1,57 @@ +package scala.util.parsing.combinator + +import org.junit.Assert.{assertEquals, assertTrue} +import org.junit.Test + +import scala.util.parsing.combinator.syntactical.StandardTokenParsers + +/** + * Test for issue 56: https://github.com/scala/scala-parser-combinators/issues/56 + * + * Makes sure that lineContents (and thus longString) in the Position trait doesn't + * include a newline + */ +class gh56 { + private object grammar extends StandardTokenParsers with PackratParsers { + lazy val term = (numericLit | stringLit | ident)+ + } + + @Test + def test1: Unit = { + import grammar._ + + val expr = + """/* an unclosed comment + |of multiple lines + |just to check longString/lineContents + """.stripMargin + + val fail = + """[1.1] failure: identifier expected + | + |/* an unclosed comment + |^""".stripMargin + + val parseResult = phrase(term)(new lexical.Scanner(expr)) + assertTrue(parseResult.isInstanceOf[Failure]) + assertEquals(fail, parseResult.toString) + } + + + @Test + def test2: Unit = { + import grammar._ + + val expr = "/* an unclosed comment without newline" + + val fail = + """[1.1] failure: identifier expected + | + |/* an unclosed comment without newline + |^""".stripMargin + + val parseResult = phrase(term)(new lexical.Scanner(expr)) + assertTrue(parseResult.isInstanceOf[Failure]) + assertEquals(fail, parseResult.toString) + } +} From f4bc617645cb7e6562e7a0e52167a59402773191 Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Wed, 6 Jan 2016 10:37:41 -0800 Subject: [PATCH 8/8] Trying Travis workaround based on both hostname and /etc/hosts --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6a44cc75..daeb93c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,10 @@ language: scala before_install: + - cat /etc/hosts # optionally check the content *before* - sudo hostname "$(hostname | cut -c1-63)" - + - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts + - cat /etc/hosts # optionally check the content *after* env: global: - PUBLISH_JDK=openjdk6