/* * Copyright (c) 2023-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ enum Color { Green = "red" , Red = "blue", Blue = "green" } //let cons = new Console; function main(): void { try { let name = Color.Blue.getName(); let value:string = Color.getValueOf("Blue").toString(); assert(name == "Blue"); assert(value == "green"); //cons.print(name + " = " + value + c'\n'); } catch (e) { assert (e as Object).toString().startsWith("No enum constant Color.Blue"); } let x = Color.Red.valueOf(); assert x == "blue"; let blue = Color.Blue; let str = blue.getName(); //cons.print("Color.Blue = '" + str + "'\n"); assert "Blue" == str; assert blue.valueOf() == blue.toString() let values = Color.values(); assert values.length == 3; assert values[1] == Color.Red; assert values[0] == Color.Green; assert values[2] == Color.Blue; let red1: Color = Color.Red; let red2: Color = Color.Green; assert(red2 as int == 0) assert(red2.valueOf() == "red") assert(red2.getName() == "Green") assert(red2.toString() == "red") //cons.print("\nDefault ordinal = " + red2 as int + ", value = " + red2.valueOf() + ", name: '" + red2.getName() + "', ToString: '" + red2.toString() + "'\n\n") try { red2 = Color.getValueOf("Red"); } catch (e) { assert (e as Object).toString().startsWith("No enum constant Color.Red"); //cons.print(e.toString() + "\n"); } //cons.print( "GetName: Color.Red: '" + Color.Red.getName() + "', = Red: '" + red1.getName() + "', ValueOf(Red): '" + red2.getName() + "'\n") //cons.print( "GetValue: Color.Red = " + Color.Red.valueOf() + ", = Red = " + red1.valueOf() + ", getValueOf(Red) = " + red2.valueOf() + "\n") //cons.print( "Ordinal (as int): Color.Red = " + Color.Red as int + ", = Red = " + red1 as int + ", getValueOf(Red) = " + red2 as int + "\n") //cons.print( "ToString: Color.Red = '" + Color.Red.toString() + "', = Red = '" + red1.toString() + "', getValueOf(Red) = '" + red2.toString() + "'\n") assert(red1 as int == 1) assert(red1.valueOf() == "blue") assert(red1.getName() == "Red") assert(red1.toString() == "blue") assert(red2 as int == 1) assert(red2.valueOf() == "blue") assert(red2.getName() == "Red") assert(red2.toString() == "blue") assert(red1 == Color.Red); assert(red2 == Color.Red); assert(red2 == red1); let ord: int = 2; blue = ord as Color; assert(blue as int == 2) assert(blue.valueOf() == "green") assert(blue.getName() == "Blue") assert(blue.toString() == "green") try { let yellow: Color = Color.getValueOf("Yellow"); assert false; } catch (e: Exception) { assert (e as Object).toString().startsWith("No enum constant Color.Yellow"); } catch (e) {} ord = 0; let green: Color = ord as Color; //cons.print("Green = " + green as int + ", Color.Green = " + Color.Green as int + "\n") assert green == Color.Green; try { let x = 5 as Color; assert false; } catch (e: Exception) { assert (e as Object).toString().startsWith("No enum constant in Color with ordinal value 5"); } assert 2 as Color as int == 2; assert Color.Blue as int as Color == Color.Blue; assert (Color.Green as int + 1) as Color == (Color.Blue as int - 1) as Color; try { assert (Color.Green as int + 1) as Color == Color.getValueOf("Red"); } catch (e) { } }