diff --git a/v2/types.go b/v2/types.go index d5814db..45335e5 100644 --- a/v2/types.go +++ b/v2/types.go @@ -389,6 +389,27 @@ func (p *Permissions) Validate(vr *ValidationResults) { // StringList is a wrapper for an array of strings type StringList []string +func (u *StringList) Equals(other *StringList) bool { + if len(*u) != len(*other) { + return false + } + for _, v := range *u { + if other.find(v) == -1 { + return false + } + } + return true +} + +func (u *StringList) find(p string) int { + for idx, t := range *u { + if p == t { + return idx + } + } + return -1 +} + // Contains returns true if the list contains the string func (u *StringList) Contains(p string) bool { for _, t := range *u { diff --git a/v2/types_test.go b/v2/types_test.go index 34d1fa4..7b6edf8 100644 --- a/v2/types_test.go +++ b/v2/types_test.go @@ -163,6 +163,19 @@ func TestStringList(t *testing.T) { AssertEquals(true, slist.Contains("ONE"), t) } +func TestStringListEquals(t *testing.T) { + a := &StringList{"a", "B", "c"} + b := &StringList{"a", "B", "c"} + AssertTrue(a.Equals(b), t) + + a = &StringList{"a", "B", "c"} + b = &StringList{"a", "b", "c"} + AssertFalse(a.Equals(b), t) + + AssertEquals(a.find("b"), -1, t) + AssertEquals(a.find("B"), 1, t) +} + func TestSubjectValid(t *testing.T) { var s Subject