Skip to content

Commit 3138be2

Browse files
committed
Add workspace symbol tests
1 parent b3729ff commit 3138be2

File tree

12 files changed

+86
-19
lines changed

12 files changed

+86
-19
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ import dotty.tools.languageserver.util.Code._
77
class DocumentSymbolTest {
88

99
@Test def documentSymbol0: Unit =
10-
code"class ${m1}Foo$m2".withSource.documentSymbol(m1, ("Foo", "Class", m1 to m2))
10+
code"class ${m1}Foo$m2".withSource.documentSymbol(m1, (m1 to m2).symInfo("Foo", "Class"))
1111

1212
@Test def documentSymbol1: Unit =
1313
code"class ${m1}Foo$m2; class ${m3}Bar$m4".withSource
14-
.documentSymbol(m1, ("Foo", "Class", m1 to m2), ("Bar", "Class", m3 to m4))
14+
.documentSymbol(m1, (m1 to m2).symInfo("Foo", "Class"), (m3 to m4).symInfo("Bar", "Class"))
1515

1616
@Test def documentSymbol3: Unit = {
1717
withSources(
1818
code"class ${m1}Foo$m2",
1919
code"class ${m3}Bar$m4"
20-
) .documentSymbol(m1, ("Foo", "Class", m1 to m2))
21-
.documentSymbol(m3, ("Bar", "Class", m3 to m4))
20+
) .documentSymbol(m1, (m1 to m2).symInfo("Foo", "Class"))
21+
.documentSymbol(m3, (m3 to m4).symInfo("Bar", "Class"))
2222
}
2323
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,6 @@ object Main {
5858
classOf[ReferencesTest],
5959
classOf[RenameTest],
6060
classOf[DocumentSymbolTest],
61+
classOf[SymbolTest],
6162
)
6263
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dotty.tools.languageserver
2+
3+
import org.junit.Test
4+
5+
import dotty.tools.languageserver.util.Code._
6+
7+
class SymbolTest {
8+
9+
// @Test def symbol0: Unit =
10+
// code"class ${m1}Foo$m2".withSource.symbol("Foo", ("Foo", "Class", m1 to m2))
11+
12+
@Test def symbol1: Unit = {
13+
val Foo = (m1 to m2).withCode("Foo")
14+
val Bar = (m3 to m4).withCode("Bar")
15+
val fooFoo = (m5 to m6).withCode("Foo")
16+
withSources(
17+
code"class $Foo",
18+
code"class $Bar",
19+
code"""package foo
20+
|class $fooFoo {
21+
| class Bar
22+
|}
23+
"""
24+
) .symbol("Foo", Foo.range.symInfo("Foo", "Class"), fooFoo.range.symInfo("Foo", "Class", "foo"))
25+
.symbol("Bar", Bar.range.symInfo("Bar", "Class"))
26+
}
27+
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,17 @@ case class CodeRange(start: CodeMarker, end: CodeMarker) {
3030

3131
def withCode(text: String): CodeInRange = CodeInRange(text, this)
3232

33-
def toLSPRange: PosCtx[Range] = {
33+
def symInfo(name: String, kind: String, container: String = null): SymInfo =
34+
new SymInfo(name, kind, this, container)
35+
36+
def toRange: PosCtx[Range] = {
3437
check()
3538
new Range(start.toPosition, end.toPosition)
3639
}
3740

38-
def toLSPLocation: PosCtx[Location] = {
41+
def toLocation: PosCtx[Location] = {
3942
check()
40-
new Location(file.uri, toLSPRange)
43+
new Location(file.uri, toRange)
4144
}
4245

4346
def show: PosCtx[String] =

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import dotty.tools.languageserver.util.Code.SourceWithPositions
44
import dotty.tools.languageserver.util.actions._
55
import dotty.tools.languageserver.util.embedded.CodeMarker
66
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
7+
import org.eclipse.lsp4j.SymbolInformation
78

89
class CodeTester(sources: List[SourceWithPositions], actions: List[Action]) {
910

@@ -32,9 +33,12 @@ class CodeTester(sources: List[SourceWithPositions], actions: List[Action]) {
3233
def rename(marker: CodeMarker, newName: String, expected: List[CodeRange]): CodeTester =
3334
doAction(new CodeRename(marker, newName, expected)) // TODO apply changes to the sources and positions
3435

35-
def documentSymbol(marker: CodeMarker, symbols: (String, String, CodeRange)*): CodeTester =
36+
def documentSymbol(marker: CodeMarker, symbols: SymInfo*): CodeTester =
3637
doAction(new CodeDocumentSymbol(marker, symbols))
3738

39+
def symbol(query: String, symbols: SymInfo*): CodeTester =
40+
doAction(new CodeSymbol(query, symbols))
41+
3842
private def doAction(action: Action): this.type = {
3943
try {
4044
action.execute()(testServer, positions)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package dotty.tools.languageserver.util
2+
3+
import dotty.tools.languageserver.util.PositionContext._
4+
import org.eclipse.lsp4j._
5+
6+
class SymInfo(name: String, kind: String, range: CodeRange, container: String) {
7+
def toSymInformation: PosCtx[SymbolInformation] =
8+
new SymbolInformation(name, SymbolKind.valueOf(kind), range.toLocation, container)
9+
10+
def show: PosCtx[String] =
11+
s"SymInfo($name, $kind, ${range.show}, $container)"
12+
override def toString: String =
13+
s"SymInfo($name, $kind, $range, $container)"
14+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class CodeDefinition(val range: CodeRange, refOpt: Option[CodeRange]) extends Ac
88
override def onMarker(marker: CodeMarker): Exec[Unit] = {
99
val res = server.definition(marker.toTextDocumentPositionParams).get()
1010
assert(res.size() == refOpt.size, res)
11-
refOpt.foreach(ref => assert(res.get(0) == ref.toLSPLocation, res))
11+
refOpt.foreach(ref => assert(res.get(0) == ref.toLocation, res))
1212
}
1313

1414
override def show: PositionContext.PosCtx[String] =

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class CodeDocumentHighlight(val range: CodeRange, highs: Seq[(CodeRange, String)
1515
assert(refs.size == kinds.length, res)
1616
res.asScala.zip(refs).zip(kinds).foreach { case ((dhl, ref), kind) =>
1717
assert(dhl.getKind == DocumentHighlightKind.valueOf(kind), res)
18-
assert(dhl.getRange == ref.toLSPRange, res)
18+
assert(dhl.getRange == ref.toRange, res)
1919
}
2020
}
2121

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

33
import dotty.tools.languageserver.util.embedded.CodeMarker
4-
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
4+
import dotty.tools.languageserver.util.{PositionContext, SymInfo}
55

66
import scala.collection.JavaConverters._
77

8-
class CodeDocumentSymbol(val marker: CodeMarker, symbols: Seq[(String, String, CodeRange)]) extends ActionOnMarker {
8+
class CodeDocumentSymbol(val marker: CodeMarker, symbols: Seq[SymInfo]) extends ActionOnMarker {
99

1010
override def execute(): Exec[Unit] = {
1111
val res = server.documentSymbol(marker.toDocumentSymbolParams).get()
1212
assert(res.size() == symbols.size, res)
13-
for ((symInfo, (name, kind, range)) <- res.asScala.zip(symbols)) {
14-
assert(symInfo.getName == name, res)
15-
assert(symInfo.getKind.toString == kind, res)
16-
assert(symInfo.getLocation == range.toLSPLocation, res)
13+
for ((symInfo, expected) <- res.asScala.zip(symbols)) {
14+
assert(symInfo == expected.toSymInformation, res)
1715
}
1816
}
1917

2018
override def show: PositionContext.PosCtx[String] =
21-
s"CodeDocumentSymbol(${marker.show}, ${symbols.map(x => (x._1, x._2, x._3.show))})"
19+
s"CodeDocumentSymbol(${marker.show}, ${symbols.map(_.show)})"
2220
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class CodeReferences(val range: CodeRange, refs: List[CodeRange], withDecl: Bool
1010
override def onMarker(marker: CodeMarker): Exec[Unit] = {
1111
val res = server.references(marker.toReferenceParams(withDecl)).get()
1212
assert(res.size() == refs.size)
13-
res.asScala.zip(refs).foreach { case (loc, ref) => assert(loc == ref.toLSPLocation, res) }
13+
res.asScala.zip(refs).foreach { case (loc, ref) => assert(loc == ref.toLocation, res) }
1414
}
1515

1616
override def show: PositionContext.PosCtx[String] =

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class CodeRename(val marker: CodeMarker, newName: String, expected: List[CodeRan
1414
assert(expected.forall { exp =>
1515
editItems.exists { editItem =>
1616
editItem.getNewText == newName &&
17-
editItem.getRange == exp.toLSPRange
17+
editItem.getRange == exp.toRange
1818
}
1919
}, res)
2020
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package dotty.tools.languageserver.util.actions
2+
3+
import dotty.tools.languageserver.util.{CodeRange, PositionContext, SymInfo}
4+
import org.eclipse.lsp4j._
5+
6+
import scala.collection.JavaConverters._
7+
8+
class CodeSymbol(query: String, symbols: Seq[SymInfo]) extends Action {
9+
10+
override def execute(): Exec[Unit] = {
11+
val res = server.symbol(new WorkspaceSymbolParams(query)).get()
12+
assert(res.size() == symbols.size, res)
13+
for ((symInfo, expected) <- res.asScala.zip(symbols)) {
14+
assert(symInfo == expected.toSymInformation, res)
15+
}
16+
}
17+
18+
override def show: PositionContext.PosCtx[String] =
19+
s"CodeDocumentSymbol($query, ${symbols.map(_.show)})"
20+
}

0 commit comments

Comments
 (0)