def test_complex_sort_item(self): import multi_key_sort as mks from operator import itemgetter myKeys = ['age', 'name desc'] expectedOutput = [ {'name': 'Wallace', 'age': 20, 'sex': 'M'}, {'name': 'Sarah', 'age': 20, 'sex': 'F'}, {'name': 'Linda', 'age': 25, 'sex': 'F'}, {'name': 'Jim', 'age': 35, 'sex': 'M'}, {'name': "Alex", 'age': 35, 'sex': 'M'}, {'name': 'Bill', 'age': 40, 'sex': 'M'}, ] actualOutput = mks.complex_sorted(self.sampleData, itemgetter, *myKeys) self.assertEqual(expectedOutput, actualOutput, "complex_sorted (itemgetter) output differs from expected output.")
def test_complex_sort_attr(self): import multi_key_sort as mks from operator import attrgetter class MyData(object): def __init__(self, **kwargs): self.attrNames = sorted(kwargs.keys()) for k, v in kwargs.iteritems(): setattr(self, k, v) def __cmp__(self, other): res = 0 for n in self.attrNames: res = cmp(getattr(self, n), getattr(other, n)) if res != 0: break return res # End class MyData myKeys = ['sex desc', 'name desc'] myInput = [MyData(**x) for x in self.sampleData] expectedOutput = [ {'name': 'Wallace', 'age': 20, 'sex': 'M'}, {'name': 'Jim', 'age': 35, 'sex': 'M'}, {'name': 'Bill', 'age': 40, 'sex': 'M'}, {'name': "Alex", 'age': 35, 'sex': 'M'}, {'name': 'Sarah', 'age': 20, 'sex': 'F'}, {'name': 'Linda', 'age': 25, 'sex': 'F'}, ] expectedOutput = [MyData(**x) for x in expectedOutput] actualOutput = mks.complex_sorted(myInput, attrgetter, *myKeys) self.assertEqual(expectedOutput, actualOutput, "complex_sorted (attrgetter) output differs from expected output.")