1/*
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16enum Color { Green = "red" , Red = "blue", Blue = "green" }
17//let cons = new Console; 
18
19function main(): void {
20
21  try {
22    let name = Color.Blue.getName();
23    let value:string = Color.getValueOf("Blue").toString();
24    assert(name == "Blue");
25    assert(value == "green");
26    //cons.print(name + " = " + value + c'\n');
27  } catch (e) {
28    assert (e as Object).toString().startsWith("No enum constant Color.Blue");
29  }
30
31  let x = Color.Red.valueOf();
32  assert x == "blue";
33
34  let blue = Color.Blue;
35  let str = blue.getName();
36  //cons.print("Color.Blue = '" + str + "'\n");
37  assert "Blue" == str;
38  assert blue.valueOf() == blue.toString()
39
40  let values = Color.values();
41  assert values.length == 3;
42  assert values[1] == Color.Red;
43  assert values[0] == Color.Green;
44  assert values[2] == Color.Blue;
45
46  let red1: Color = Color.Red;
47  let red2: Color = Color.Green;
48  assert(red2 as int == 0)
49  assert(red2.valueOf() == "red")
50  assert(red2.getName() == "Green")
51  assert(red2.toString() == "red")
52  //cons.print("\nDefault ordinal = " + red2 as int + ", value = " + red2.valueOf() + ", name: '" + red2.getName() + "', ToString: '" + red2.toString() + "'\n\n")
53  
54  try {
55    red2 = Color.getValueOf("Red");
56  } catch (e) {
57    assert (e as Object).toString().startsWith("No enum constant Color.Red");
58    //cons.print(e.toString() + "\n");
59  }
60
61  //cons.print( "GetName: Color.Red: '" + Color.Red.getName() + "', = Red: '" + red1.getName() + "', ValueOf(Red): '" + red2.getName() + "'\n")
62  //cons.print( "GetValue: Color.Red = " + Color.Red.valueOf() + ", = Red = " + red1.valueOf() + ", getValueOf(Red) = " + red2.valueOf() + "\n")
63  //cons.print( "Ordinal (as int): Color.Red = " + Color.Red as int + ", = Red = " + red1 as int + ", getValueOf(Red) = " + red2 as int + "\n")
64  //cons.print( "ToString: Color.Red = '" + Color.Red.toString() + "', = Red = '" + red1.toString() + "', getValueOf(Red) = '" + red2.toString() + "'\n")
65
66  assert(red1 as int == 1)
67  assert(red1.valueOf() == "blue")
68  assert(red1.getName() == "Red")
69  assert(red1.toString() == "blue")
70
71  assert(red2 as int == 1)
72  assert(red2.valueOf() == "blue")
73  assert(red2.getName() == "Red")
74  assert(red2.toString() == "blue")
75
76  assert(red1 == Color.Red);
77  assert(red2 == Color.Red);
78  assert(red2 == red1);
79
80  let ord: int = 2;
81  blue = ord as Color;
82  assert(blue as int == 2)
83  assert(blue.valueOf() == "green")
84  assert(blue.getName() == "Blue")
85  assert(blue.toString() == "green")
86
87  try {
88    let yellow: Color = Color.getValueOf("Yellow");
89    assert false;
90  } catch (e: Exception) {
91    assert (e as Object).toString().startsWith("No enum constant Color.Yellow");
92  } catch (e) {}
93
94  ord = 0;
95  let green: Color = ord as Color;
96  //cons.print("Green = " + green as int + ", Color.Green = " + Color.Green as int + "\n")
97  assert green == Color.Green;
98
99  try {
100    let x = 5 as Color;
101    assert false;
102  } catch (e: Exception) {
103    assert (e as Object).toString().startsWith("No enum constant in Color with ordinal value 5");
104  }
105
106  assert 2 as Color as int == 2;
107  assert Color.Blue as int as Color == Color.Blue;
108  assert (Color.Green as int + 1) as Color == (Color.Blue as int - 1) as Color;
109  try {
110    assert (Color.Green as int + 1) as Color == Color.getValueOf("Red");
111  } catch (e) {
112  }
113}
114