From 2a7b7da5de652babfc4dfad5f77690ff25d2fe4a Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 4 Apr 2016 10:15:25 -0500 Subject: [PATCH 1/2] added is_subset_of() for testing set comparison --- assertpy/assertpy.py | 11 +++++++++++ tests/test_set.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 tests/test_set.py 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..7d99817 --- /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 to be a subset of , but was not.') + + 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 to be a subset of , but was not.') + From 78114e63206ec6cad438407a0ed0572146257ec5 Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 4 Apr 2016 11:08:43 -0500 Subject: [PATCH 2/2] should fix py3 is_subset_of test cases --- tests/test_set.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_set.py b/tests/test_set.py index 7d99817..bcc1be0 100644 --- a/tests/test_set.py +++ b/tests/test_set.py @@ -24,7 +24,7 @@ def test_arg_edge_case(self): 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 to be a subset of , but was not.') + 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])) @@ -34,5 +34,5 @@ def test_negative_normal_case(self): 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 to be a subset of , but was not.') + assert_that(str(ex)).is_equal_to('Expected <%s> to be a subset of <%s>, but was not.' % (set([1,2,3]), set([1])))