1package zint 2 3import ( 4 "encoding" 5 "encoding/json" 6 "fmt" 7 "testing" 8) 9 10var ( 11 _ encoding.TextUnmarshaler = new(Bitflag8) 12 _ json.Unmarshaler = new(Bitflag8) 13) 14 15func TestBitflag(t *testing.T) { 16 const ( 17 Foo Bitflag8 = 1 << iota 18 Bar 19 FooBar 20 ) 21 22 var d Bitflag8 23 test := func(want string) { 24 got := fmt.Sprint(d.Has(Foo), d.Has(Bar), d.Has(FooBar)) 25 if got != want { 26 t.Errorf("\ngot: %s\nwant: %s", got, want) 27 } 28 } 29 30 test("false false false") 31 32 d.Set(Foo) 33 d.Toggle(FooBar) 34 test("true false true") 35 36 d.Clear(FooBar) 37 test("true false false") 38 39 t.Run("json", func(t *testing.T) { 40 f := Foo | Bar 41 j, err := json.Marshal(f) 42 if err != nil { 43 t.Fatal(err) 44 } 45 if string(j) != "3" { 46 t.Errorf(string(j)) 47 } 48 49 var nf Bitflag8 50 err = json.Unmarshal(j, &nf) 51 if err != nil { 52 t.Fatal(err) 53 } 54 55 if uint8(nf) != 3 { 56 t.Error(nf) 57 } 58 }) 59} 60