def test_make_rows(self): make_set = lambda data: set(frozenset(row.items()) for row in data) result = CompareSet(['aaa', 'bbb', 'ccc']) iterable = result.make_rows('foo') expected = [{'foo': 'aaa'}, {'foo': 'bbb'}, {'foo': 'ccc'}] self.assertEqual(make_set(expected), make_set(iterable)) result = CompareSet(['aaa', 'bbb', 'ccc']) iterable = result.make_rows(['foo']) # <- Single-item list. expected = [{'foo': 'aaa'}, {'foo': 'bbb'}, {'foo': 'ccc'}] self.assertEqual(make_set(expected), make_set(iterable)) result = CompareSet([ ('aaa', 1), ('bbb', 2), ('ccc', 3) ]) iterable = result.make_rows(['foo', 'bar']) expected = [ {'foo': 'aaa', 'bar': 1}, {'foo': 'bbb', 'bar': 2}, {'foo': 'ccc', 'bar': 3}, ] self.assertEqual(make_set(expected), make_set(iterable)) result = CompareSet(['aaa', 'bbb', 'ccc']) with self.assertRaises(AssertionError): iterable = result.make_rows(['foo', 'bar']) # Too many *names*. result = CompareSet([('aaa', 1), ('bbb', 2), ('ccc', 3)]) with self.assertRaises(AssertionError): iterable = result.make_rows(['foo']) # Too few *names*.
def test_eq(self): data = set([1, 2, 3, 4]) a = CompareSet(data) b = CompareSet(data) self.assertEqual(a, b) # Test coersion. a = CompareSet(data) b = [1, 2, 3, 4] # <- Should be coerced into CompareSet internally. self.assertEqual(a, b)
def test_eq(self): data = set([1, 2, 3, 4]) a = CompareSet(data) b = CompareSet(data) self.assertEqual(a, b) # Test coersion. a = CompareSet(data) b = [1, 2, 3, 4] # <- Should be coerced into CompareSet internally. self.assertEqual(a, b) # Test non-comparable types. a = CompareSet(data) self.assertNotEqual(a, None) self.assertNotEqual(a, False) self.assertNotEqual(a, 0)
def test_all_fn(self): obj = CompareSet(['aaa', 'bbb', 'ddd']) key = lambda x: len(x) == 3 self.assertTrue(obj.all(key)) obj = CompareSet(['aaa1', 'aaa2', 'bbb1']) key = lambda x: str(x).startswith('aaa') self.assertFalse(obj.all(key))
def test_init(self): data = set([1, 2, 3, 4]) x = CompareSet(data) # Data set. self.assertEqual(data, x) x = CompareSet(list(data)) # Data list. self.assertEqual(data, x) x = CompareSet(tuple(data)) # Data tuple. self.assertEqual(data, x) data_gen = (v for v in data) # Data generator. x = CompareSet(data_gen) self.assertEqual(data, x) # Data mapping (type error). data_dict = dict(enumerate(data)) with self.assertRaises(TypeError): x = CompareSet(data_dict) x = CompareSet(set()) self.assertEqual(set(), x)
def test_compare(self): a = CompareSet(['aaa', 'bbb', 'ddd']) b = CompareSet(['aaa', 'bbb', 'ccc']) expected = [Extra('ddd'), Missing('ccc')] self.assertEqual(expected, a.compare(b)) a = CompareSet(['aaa', 'bbb', 'ccc']) b = CompareSet(['aaa', 'bbb', 'ccc']) self.assertEqual([], a.compare(b), ('When there is no difference, ' 'compare should return an empty ' 'list.')) # Test callable other (all True). result = a.compare(lambda x: len(x) == 3) self.assertEqual([], result) # Test callable other (some False). result = a.compare(lambda x: x.startswith('b')) expected = set([Invalid('aaa'), Invalid('ccc')]) self.assertEqual(expected, set(result)) # Test callable other, multiple arguments (all True). a = CompareSet([(1, 1), (1, 2), (2, 1), (2, 2)]) result = a.compare(lambda x, y: x + y > 0) self.assertEqual([], result) # Test callable other, using single vararg (all True). a = CompareSet([(1, 1), (1, 2), (2, 1), (2, 2)]) result = a.compare(lambda *x: x[0] + x[1] > 0) self.assertEqual([], result) # Test callable other, multiple arguments (some False). a = CompareSet([(1, 1), (1, 2), (2, 1), (2, 2)]) result = a.compare(lambda x, y: x != y) expected = set([Invalid((1, 1)), Invalid((2, 2))]) self.assertEqual(expected, set(result)) # Test subset (less-than-or-equal). a = CompareSet(['aaa', 'bbb', 'ddd']) b = CompareSet(['aaa', 'bbb', 'ccc']) expected = [Extra('ddd')] self.assertEqual(expected, a.compare(b, op='<=')) # Test strict subset (less-than). a = CompareSet(['aaa', 'bbb']) b = CompareSet(['aaa', 'bbb', 'ccc']) self.assertEqual([], a.compare(b, op='<')) # Test strict subset (less-than) assertion violation. a = CompareSet(['aaa', 'bbb', 'ccc']) b = CompareSet(['aaa', 'bbb', 'ccc']) self.assertEqual([NotProperSubset()], a.compare(b, op='<')) # Test superset (greater-than-or-equal). a = CompareSet(['aaa', 'bbb', 'ccc']) b = CompareSet(['aaa', 'bbb', 'ddd']) expected = [Missing('ddd')] self.assertEqual(expected, a.compare(b, op='>=')) # Test superset subset (greater-than). a = CompareSet(['aaa', 'bbb', 'ccc']) b = CompareSet(['aaa', 'bbb']) self.assertEqual([], a.compare(b, op='>')) # Test superset subset (greater-than) assertion violation. a = CompareSet(['aaa', 'bbb', 'ccc']) b = CompareSet(['aaa', 'bbb', 'ccc']) self.assertEqual([NotProperSuperset()], a.compare(b, op='>'))
def test_ne(self): a = CompareSet(set([1, 2, 3])) b = CompareSet(set([1, 2, 3, 4])) self.assertTrue(a != b)
def test_make_rows(self): make_set = lambda data: set(frozenset(row.items()) for row in data) result = CompareSet(['aaa', 'bbb', 'ccc']) iterable = result.make_rows('foo') expected = [{'foo': 'aaa'}, {'foo': 'bbb'}, {'foo': 'ccc'}] self.assertEqual(make_set(expected), make_set(iterable)) result = CompareSet(['aaa', 'bbb', 'ccc']) iterable = result.make_rows(['foo']) # <- Single-item list. expected = [{'foo': 'aaa'}, {'foo': 'bbb'}, {'foo': 'ccc'}] self.assertEqual(make_set(expected), make_set(iterable)) result = CompareSet([('aaa', 1), ('bbb', 2), ('ccc', 3)]) iterable = result.make_rows(['foo', 'bar']) expected = [ { 'foo': 'aaa', 'bar': 1 }, { 'foo': 'bbb', 'bar': 2 }, { 'foo': 'ccc', 'bar': 3 }, ] self.assertEqual(make_set(expected), make_set(iterable)) result = CompareSet(['aaa', 'bbb', 'ccc']) with self.assertRaises(AssertionError): iterable = result.make_rows(['foo', 'bar']) # Too many *names*. result = CompareSet([('aaa', 1), ('bbb', 2), ('ccc', 3)]) with self.assertRaises(AssertionError): iterable = result.make_rows(['foo']) # Too few *names*.
def test_repr(self): result = CompareSet(set([1])) regex = r'^CompareSet\([\[\{]1[\}\]]\)$' self.assertRegex(repr(result), regex)
def test_compare(self): a = CompareSet(['aaa','bbb','ddd']) b = CompareSet(['aaa','bbb','ccc']) expected = [Extra('ddd'), Missing('ccc')] self.assertEqual(expected, a.compare(b)) a = CompareSet(['aaa','bbb','ccc']) b = CompareSet(['aaa','bbb','ccc']) self.assertEqual([], a.compare(b), ('When there is no difference, ' 'compare should return an empty ' 'list.')) # Test callable other (all True). result = a.compare(lambda x: len(x) == 3) self.assertEqual([], result) # Test callable other (some False). result = a.compare(lambda x: x.startswith('b')) expected = set([Invalid('aaa'), Invalid('ccc')]) self.assertEqual(expected, set(result)) # Test callable other, multiple arguments (all True). a = CompareSet([(1, 1), (1, 2), (2, 1), (2, 2)]) result = a.compare(lambda x, y: x + y > 0) self.assertEqual([], result) # Test callable other, using single vararg (all True). a = CompareSet([(1, 1), (1, 2), (2, 1), (2, 2)]) result = a.compare(lambda *x: x[0] + x[1] > 0) self.assertEqual([], result) # Test callable other, multiple arguments (some False). a = CompareSet([(1, 1), (1, 2), (2, 1), (2, 2)]) result = a.compare(lambda x, y: x != y) expected = set([Invalid((1, 1)), Invalid((2, 2))]) self.assertEqual(expected, set(result)) # Test subset (less-than-or-equal). a = CompareSet(['aaa','bbb','ddd']) b = CompareSet(['aaa','bbb','ccc']) expected = [Extra('ddd')] self.assertEqual(expected, a.compare(b, op='<=')) # Test strict subset (less-than). a = CompareSet(['aaa','bbb']) b = CompareSet(['aaa','bbb','ccc']) self.assertEqual([], a.compare(b, op='<')) # Test strict subset (less-than) assertion violation. a = CompareSet(['aaa','bbb','ccc']) b = CompareSet(['aaa','bbb','ccc']) self.assertEqual([NotProperSubset()], a.compare(b, op='<')) # Test superset (greater-than-or-equal). a = CompareSet(['aaa','bbb','ccc']) b = CompareSet(['aaa','bbb','ddd']) expected = [Missing('ddd')] self.assertEqual(expected, a.compare(b, op='>=')) # Test superset subset (greater-than). a = CompareSet(['aaa','bbb','ccc']) b = CompareSet(['aaa','bbb']) self.assertEqual([], a.compare(b, op='>')) # Test superset subset (greater-than) assertion violation. a = CompareSet(['aaa','bbb','ccc']) b = CompareSet(['aaa','bbb','ccc']) self.assertEqual([NotProperSuperset()], a.compare(b, op='>'))