aboutsummaryrefslogtreecommitdiff
path: root/sbt-bridge/src/sbt-test/source-dependencies/value-class/test
blob: 268274bf6a4a961f7e8426202db093d884e9e4f1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
## Case 1: value class as parameter of method
$ copy-file changes/A0.scala src/main/scala/A.scala
$ copy-file changes/B0.scala src/main/scala/B.scala
$ copy-file changes/C0.scala src/main/scala/C.scala

# A is a normal class. B.foo accepts a parameter of type A. C calls B.foo, giving it `null`.
> compile
> run

# Make A a value class.
$ copy-file changes/A1.scala src/main/scala/A.scala

# The code no longer compiles because B.foo no longer accepts `null` as an argument.
# This means that we have invalidated C.scala, as expected!
-> compile


## Case 2: value class as return type of method with no parameter lists
$ copy-file changes/A0.scala src/main/scala/A.scala
$ copy-file changes/B1.scala src/main/scala/B.scala
$ copy-file changes/C1.scala src/main/scala/C.scala

# A is a normal class. B.bar takes no arguments and returns an instance of A. C calls B.bar.
> compile
> run

# Make A a value class.
$ copy-file changes/A1.scala src/main/scala/A.scala

# The code compiles. It will run iff C is recompiled because the signature of B.bar has changed,
# because A is now a value class.
> run


## Case 3: value class as return type of method with multiple parameter lists
$ copy-file changes/A0.scala src/main/scala/A.scala
$ copy-file changes/B2.scala src/main/scala/B.scala
$ copy-file changes/C2.scala src/main/scala/C.scala

# A is a normal class. B.bar takes two dummy arguments and returns an instance of A. C calls B.bar("")("").
> compile
> run

# Make A a value class.
$ copy-file changes/A1.scala src/main/scala/A.scala

# The code compiles. It will run iff C is recompiled because the signature of B.bar has changed,
# because A is now a value class.
> run