diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-08-11 16:15:41 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2016-08-12 16:55:49 -0700 |
commit | d83a00aabaeabb1cd4c647a43cecd7bb4595dcf6 (patch) | |
tree | 3e7a1e813a569fc8f5525e22d0487de81485ea53 /test | |
parent | 2b172be8c83c3146d3fd5ab01546c171ab18fa46 (diff) | |
download | scala-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.scala | 19 |
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)) + } + } } |