Skip to content

Commit 07de522

Browse files
committed
add pattern match to scala.js enum test
1 parent f0395c8 commit 07de522

File tree

1 file changed

+96
-50
lines changed

1 file changed

+96
-50
lines changed

tests/sjs-junit/test/org/scalajs/testsuite/compiler/EnumTestScala3.scala

Lines changed: 96 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,23 @@ package org.scalajs.testsuite.compiler
33
import org.junit.Assert._
44
import org.junit.Test
55

6-
object EnumTestScala3:
6+
class EnumTestScala3:
7+
import EnumTestScala3._
78

8-
enum Color1 derives Eql:
9-
case Red, Green, Blue
9+
@Test def testColor1(): Unit =
10+
import EnumTestScala3.{Color1 => Color}
1011

11-
enum Color2 extends java.lang.Enum[Color2] derives Eql:
12-
case Red, Green, Blue
12+
def code(c: Color): Character = c match
13+
case Color.Red => 'R'
14+
case Color.Green => 'G'
15+
case Color.Blue => 'B'
1316

14-
def color1(): Unit =
15-
import EnumTestScala3.{Color1 => Color}
1617
assert(Color.Red.ordinal == 0)
1718
assert(Color.Green.ordinal == 1)
1819
assert(Color.Blue.ordinal == 2)
19-
assert(Color.Red.enumLabel == "Red")
20-
assert(Color.Green.enumLabel == "Green")
21-
assert(Color.Blue.enumLabel == "Blue")
20+
assert(Color.Red.productPrefix == "Red")
21+
assert(Color.Green.productPrefix == "Green")
22+
assert(Color.Blue.productPrefix == "Blue")
2223
assert(Color.valueOf("Red") == Color.Red)
2324
assert(Color.valueOf("Green") == Color.Green)
2425
assert(Color.valueOf("Blue") == Color.Blue)
@@ -27,16 +28,26 @@ object EnumTestScala3:
2728
assert(Color.values(0) == Color.Red)
2829
assert(Color.values(1) == Color.Green)
2930
assert(Color.values(2) == Color.Blue)
30-
end color1
31+
assert(code(Color.Red) == 'R')
32+
assert(code(Color.Green) == 'G')
33+
assert(code(Color.Blue) == 'B')
34+
35+
end testColor1
3136

32-
def color2(): Unit = // copied from `color1`
37+
@Test def testColor2(): Unit = // copied from `color1`
3338
import EnumTestScala3.{Color2 => Color}
39+
40+
def code(c: Color): Character = c match
41+
case Color.Red => 'R'
42+
case Color.Green => 'G'
43+
case Color.Blue => 'B'
44+
3445
assert(Color.Red.ordinal == 0)
3546
assert(Color.Green.ordinal == 1)
3647
assert(Color.Blue.ordinal == 2)
37-
assert(Color.Red.enumLabel == "Red")
38-
assert(Color.Green.enumLabel == "Green")
39-
assert(Color.Blue.enumLabel == "Blue")
48+
assert(Color.Red.productPrefix == "Red")
49+
assert(Color.Green.productPrefix == "Green")
50+
assert(Color.Blue.productPrefix == "Blue")
4051
assert(Color.valueOf("Red") == Color.Red)
4152
assert(Color.valueOf("Green") == Color.Green)
4253
assert(Color.valueOf("Blue") == Color.Blue)
@@ -45,27 +56,26 @@ object EnumTestScala3:
4556
assert(Color.values(0) == Color.Red)
4657
assert(Color.values(1) == Color.Green)
4758
assert(Color.values(2) == Color.Blue)
48-
end color2
49-
50-
// test "non-simple" cases with anonymous subclasses
51-
enum Currency1(val dollarValue: Double) derives Eql:
52-
case Dollar extends Currency1(1.0)
53-
case SwissFanc extends Currency1(1.09)
54-
case Euro extends Currency1(1.18)
59+
assert(code(Color.Red) == 'R')
60+
assert(code(Color.Green) == 'G')
61+
assert(code(Color.Blue) == 'B')
5562

56-
enum Currency2(val dollarValue: Double) extends java.lang.Enum[Currency2] derives Eql:
57-
case Dollar extends Currency2(1.0)
58-
case SwissFanc extends Currency2(1.09)
59-
case Euro extends Currency2(1.18)
63+
end testColor2
6064

61-
def currency1(): Unit =
65+
@Test def testCurrency1(): Unit =
6266
import EnumTestScala3.{Currency1 => Currency}
67+
68+
def code(c: Currency): String = c match
69+
case Currency.Dollar => "USD"
70+
case Currency.SwissFanc => "CHF"
71+
case Currency.Euro => "EUR"
72+
6373
assert(Currency.Dollar.ordinal == 0)
6474
assert(Currency.SwissFanc.ordinal == 1)
6575
assert(Currency.Euro.ordinal == 2)
66-
assert(Currency.Dollar.enumLabel == "Dollar")
67-
assert(Currency.SwissFanc.enumLabel == "SwissFanc")
68-
assert(Currency.Euro.enumLabel == "Euro")
76+
assert(Currency.Dollar.productPrefix == "Dollar")
77+
assert(Currency.SwissFanc.productPrefix == "SwissFanc")
78+
assert(Currency.Euro.productPrefix == "Euro")
6979
assert(Currency.valueOf("Dollar") == Currency.Dollar)
7080
assert(Currency.valueOf("SwissFanc") == Currency.SwissFanc)
7181
assert(Currency.valueOf("Euro") == Currency.Euro)
@@ -77,16 +87,27 @@ object EnumTestScala3:
7787
assert(Currency.Dollar.dollarValue == 1.00)
7888
assert(Currency.SwissFanc.dollarValue == 1.09)
7989
assert(Currency.Euro.dollarValue == 1.18)
80-
end currency1
90+
assert(code(Currency.Dollar) == "USD")
91+
assert(code(Currency.SwissFanc) == "CHF")
92+
assert(code(Currency.Euro) == "EUR")
93+
8194

