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.")