summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2016-08-11 16:15:41 -0700
committerSom Snytt <som.snytt@gmail.com>2016-08-12 16:55:49 -0700
commitd83a00aabaeabb1cd4c647a43cecd7bb4595dcf6 (patch)
tree3e7a1e813a569fc8f5525e22d0487de81485ea53 /test
parent2b172be8c83c3146d3fd5ab01546c171ab18fa46 (diff)
downloadscala-d83a00aabaeabb1cd4c647a43cecd7bb4595dcf6.tar.gz
scala-d83a00aabaeabb1cd4c647a43cecd7bb4595dcf6.tar.bz2
scala-d83a00aabaeabb1cd4c647a43cecd7bb4595dcf6.zip
SI-9885 Don't return offset past EOF
On bad line number, `lineToOffset` should not return an offset past EOF (which was sentinel, internally).
Diffstat (limited to 'test')
-rw-r--r--test/junit/scala/reflect/internal/util/SourceFileTest.scala19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/junit/scala/reflect/internal/util/SourceFileTest.scala b/test/junit/scala/reflect/internal/util/SourceFileTest.scala
index cad23eba14..2f2029ad2d 100644
--- a/test/junit/scala/reflect/internal/util/SourceFileTest.scala
+++ b/test/junit/scala/reflect/internal/util/SourceFileTest.scala
@@ -5,6 +5,8 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.tools.testing.AssertUtil._
+
@RunWith(classOf[JUnit4])
class SourceFileTest {
def lineContentOf(code: String, offset: Int) =
@@ -57,4 +59,21 @@ class SourceFileTest {
assertEquals("def", lineContentOf("abc\r\ndef", 8))
assertEquals("def", lineContentOf("abc\r\ndef\r\n", 9))
}
+
+ @Test def si9885_lineToOffset(): Unit = {
+ val text = "a\nb\nc\n"
+ val f = new BatchSourceFile("batch", text)
+ assertThrows[IndexOutOfBoundsException] {
+ f.lineToOffset(3)
+ }
+ assertEquals(4, f.lineToOffset(2))
+
+ val p = Position.offset(f, text.length - 1)
+ val q = Position.offset(f, f.lineToOffset(p.line - 1))
+ assertEquals(p.line, q.line)
+ assertEquals(p.column, q.column + 1)
+ assertThrows[IndexOutOfBoundsException] {
+ Position.offset(f, f.lineToOffset(p.line))
+ }
+ }
}