github.com/goki/ki@v1.1.11/kit/enums_test.go (about) 1 // Copyright (c) 2018, The GoKi Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package kit 6 7 import ( 8 "encoding/json" 9 "reflect" 10 "testing" 11 12 "github.com/goki/ki/bitflag" 13 ) 14 15 func TestEnums(t *testing.T) { 16 17 et := TestFlag1 18 19 i := EnumIfaceToInt64(et) 20 if i != int64(et) { 21 t.Errorf("EnumIfaceToInt64 failed %v != %v", i, int64(et)) 22 } 23 24 err := SetEnumIfaceFromInt64(&et, 2, KiT_TestFlags) 25 if err != nil { 26 t.Errorf("%v", err) 27 } 28 if et != TestFlag2 { 29 t.Errorf("SetEnumIfaceFromInt64 failed %v != %v", et, TestFlag2) 30 } 31 32 ei := EnumIfaceFromInt64(1, KiT_TestFlags) 33 if ei == nil { 34 t.Errorf("EnumIfaceFromInt64 nil: %v", ei) 35 } 36 eiv, ok := ToInt(ei) 37 if !ok { 38 t.Errorf("EnumIfaceFromInt64 ToInt failed\n") 39 } 40 if eiv != int64(TestFlag1) { 41 t.Errorf("EnumIfaceFromInt64 failed %v != %v", eiv, TestFlag1) 42 } 43 eit := ei.(TestFlags) 44 if eit != TestFlag1 { 45 t.Errorf("EnumIfaceFromInt64 failed %v != %v", eit, TestFlag1) 46 } 47 48 es := EnumInt64ToString(2, KiT_TestFlags) 49 if es != "TestFlag2" { 50 t.Errorf("EnumInt64ToString failed %v != %v", es, TestFlag1) 51 } 52 53 et = TestFlag2 54 es = EnumIfaceToString(et) 55 if es != "TestFlag2" { 56 t.Errorf("EnumIfaceToString failed %v != %v", es, TestFlag2) 57 } 58 59 es = Enums.EnumIfaceToAltString(et) 60 if es != "flag2" { 61 t.Errorf("EnumToAltString failed %v != %v", es, "flag2") 62 } 63 64 err = SetEnumValueFromString(reflect.ValueOf(&et), "TestFlag1") 65 if err != nil { 66 t.Errorf("%v", err) 67 } 68 if et != TestFlag1 { 69 t.Errorf("SetEnumValueFromString failed %v != %v", et, TestFlag1) 70 } 71 72 err = Enums.SetEnumValueFromAltString(reflect.ValueOf(&et), "flag2") 73 if err != nil { 74 t.Errorf("%v", err) 75 } 76 if et != TestFlag2 { 77 t.Errorf("SetEnumValueFromAltString failed %v != %v", et, TestFlag2) 78 } 79 80 err = Enums.SetEnumValueFromStringAltFirst(reflect.ValueOf(&et), "flag1") 81 if err != nil { 82 t.Errorf("%v", err) 83 } 84 if et != TestFlag1 { 85 t.Errorf("SetEnumValueFromStringAltFirst failed %v != %v", et, TestFlag1) 86 } 87 88 err = Enums.SetEnumValueFromStringAltFirst(reflect.ValueOf(&et), "TestFlag2") 89 if err != nil { 90 t.Errorf("%v", err) 91 } 92 if et != TestFlag2 { 93 t.Errorf("SetEnumValueFromStringAltFirst failed %v != %v", et, TestFlag2) 94 } 95 96 err = SetEnumValueFromInt64(reflect.ValueOf(&et), 1) 97 if err != nil { 98 t.Errorf("%v", err) 99 } 100 if et != TestFlag1 { 101 t.Errorf("SetEnumValueFromInt64 failed %v != %v", et, TestFlag1) 102 } 103 104 bf := int64(0) 105 bitflag.Set(&bf, int(TestFlag1), int(TestFlag2)) 106 es = BitFlagsToString(bf, TestFlagsN) 107 if es != "TestFlag1|TestFlag2" { 108 t.Errorf("BitFlagsToString failed %v != %v", es, "TestFlag1|TestFlag2") 109 } 110 111 bf2 := int64(0) 112 err = BitFlagsFromString(&bf2, es, TestFlagsN) 113 if err != nil { 114 t.Errorf("%v", err) 115 } 116 es2 := BitFlagsToString(bf2, TestFlagsN) 117 if es2 != "TestFlag1|TestFlag2" { 118 t.Errorf("BitFlagsFromString failed %v != %v", es, "TestFlag1|TestFlag2") 119 } 120 121 } 122 123 func TestEnumJSON(t *testing.T) { 124 125 et := TestFlag1 126 127 b, err := json.Marshal(et) 128 129 if err != nil { 130 t.Errorf("%v", err) 131 } 132 133 // fmt.Println(string(b)) 134 135 et = TestFlag2 136 err = json.Unmarshal(b, &et) 137 138 if err != nil { 139 t.Errorf("%v", err) 140 } 141 142 if et != TestFlag1 { 143 t.Errorf("EnumJSON error, saved as: %v after loading value should be TestFlag1, is: %v\n", string(b), et) 144 } 145 }