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  }