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 = 2, Blue }
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 == "3");
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: int = Color.Red.valueOf();
32  assert x == 2;
33
34  let blue = Color.Blue;
35  let str = blue.getName();
36  //cons.print("Color.Blue = '" + str + "'\n");
37  assert "Blue" == str;
38
39  let values = Color.values();
40  assert values.length == 3;
41  assert values[1] == Color.Red;
42  assert values[0] == Color.Green;
43  assert values[2] == Color.Blue;
44
45  let red1: Color = Color.Red;
46  let red2: Color = Color.Green;
47  assert(red2 as int == 0)
48  assert(red2.valueOf() == 0)
49  assert(red2.getName() == "Green")
50  assert(red2.toString() == "0")
51  //cons.print("\nDefault ordinal = " + red2 as int + ", value = " + red2.valueOf() + ", name: '" + red2.getName() + "', ToString: '" + red2.toString() + "'\n\n")
52  
53  try {
54    red2 = Color.getValueOf("Red");
55  } catch (e) {
56    assert (e as Object).toString().startsWith("No enum constant Color.Red");
57    //cons.print(e.toString() + "\n");
58  }
59
60  //cons.print( "GetName: Color.Red: '" + Color.Red.getName() + "', = Red: '" + red1.getName() + "', ValueOf(Red): '" + red2.getName() + "'\n")
61  //cons.print( "GetValue: Color.Red = " + Color.Red.valueOf() + ", = Red = " + red1.valueOf() + ", ValueOf(Red) = " + red2.valueOf() + "\n")
62  //cons.print( "Ordinal (as int): Color.Red = " + Color.Red as int + ", = Red = " + red1 as int + ", ValueOf(Red) = " + red2 as int + "\n")
63  //cons.print( "ToString: Color.Red = '" + Color.Red.toString() + "', = Red = '" + red1.toString() + "', ValueOf(Red) = '" + red2.toString() + "'\n")
64
65  assert(red1 as int == 1)
66  assert(red1.valueOf() == 2)
67  assert(red1.getName() == "Red")
68  assert(red1.toString() == "2")
69
70  assert(red2 as int == 1)
71  assert(red2.valueOf() == 2)
72  assert(red2.getName() == "Red")
73  assert(red2.toString() == "2")
74
75  assert(red1 == Color.Red);
76  assert(red2 == Color.Red);
77  assert(red2 == red1);
78
79  let ord: int = 2;
80  blue = ord as Color;
81  assert(blue as int == 2)
82  assert(blue.valueOf() == 3)
83  assert(blue.getName() == "Blue")
84  assert(blue.toString() == "3")
85
86  try {
87    let yellow: Color = Color.getValueOf("Yellow");
88    assert false;
89  } catch (e: Exception) {
90    assert (e as Object).toString().startsWith("No enum constant Color.Yellow");
91  } catch (e) {}
92
93  ord = 0;
94  let green: Color = ord as Color;
95  //cons.print("Green = " + green as int + ", Color.Green = " + Color.Green as int + "\n")
96  assert green == Color.Green;
97
98  try {
99    let x = 5 as Color;
100    assert false;
101  } catch (e: Exception) {
102    assert (e as Object).toString().startsWith("No enum constant in Color with ordinal value 5");
103  }
104
105  assert 2 as Color as int == 2;
106  assert Color.Blue as int as Color == Color.Blue;
107  assert (Color.Green as int + 1) as Color == (Color.Blue as int - 1) as Color;
108  try {
109    assert (Color.Green as int + 1) as Color == Color.getValueOf("Red");
110  } catch (e) {
111  }
112}
113