82-
def currency2(): Unit = // copied from `currency1`
95+
end testCurrency1
96+
97+
@Test def testCurrency2(): Unit = // copied from `testCurrency1`
8398
import EnumTestScala3.{Currency2 => Currency}
99+
100+
def code(c: Currency): String = c match
101+
case Currency.Dollar => "USD"
102+
case Currency.SwissFanc => "CHF"
103+
case Currency.Euro => "EUR"
104+
84105
assert(Currency.Dollar.ordinal == 0)
85106
assert(Currency.SwissFanc.ordinal == 1)
86107
assert(Currency.Euro.ordinal == 2)
87-
assert(Currency.Dollar.enumLabel == "Dollar")
88-
assert(Currency.SwissFanc.enumLabel == "SwissFanc")
89-
assert(Currency.Euro.enumLabel == "Euro")
108+
assert(Currency.Dollar.productPrefix == "Dollar")
109+
assert(Currency.SwissFanc.productPrefix == "SwissFanc")
110+
assert(Currency.Euro.productPrefix == "Euro")
90111
assert(Currency.valueOf("Dollar") == Currency.Dollar)
91112
assert(Currency.valueOf("SwissFanc") == Currency.SwissFanc)
92113
assert(Currency.valueOf("Euro") == Currency.Euro)
@@ -98,26 +119,51 @@ object EnumTestScala3:
98119
assert(Currency.Dollar.dollarValue == 1.00)
99120
assert(Currency.SwissFanc.dollarValue == 1.09)
100121
assert(Currency.Euro.dollarValue == 1.18)
101-
end currency2
122+
assert(code(Currency.Dollar) == "USD")
123+
assert(code(Currency.SwissFanc) == "CHF")
124+
assert(code(Currency.Euro) == "EUR")
102125

103-
enum Opt[+T]:
104-
case Sm[+T1](value: T1) extends Opt[T1]
105-
case Nn extends Opt[Nothing]
126+
end testCurrency2
127+
128+
@Test def testOpt(): Unit =
129+
130+
def encode[T <: AnyVal](t: Opt[T]): T | Null = t match
131+
case Opt.Sm(t) => t
132+
case Opt.Nn => null
106133

107-
def opt(): Unit =
108134
assert(Opt.Sm(1).ordinal == 0)
109135
assert(Opt.Nn.ordinal == 1)
110-
assert(Opt.Sm(1).enumLabel == "Sm")
111-
assert(Opt.Nn.enumLabel == "Nn")
136+
assert(Opt.Sm(1).productPrefix == "Sm")
137+
assert(Opt.Nn.productPrefix == "Nn")
112138
assert(Opt.valueOf("Nn") == Opt.Nn)
113139
assert(Opt.values(0) == Opt.Nn)
114140
assert(Opt.Sm("hello").value == "hello")
115-
end opt
141+
assert(encode(Opt.Sm(23)) == 23)
142+
assert(encode(Opt.Nn) == null)
116143

117-
class EnumTestScala3:
118-
import EnumTestScala3._
119-
@Test def testColor1(): Unit = color1()
120-
@Test def testColor2(): Unit = color2()
121-
@Test def testCurrency1(): Unit = currency1()
122-
@Test def testCurrency2(): Unit = currency2()
123-
@Test def testOpt(): Unit = opt()
144+
end testOpt
145+
146+
object EnumTestScala3:
147+
148+
enum Color1 derives Eql:
149+
case Red, Green, Blue
150+
151+
enum Color2 extends java.lang.Enum[Color2] derives Eql:
152+
case Red, Green, Blue
153+
154+
// test "non-simple" cases with anonymous subclasses
155+
enum Currency1(val dollarValue: Double) derives Eql:
156+
case Dollar extends Currency1(1.0)
157+
case SwissFanc extends Currency1(1.09)
158+
case Euro extends Currency1(1.18)
159+
160+
enum Currency2(val dollarValue: Double) extends java.lang.Enum[Currency2] derives Eql:
161+
case Dollar extends Currency2(1.0)
162+
case SwissFanc extends Currency2(1.09)
163+
case Euro extends Currency2(1.18)
164+
165+
enum Opt[+T]:
166+
case Sm[+T1](value: T1) extends Opt[T1]
167+
case Nn extends Opt[Nothing]
168+
169+
end EnumTestScala3

0 commit comments

Comments
 (0)