diff --git a/assertpy/assertpy.py b/assertpy/assertpy.py index 51df162..019d951 100644 --- a/assertpy/assertpy.py +++ b/assertpy/assertpy.py @@ -685,6 +685,17 @@ def does_not_contain_entry(self, *entries): self._err('Expected <%s> to not contain entry %s, but did.' % (self.val, e)) return self +### set assertions ### + def is_subset_of(self, superset): + """Asserts that val is a set and its items are contained within the set, 'superset'""" + if not isinstance(self.val, (set, frozenset)): + raise TypeError('val is not a set/frozenset') + if not isinstance(superset, (set, frozenset)): + raise TypeError('argument is not a set/frozenset') + if not self.val.issubset(superset): + self._err('Expected <%s> to be a subset of <%s>, but was not.' % (self.val, superset)) + return self + ### datetime assertions ### def is_before(self, other): """Asserts that val is a date and is before other date.""" diff --git a/tests/test_set.py b/tests/test_set.py new file mode 100644 index 0000000..bcc1be0 --- /dev/null +++ b/tests/test_set.py @@ -0,0 +1,38 @@ +from assertpy import assert_that,fail + +class TestSet(object): + + def test_val_type_error(self): + try: + assert_that(1).is_subset_of(set([1,2])) + fail('should have raised TypeError') + except TypeError: + pass + + def test_arg_type_error(self): + try: + assert_that(set([])).is_subset_of(None) + fail('should have raised TypeError') + except TypeError: + pass + + def test_val_edge_case(self): + assert_that(set()).is_subset_of(set([1,2,3])) + + def test_arg_edge_case(self): + try: + assert_that(set([1,2,3])).is_subset_of(set()) + fail('should have raised error') + except AssertionError as ex: + assert_that(str(ex)).is_equal_to('Expected <%s> to be a subset of <%s>, but was not.' % (set([1,2,3]), set())) + + def test_positive_normal_case(self): + assert_that(set([1])).is_subset_of(set([1,2,3])) + + def test_negative_normal_case(self): + try: + assert_that(set([1,2,3])).is_subset_of(set([1])) + fail('should have raised error') + except AssertionError as ex: + assert_that(str(ex)).is_equal_to('Expected <%s> to be a subset of <%s>, but was not.' % (set([1,2,3]), set([1]))) +