Skip to content

Commit 38defc6

Browse files
committed
Print more info about failures and fix CodeInRange
1 parent cc6274e commit 38defc6

16 files changed

+81
-32
lines changed

language-server/test/dotty/tools/languageserver/HighlightTest.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@ import dotty.tools.languageserver.util.Code._
66

77
class HighlightTest {
88

9-
@Test def valNoHighlight0: Unit = {
9+
@Test def valHighlight0: Unit = {
1010
val xDef = (m1 to m2).withCode("x")
1111
code"class X { val $xDef = 9 }".withSource
12-
.highlight(xDef.range, Nil, Nil)
12+
.highlight(xDef.range, (xDef.range, "Read"))
1313
}
1414

15-
@Test def valHighlight0: Unit = {
15+
@Test def valHighlight1: Unit = {
16+
val xDef = (m1 to m2).withCode("x")
1617
val xRef = (m3 to m4).withCode("x")
17-
code"class ${m1}X$m2 { val x = 9; $xRef }".withSource
18-
.highlight(xRef.range, List(m1 to m2), List("Read"))
18+
code"class X { val $xDef = 9; $xRef}".withSource
19+
.highlight(xRef.range, (xDef.range, "Read"), (xRef.range, "Read"))
1920
}
2021

2122
}

language-server/test/dotty/tools/languageserver/Main.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ object Main {
2626
case ex1: AssertionError =>
2727
println(Console.RED + "failed" + Console.RESET)
2828
System.err.println(s"${method.getName} failed with")
29-
System.err.println(ex1.getMessage)
3029
ex1.printStackTrace()
3130
failed += 1
3231
case _ => throw ex.getCause

language-server/test/dotty/tools/languageserver/util/Code.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ object Code {
4242
case emb: CodeInRange =>
4343
positions += Tuple3(emb.range.start, line, char)
4444
scan(emb.text)
45+
stringBuilder.append(emb.text)
4546
positions += Tuple3(emb.range.end, line, char)
4647

4748
}

language-server/test/dotty/tools/languageserver/util/CodeRange.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,7 @@ case class CodeRange(start: CodeMarker, end: CodeMarker) {
1818
(start.line, start.character, end.line, end.character)
1919

2020
def withCode(text: String): CodeInRange = CodeInRange(text, this)
21+
22+
def show: PositionContext.PosCtx[String] =
23+
s"[start=${start.show}, end=${end.show}]"
2124
}

language-server/test/dotty/tools/languageserver/util/CodeTester.scala

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dotty.tools.languageserver.util
22

3+
import dotty.tools.dotc.printing.Highlighting
34
import dotty.tools.languageserver.util.Code.SourceWithPositions
45
import dotty.tools.languageserver.util.actions._
56
import dotty.tools.languageserver.util.embedded.CodeMarker
@@ -20,8 +21,8 @@ class CodeTester(sources: List[SourceWithPositions], actions: List[Action]) {
2021
def definition(range: CodeRange, refOpt: Option[CodeRange]): CodeTester =
2122
doAction(new CodeDefinition(range, refOpt))
2223

23-
def highlight(range: CodeRange, refs: List[CodeRange], kinds: List[String]): CodeTester =
24-
doAction(new CodeDocumentHighlight(range, refs, kinds))
24+
def highlight(range: CodeRange, highs: (CodeRange, String)*): CodeTester =
25+
doAction(new CodeDocumentHighlight(range, highs))
2526

2627
def references(range: CodeRange, refs: List[CodeRange], withDecl: Boolean = false): CodeTester =
2728
doAction(new CodeReferences(range, refs, withDecl))
@@ -36,7 +37,23 @@ class CodeTester(sources: List[SourceWithPositions], actions: List[Action]) {
3637
doAction(new CodeDocumentSymbol(marker, symbols))
3738

3839
private def doAction(action: Action): this.type = {
39-
action.execute()(testServer, positions)
40+
try {
41+
action.execute()(testServer, positions)
42+
} catch {
43+
case ex: AssertionError =>
44+
val sourcesStr = sources.zip(files).map{ case (source, file) => "// " + file.file + "\n" + source.text}.mkString("\n")
45+
val msg =
46+
s"""
47+
|
48+
|$sourcesStr
49+
|
50+
|while executing action: ${action.show(positions)}
51+
|
52+
""".stripMargin
53+
val assertionError = new AssertionError(msg + ex.getMessage)
54+
assertionError.setStackTrace(ex.getStackTrace)
55+
throw assertionError
56+
}
4057
this
4158
}
4259

@@ -48,7 +65,8 @@ class CodeTester(sources: List[SourceWithPositions], actions: List[Action]) {
4865
} yield position -> (file, line, char)
4966
}
5067
val posMap = posSeq.toMap
51-
assert(posSeq.size == posMap.size, "Each CodePosition instance can only appear one in the code")
68+
assert(posSeq.size == posMap.size,
69+
"Each CodeMarker instance can only appear once in the code: " + posSeq.map(x => (x._1, x._2._2, x._2._3)))
5270
new PositionContext(posMap)
5371
}
5472
}

language-server/test/dotty/tools/languageserver/util/Responses.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ object Responses {
88

99
def checkLocation(loc: Location, ref: CodeRange): PosCtx[Unit] = {
1010
ref.check()
11-
assert(loc.getUri == ref.file.uri)
11+
assert(loc.getUri == ref.file.uri, (loc, ref.show))
1212
checkRange(loc.getRange, ref)
1313
}
1414

1515
def checkRange(range: Range, ref: CodeRange): PosCtx[Unit] = {
1616
ref.check()
1717
val start = ref.start
1818
val end = ref.end
19-
assert(range.getStart.getLine == start.line)
20-
assert(range.getStart.getCharacter == start.character)
21-
assert(range.getEnd.getLine == end.line)
22-
assert(range.getEnd.getCharacter == end.character)
19+
assert(range.getStart.getLine == start.line, (range, ref.show))
20+
assert(range.getStart.getCharacter == start.character, (range, ref.show))
21+
assert(range.getEnd.getLine == end.line, (range, ref.show))
22+
assert(range.getEnd.getCharacter == end.character, (range, ref.show))
2323
}
2424

2525
}

language-server/test/dotty/tools/languageserver/util/actions/Action.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ import dotty.tools.languageserver.util.server.TestServer
66
trait Action {
77
type Exec = implicit (TestServer, PositionContext) => Unit
88
def execute(): Exec
9+
def show: PositionContext.PosCtx[String]
910
}

language-server/test/dotty/tools/languageserver/util/actions/CodeCompletion.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dotty.tools.languageserver.util.actions
22

3+
import dotty.tools.languageserver.util.PositionContext
34
import dotty.tools.languageserver.util.embedded.CodeMarker
45
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
56

@@ -9,9 +10,9 @@ class CodeCompletion(val marker: CodeMarker, completions: List[(String, String,
910

1011
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
1112
val res = implicitly[TestServer].completion(file, line, char)
12-
assert(res.isRight)
13+
assert(res.isRight, res)
1314
val cList = res.getRight
14-
assert(!cList.isIncomplete)
15+
assert(!cList.isIncomplete, res)
1516
completions.foreach { completion =>
1617
assert(
1718
cList.getItems.asScala.exists(item =>
@@ -21,4 +22,7 @@ class CodeCompletion(val marker: CodeMarker, completions: List[(String, String,
2122
)
2223
}
2324
}
25+
26+
override def show: PositionContext.PosCtx[String] =
27+
s"CodeCompletion(${marker.show}, $completions)"
2428
}

language-server/test/dotty/tools/languageserver/util/actions/CodeDefinition.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ class CodeDefinition(val range: CodeRange, refOpt: Option[CodeRange]) extends Ac
77

88
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
99
val res = implicitly[TestServer].definition(file, line, char)
10-
assert(res.size() == refOpt.size)
10+
assert(res.size() == refOpt.size, res)
1111
refOpt.foreach(Responses.checkLocation(res.get(0), _))
1212
}
13+
14+
override def show: PositionContext.PosCtx[String] =
15+
s"CodeDefinition(${range.show}, ${refOpt.map(_.show)})"
1316
}
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
4-
import dotty.tools.languageserver.util.{CodeRange, Responses}
4+
import dotty.tools.languageserver.util.{CodeRange, Responses, PositionContext}
55
import org.eclipse.lsp4j._
66

77
import scala.collection.JavaConverters._
88

9-
class CodeDocumentHighlight(val range: CodeRange, refs: List[CodeRange], kinds: List[String]) extends ActionOnRange {
9+
class CodeDocumentHighlight(val range: CodeRange, highs: Seq[(CodeRange, String)]) extends ActionOnRange {
1010

1111
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
12+
val (refs, kinds) = highs.unzip
1213
val res = implicitly[TestServer].documentHighlight(file, line, char)
13-
assert(res.size() == refs.size, (res, refs))
14-
assert(refs.size == kinds.length)
14+
assert(res.size() == refs.size, res)
15+
assert(refs.size == kinds.length, res)
1516
res.asScala.zip(refs).zip(kinds).foreach { case ((dhl, ref), kind) =>
16-
assert(dhl.getKind == DocumentHighlightKind.valueOf(kind))
17+
assert(dhl.getKind == DocumentHighlightKind.valueOf(kind), res)
1718
Responses.checkRange(dhl.getRange, ref)
1819
}
1920
}
21+
22+
override def show: PositionContext.PosCtx[String] = {
23+
val (refs, kinds) = highs.unzip
24+
s"CodeDocumentHighlight(${range.show}, ${refs.map(_.show)}, $kinds)"
25+
}
2026
}

language-server/test/dotty/tools/languageserver/util/actions/CodeDocumentSymbol.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@ package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.embedded.CodeMarker
44
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
5-
import dotty.tools.languageserver.util.{CodeRange, Responses}
5+
import dotty.tools.languageserver.util.{CodeRange, PositionContext, Responses}
66

77
import scala.collection.JavaConverters._
88

99
class CodeDocumentSymbol(val marker: CodeMarker, symbols: Seq[(String, String, CodeRange)]) extends ActionOnMarker {
1010

1111
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
1212
val res = implicitly[TestServer].documentSymbol(file)
13-
assert(res.size() == symbols.size)
13+
assert(res.size() == symbols.size, res)
1414
for ((symInfo, (name, kind, range)) <- res.asScala.zip(symbols)) {
15-
assert(symInfo.getName == name)
16-
assert(symInfo.getKind.toString == kind)
15+
assert(symInfo.getName == name, res)
16+
assert(symInfo.getKind.toString == kind, res)
1717
Responses.checkLocation(symInfo.getLocation, range)
1818
}
1919
}
20+
21+
override def show: PositionContext.PosCtx[String] =
22+
s"CodeDocumentSymbol(${marker.show}, ${symbols.map(x => (x._1, x._2, x._3.show))})"
2023
}

language-server/test/dotty/tools/languageserver/util/actions/CodeHover.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
4-
import dotty.tools.languageserver.util.CodeRange
4+
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
55

66
class CodeHover(val range: CodeRange, expected: String) extends ActionOnRange {
77

@@ -16,4 +16,7 @@ class CodeHover(val range: CodeRange, expected: String) extends ActionOnRange {
1616
assert(content.getLeft == expected, s"Expected $expected but was ${content.getLeft}")
1717
}
1818
}
19+
20+
override def show: PositionContext.PosCtx[String] =
21+
s"CodeHover(${range.show}, $expected"
1922
}

language-server/test/dotty/tools/languageserver/util/actions/CodeReferences.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@ class CodeReferences(val range: CodeRange, refs: List[CodeRange], withDecl: Bool
1111
assert(res.size() == refs.size)
1212
res.asScala.zip(refs).foreach { case (loc, ref) => Responses.checkLocation(loc, ref) }
1313
}
14+
15+
override def show: PositionContext.PosCtx[String] =
16+
s"CodeReferences(${range.show}, ${refs.map(_.show)}, $withDecl)"
1417
}
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.embedded.CodeMarker
4-
import dotty.tools.languageserver.util.{CodeRange, Responses}
4+
import dotty.tools.languageserver.util.{CodeRange, PositionContext, Responses}
55
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
66

77
import scala.collection.JavaConverters._
@@ -10,10 +10,13 @@ class CodeRename(val marker: CodeMarker, newName: String, expected: List[CodeRan
1010

1111
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
1212
val res = implicitly[TestServer].rename(file, line, char, newName)
13-
assert(res.getDocumentChanges == null)
13+
assert(res.getDocumentChanges == null, res)
1414
for ( (edit, exp) <- res.getChanges.values().asScala.flatMap(_.asScala).zip(expected)) {
15-
assert(edit.getNewText == newName)
15+
assert(edit.getNewText == newName, res)
1616
Responses.checkRange(edit.getRange, exp)
1717
}
1818
}
19+
20+
override def show: PositionContext.PosCtx[String] =
21+
s"CodeRename(${marker.show}, $newName, ${expected.map(_.show)})"
1922
}

language-server/test/dotty/tools/languageserver/util/embedded/CodeInRange.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ package dotty.tools.languageserver.util.embedded
22

33
import dotty.tools.languageserver.util.CodeRange
44

5-
case class CodeInRange(text: String, range: CodeRange) extends Embedded
5+
case class CodeInRange(text: String, range: CodeRange) extends Embedded

language-server/test/dotty/tools/languageserver/util/embedded/CodeMarker.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ class CodeMarker(name: String) extends Embedded {
1010
def file: PosCtx[TestFile] = implicitly[PositionContext].positionOf(this)._1
1111
def line: PosCtx[Int] = implicitly[PositionContext].positionOf(this)._2
1212
def character: PosCtx[Int] = implicitly[PositionContext].positionOf(this)._3
13+
def show: PosCtx[String] = s"($name,line=$line,char=$character)"
1314
override def toString: String = s"CodePosition($name)"
1415
}

0 commit comments

Comments
 (0)