@@ -24,43 +24,80 @@ enum EC: // control case
2424 case F
2525 case G (arg : Int )
2626
27+ enum EO :
28+ case H
29+ case I (arg : Int )
30+ // TODO: allow `productPrefix` to be overridden in singleton enum values - until `scala.Enum` is bootstrapped with
31+ // `enumLabel`, `runtime.EnumValues` uses `productPrefix` for by-name lookup.
32+ override def productPrefix : String = " noprefix"
33+ end EO
34+
35+ enum EL {
36+ case J
37+ case K (arg : Int )
38+ override def enumLabel : String = " nolabel" // will always be overridden by simple cases
39+ }
40+
41+ enum EQ [T ] {
42+ case L extends EQ [Int ]
43+ override def enumLabel : String = " nolabel" // will always be overridden by value cases
44+ }
45+
2746abstract class Tag [T ] extends Enum
2847object Tag :
2948 private final class IntTagImpl extends Tag [Int ] with runtime.EnumValue :
3049 def ordinal = 0
50+ def enumLabel = " IntTag"
3151 override def hashCode = 123
3252 final val IntTag : Tag [Int ] = IntTagImpl ()
3353
3454@ main def Test =
35- assert(ES .A .toString == " overridden" , s " ES.A.toString = ${ES .A .toString}" )
36- assert(ES .A .productPrefix == " A" , s " ES.A.productPrefix = ${ES .A .productPrefix}" )
37- assert(ES .A .enumLabel == " A" , s " ES.A.enumLabel = ${ES .A .enumLabel}" )
38- assert(ES .valueOf(" A" ) == ES .A , s " ES.valueOf(A) = ${ES .valueOf(" A" )}" )
39- assert(EJ .B .toString == " overridden" , s " EJ.B.toString = ${EJ .B .toString}" )
40- assert(EJ .B .productPrefix == " B" , s " EJ.B.productPrefix = ${EJ .B .productPrefix}" )
41- assert(EJ .B .enumLabel == " B" , s " EJ.B.enumLabel = ${EJ .B .enumLabel}" )
42- assert(EJ .valueOf(" B" ) == EJ .B , s " EJ.valueOf(B) = ${EJ .valueOf(" B" )}" )
43- assert(EM .C .toString == " overridden" , s " EM.C.toString = ${EM .C .toString}" )
44- assert(EM .C .productPrefix == " C" , s " EM.C.productPrefix = ${EM .C .productPrefix}" )
45- assert(EM .C .enumLabel == " C" , s " EM.C.enumLabel = ${EM .C .enumLabel}" )
46- assert(EM .valueOf(" C" ) == EM .C , s " EM.valueOf(C) = ${EM .valueOf(" C" )}" )
47- assert(ET .D .toString == " overridden" , s " ET.D.toString = ${ET .D .toString}" )
48- assert(ET .D .productPrefix == " D" , s " ET.D.productPrefix = ${ET .D .productPrefix}" )
49- assert(ET .D .enumLabel == " D" , s " ET.D.enumLabel = ${ET .D .enumLabel}" )
50- assert(EZ .E (0 ).toString == " overridden" , s " EZ.E(0).toString = ${EZ .E (0 ).toString}" )
51- assert(EZ .E (0 ).productPrefix == " E" , s " EZ.E(0).productPrefix = ${EZ .E (0 ).productPrefix}" )
52- assert(EZ .E (0 ).enumLabel == " E" , s " EZ.E(0).enumLabel = ${EZ .E (0 ).enumLabel}" )
53- assert(EC .F .toString == " F" , s " EC.F.toString = ${EC .F .toString}" )
54- assert(EC .F .productPrefix == " F" , s " EC.F.productPrefix = ${EC .F .productPrefix}" )
55- assert(EC .F .enumLabel == " F" , s " EC.F.enumLabel = ${EC .F .enumLabel}" )
56- assert(EC .valueOf(" F" ) == EC .F , s " EC.valueOf(F) = ${EC .valueOf(" F" )}" )
57- assert(EC .G (0 ).toString == " G(0)" , s " EC.G(0).toString = ${EC .G (0 ).toString}" )
58- assert(EC .G (0 ).productPrefix == " G" , s " EC.G(0).productPrefix = ${EC .G (0 ).productPrefix}" )
59- assert(EC .G (0 ).enumLabel == " G" , s " EC.G(0).enumLabel = ${EC .G (0 ).enumLabel}" )
55+ assert(ES .A .toString == " overridden" , s " ES.A.toString = ${ES .A .toString}" )
56+ assert(ES .A .productPrefix == " A" , s " ES.A.productPrefix = ${ES .A .productPrefix}" )
57+ assert(ES .A .enumLabel == " A" , s " ES.A.enumLabel = ${ES .A .enumLabel}" )
58+ assert(ES .valueOf(" A" ) == ES .A , s " ES.valueOf(A) = ${ES .valueOf(" A" )}" )
59+ assert(EJ .B .toString == " overridden" , s " EJ.B.toString = ${EJ .B .toString}" )
60+ assert(EJ .B .productPrefix == " B" , s " EJ.B.productPrefix = ${EJ .B .productPrefix}" )
61+ assert(EJ .B .enumLabel == " B" , s " EJ.B.enumLabel = ${EJ .B .enumLabel}" )
62+ assert(EJ .valueOf(" B" ) == EJ .B , s " EJ.valueOf(B) = ${EJ .valueOf(" B" )}" )
63+ assert(EM .C .toString == " overridden" , s " EM.C.toString = ${EM .C .toString}" )
64+ assert(EM .C .productPrefix == " C" , s " EM.C.productPrefix = ${EM .C .productPrefix}" )
65+ assert(EM .C .enumLabel == " C" , s " EM.C.enumLabel = ${EM .C .enumLabel}" )
66+ assert(EM .valueOf(" C" ) == EM .C , s " EM.valueOf(C) = ${EM .valueOf(" C" )}" )
67+ assert(ET .D .toString == " overridden" , s " ET.D.toString = ${ET .D .toString}" )
68+ assert(ET .D .productPrefix == " D" , s " ET.D.productPrefix = ${ET .D .productPrefix}" )
69+ assert(ET .D .enumLabel == " D" , s " ET.D.enumLabel = ${ET .D .enumLabel}" )
70+ assert(EZ .E (0 ).toString == " overridden" , s " EZ.E(0).toString = ${EZ .E (0 ).toString}" )
71+ assert(EZ .E (0 ).productPrefix == " E" , s " EZ.E(0).productPrefix = ${EZ .E (0 ).productPrefix}" )
72+ assert(EZ .E (0 ).enumLabel == " E" , s " EZ.E(0).enumLabel = ${EZ .E (0 ).enumLabel}" )
73+ assert(EC .F .toString == " F" , s " EC.F.toString = ${EC .F .toString}" )
74+ assert(EC .F .productPrefix == " F" , s " EC.F.productPrefix = ${EC .F .productPrefix}" )
75+ assert(EC .F .enumLabel == " F" , s " EC.F.enumLabel = ${EC .F .enumLabel}" )
76+ assert(EC .valueOf(" F" ) == EC .F , s " EC.valueOf(F) = ${EC .valueOf(" F" )}" )
77+ assert(EC .G (0 ).toString == " G(0)" , s " EC.G(0).toString = ${EC .G (0 ).toString}" )
78+ assert(EC .G (0 ).productPrefix == " G" , s " EC.G(0).productPrefix = ${EC .G (0 ).productPrefix}" )
79+ assert(EC .G (0 ).enumLabel == " G" , s " EC.G(0).enumLabel = ${EC .G (0 ).enumLabel}" )
80+ assert(EO .H .toString == " H" , s " EO.H.toString = ${EO .H .toString}" )
81+ assert(EO .H .productPrefix == " H" , s " EO.H.productPrefix = ${EO .H .productPrefix}" ) // TODO: enable override
82+ assert(EO .H .enumLabel == " H" , s " EO.H.enumLabel = ${EO .H .enumLabel}" )
83+ assert(EO .valueOf(" H" ) == EO .H , s " EO.valueOf(H) = ${EO .valueOf(" H" )}" )
84+ assert(EO .I (0 ).toString == " noprefix(0)" , s " EO.I(0).toString = ${EO .I (0 ).toString}" )
85+ assert(EO .I (0 ).productPrefix == " noprefix" , s " EO.I(0).productPrefix = ${EO .I (0 ).productPrefix}" )
86+ assert(EO .I (0 ).enumLabel == " I" , s " EO.I(0).enumLabel = ${EO .I (0 ).enumLabel}" )
87+ assert(EL .J .toString == " J" , s " EL.J.toString = ${EL .J .toString}" )
88+ assert(EL .J .productPrefix == " J" , s " EL.J.productPrefix = ${EL .J .productPrefix}" )
89+ assert(EL .J .enumLabel == " J" , s " EL.J.enumLabel = ${EL .J .enumLabel}" ) // can't override label in simple case
90+ assert(EL .valueOf(" J" ) == EL .J , s " EL.valueOf(J) = ${EL .valueOf(" J" )}" )
91+ assert(EL .K (0 ).toString == " K(0)" , s " EL.K(0).toString = ${EL .K (0 ).toString}" )
92+ assert(EL .K (0 ).productPrefix == " K" , s " EL.K(0).productPrefix = ${EL .K (0 ).productPrefix}" )
93+ assert(EL .K (0 ).enumLabel == " nolabel" , s " EL.K(0).enumLabel = ${EL .K (0 ).enumLabel}" ) // enum label overridden in class case
94+ assert(EQ .L .toString == " L" , s " EQ.L.toString = ${EQ .L .toString}" )
95+ assert(EQ .L .productPrefix == " L" , s " EQ.L.productPrefix = ${EQ .L .productPrefix}" )
96+ assert(EQ .L .enumLabel == " L" , s " EQ.L.enumLabel = ${EQ .L .enumLabel}" ) // can't override label in value case
6097
6198 assert(
6299 assertion = Tag .IntTag .toString == s " ${Tag .IntTag .getClass.getName}@ ${Integer .toHexString(123 )}" ,
63100 message = s " Tag.IntTag.toString = ${Tag .IntTag .toString}"
64101 )
65102 assert(Tag .IntTag .productPrefix == Tag .IntTag .toString, s " Tag.IntTag.productPrefix = ${Tag .IntTag .productPrefix}" )
66- assert(Tag .IntTag .enumLabel == Tag . IntTag .toString , s " Tag.IntTag.enumLabel = ${Tag .IntTag .enumLabel}" )
103+ assert(Tag .IntTag .enumLabel == " IntTag" , s " Tag.IntTag.enumLabel = ${Tag .IntTag .enumLabel}" )
0 commit comments