Skip to content

Commit 31b2441

Browse files
committed
Add more evaluation tests
1 parent 9920195 commit 31b2441

File tree

75 files changed

+1072
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+1072
-1
lines changed

compiler/test/dotty/tools/debug/DebugTests.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class DebugTests:
1515
import DebugTests.*
1616
@Test def debug: Unit =
1717
implicit val testGroup: TestGroup = TestGroup("debug")
18-
// compileFile("tests/debug/eval-private-members-in-parent.scala", TestConfiguration.defaultOptions).checkDebug()
18+
// compileFile("tests/debug/eval-local-class-in-value-class.scala", TestConfiguration.defaultOptions).checkDebug()
1919
compileFilesInDir("tests/debug", TestConfiguration.defaultOptions).checkDebug()
2020

2121
object DebugTests extends ParallelTesting:

tests/debug/eval-at-default-arg.check

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
break Test$ 6
2+
eval x + 1
3+
result 4

tests/debug/eval-at-default-arg.scala

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
foo(3)()
4+
5+
def foo(x: Int)(
6+
y: Int = x + 1
7+
): Unit =
8+
println("foo")
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
break Test$ 5 // main
2+
break Test$ 5 // main$$anonfun$1
3+
eval x
4+
result hello
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
val x = "hello"
4+
m:
5+
x + ", world!"
6+
7+
def m(y: => String): Unit = println(y)

tests/debug/eval-by-name.check

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
break Test$ 11
2+
eval x
3+
result foo
4+
eval m
5+
result foofoo
6+
eval A().m
7+
result fo
8+
eval this.m("bar")
9+
result barbarba
10+
11+
break Test$ 7
12+
eval x
13+
result foo
14+
eval m
15+
result foofoo
16+
eval A().m
17+
result fo
18+
19+
break Test$A$1 10
20+
eval x
21+
result foo
22+
eval m
23+
result fo
24+
eval A().m
25+
result fo
26+
27+
break A 14
28+
eval x
29+
result bar
30+
eval m
31+
result bar
32+
eval A("foo").m
33+
result foo

tests/debug/eval-by-name.scala

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
println(m("foo") + A("bar").m)
4+
5+
def m(x: => String): String =
6+
def m: String =
7+
x + x
8+
class A:
9+
def m: String =
10+
x.take(2)
11+
m + A().m
12+
13+
class A(x: => String):
14+
def m: String = x
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
break Test$ 14
2+
eval new A("foo")
3+
result fo
4+
eval m("bar")
5+
result ba
6+
7+
break Test$A$1 9
8+
eval size
9+
result 2
10+
eval size.value
11+
result 2
12+
eval new A("foo")
13+
result fo
14+
15+
break Test$ 12
16+
eval size
17+
result 2
18+
eval size.value
19+
result 2
20+
eval new A("foo")
21+
result fo
22+
eval m("bar")
23+
result ba
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Size(val value: Int) extends AnyVal
2+
3+
object Test:
4+
def main(args: Array[String]): Unit =
5+
val size = new Size(2)
6+
7+
class A(msg: String):
8+
override def toString: String =
9+
msg.take(size.value)
10+
11+
def m(msg: String): String =
12+
msg.take(size.value)
13+
14+
println(new A("foo"))
15+
println(m("bar"))

tests/debug/eval-captures.check

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
break A 26
2+
eval (new B).m
3+
result x1x2x3x4
4+
5+
break A$B$1 22
6+
eval x1
7+
result x1
8+
eval m // local def m
9+
result x1x2x3x4
10+
eval (new B).m
11+
result x1x2x3x4
12+
eval A.this.m // compiles but throws NoSuchFieldException
13+
result java.lang.NoSuchFieldException: $outer
14+
15+
break A$B$1 21
16+
eval x1
17+
result x1
18+
eval x2
19+
result x2
20+
eval m
21+
result x1x2x3x4
22+
eval (new C).m
23+
result x1x2x3x4
24+
eval (new B).m
25+
result x1x2x3x4
26+
27+
break A$B$1$C$1 19
28+
eval x1
29+
result x1
30+
eval x2
31+
result x2
32+
eval x3
33+
result x3
34+
eval x4
35+
result x4
36+
eval m
37+
result x1x2x3x4
38+
eval (new C).m
39+
result x1x2x3x4
40+
eval (new B).m
41+
result x1x2x3x4
42+
43+
break A$B$1$C$1 18
44+
eval x1
45+
result x1
46+
eval x2
47+
result x2
48+
eval x3
49+
result x3
50+
eval x4
51+
result x4
52+
eval m
53+
result x1x2x3x4
54+
eval (new C).m
55+
result x1x2x3x4
56+
eval (new B).m
57+
result x1x2x3x4

tests/debug/eval-captures.scala

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
val a = new A
4+
println(a.m)
5+
6+
class A:
7+
def m: String =
8+
val x1 = "x1"
9+
class B:
10+
def m: String =
11+
val x2 = "x2"
12+
def m: String =
13+
val x3 = "x3"
14+
class C:
15+
def m: String =
16+
val x4 = "x4"
17+
def m: String =
18+
x1 + x2 + x3 + x4
19+
m
20+
val c = new C
21+
c.m
22+
m
23+
end m
24+
end B
25+
val b = new B
26+
b.m

