From d3a81f9613b2601775c3d23c2a9765c605b01ef5 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Mon, 16 Jul 2018 00:08:23 +0000 Subject: [PATCH] massert: implement HasKey --- mtest/massert/massert.go | 18 ++++++++++++++++++ mtest/massert/massert_test.go | 15 +++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/mtest/massert/massert.go b/mtest/massert/massert.go index f4ac1b7..7b94619 100644 --- a/mtest/massert/massert.go +++ b/mtest/massert/massert.go @@ -375,3 +375,21 @@ func Has(set, elem interface{}) Assertion { return errors.New("value not in set") }, toStr(set)+" has value "+toStr(elem), 0) } + +// HasKey asserts that the given set (which must be a map type) has the given +// element as a key in it. +func HasKey(set, elem interface{}) Assertion { + return newAssertion(func() error { + v := reflect.ValueOf(set) + if v.Kind() != reflect.Map { + return fmt.Errorf("type %s is not a map", v.Type()) + } + + for _, key := range v.MapKeys() { + if reflect.DeepEqual(key.Interface(), elem) { + return nil + } + } + return errors.New("value not a key in the map") + }, toStr(set)+" has key "+toStr(elem), 0) +} diff --git a/mtest/massert/massert_test.go b/mtest/massert/massert_test.go index 4534a91..703b62d 100644 --- a/mtest/massert/massert_test.go +++ b/mtest/massert/massert_test.go @@ -157,3 +157,18 @@ func TestHas(t *T) { Has(map[int]int{1: 2, 2: 1}, 3), )) } + +func TestHasKey(t *T) { + Fatal(t, All( + HasKey(map[int]int{1: 1}, 1), + HasKey(map[int]int{1: 1, 2: 2}, 1), + HasKey(map[int]int{1: 1, 2: 2}, 2), + )) + + Fatal(t, None( + HasKey([]int{}, 1), + HasKey([]int{1}, 1), + HasKey(map[int]int{}, 1), + HasKey(map[int]int{2: 2}, 1), + )) +}