tests/debug/eval-encoding.check

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
break Test$ 4
2+
eval | + new <> + &(":") + !
3+
result |<>&(:)!

tests/debug/eval-encoding.scala

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
val ! = "!"
4+
println(| + new <> + &(":") + !)
5+
private val | = "|"
6+
private class <> :
7+
override def toString: String = "<>"
8+
private def &(`:`: String): String = s"&(${`:`})"

tests/debug/eval-enum.check

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
break B$C 10 // B$C.<init>
2+
break Test$ 18
3+
eval A.A1.a
4+
result 1
5+
eval A.A2.a
6+
result 2
7+
8+
break B 13
9+
eval C.C1.m
10+
result bb
11+
eval C.C2("bb").m
12+
result bbb
13+
14+
break B$C 10
15+
eval C1.m
16+
result bb
17+
eval C2("bb").m
18+
result bbb

tests/debug/eval-enum.scala

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
enum A(val a: Int) extends java.lang.Enum[A]:
2+
case A1 extends A(1)
3+
case A2 extends A(2)
4+
5+
class B(b: String):
6+
private enum C(c: String):
7+
case C1 extends C(b)
8+
case C2(x: String) extends C(x)
9+
10+
def m: String = b + c
11+
end C
12+
13+
def bar: String = C.C1.m
14+
15+
object Test:
16+
def main(args: Array[String]): Unit =
17+
val b = new B("b")
18+
println(b.bar)

tests/debug/eval-exception.check

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
break Test$ 7
2+
eval throwException()
3+
result java.lang.Exception: foo
4+
eval throw new Exception("bar")
5+
result java.lang.Exception: bar
6+
eval
7+
try throwException()
8+
catch case e: Exception => "caught"
9+
result caught
10+
eval assert(false, "fizz")
11+
result java.lang.AssertionError: assertion failed: fizz

tests/debug/eval-exception.scala

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
try throwException()
4+
catch case e: Exception => ()
5+
6+
def throwException(): Unit =
7+
throw new Exception("foo")

tests/debug/eval-fields.check

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
break Test$ 4
2+
eval a.a1
3+
result a.a1
4+
eval a.B.b1
5+
result a.B.b1
6+
eval new A("aa", 2).a1
7+
result aa.a1
8+
eval new A("aa", 2).B.b1
9+
result aa.B.b1
10+
11+
break A 17
12+
eval name
13+
result a
14+
eval this.n
15+
result 1
16+
eval a2
17+
result a.a2
18+
eval new A("aa", 2).a2
19+
result aa.a2
20+
eval B.b1
21+
result a.B.b1
22+
eval C.c1
23+
result a.C.c1
24+
eval new A("aa", 2).C.c1
25+
result aa.C.c1

tests/debug/eval-fields.scala

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
val a = new A("a", 1)
4+
println(a)
5+
6+
class A(name: String, val n: Int):
7+
val a1 = s"$name.a1"
8+
private val a2 = s"$name.a2"
9+
10+
object B:
11+
val b1 = s"$name.B.b1"
12+
13+
private object C:
14+
val c1 = s"$name.C.c1"
15+
16+
override def toString: String =
17+
name + a2

tests/debug/eval-i425.check

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
break Test$ 7
2+
eval patch.span
3+
result 0
4+
eval patch.span = Span(1)
5+
result ()
6+
eval patch.span
7+
result 1

tests/debug/eval-i425.scala

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// https://github.com/scalacenter/scala-debug-adapter/issues/425
2+
object Test:
3+
private class Patch(var span: Span)
4+
5+
def main(args: Array[String]): Unit =
6+
val patch = new Patch(new Span(0))
7+
println("ok")
8+
9+
class Span(val start: Int) extends AnyVal:
10+
def end: Int = start + 1

tests/debug/eval-i485.check

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
break Test$ 16
2+
eval b.a1
3+
result a1
4+
eval b.a2 = 2; b.a2
5+
result 2
6+
eval b.m
7+
result m
8+
eval new b.D
9+
result D
10+
eval b.D
11+
result D$

tests/debug/eval-i485.scala

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// https://github.com/scalacenter/scala-debug-adapter/issues/425
2+
class A:
3+
val a1 = "a1"
4+
var a2 = 1
5+
def m = "m"
6+
class D:
7+
override def toString: String = "D"
8+
object D:
9+
override def toString: String = "D$"
10+
11+
object Test:
12+
private class B extends A
13+
14+
def main(args: Array[String]): Unit =
15+
val b = new B
16+
println("foo")

tests/debug/eval-in-case-def.check

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
break Test$ 6
2+
eval n + m
3+
result 2

tests/debug/eval-in-case-def.scala

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
object Test:
2+
def main(args: Array[String]): Unit =
3+
val n = 1
4+
n match
5+
case m =>
6+
println(n + m)

0 commit comments

Comments
 (0)