PyUT: Add test_sort_releases to test multiple sorting syntaxes.
authorDidier Raboud <odyx@debian.org>
Wed, 23 May 2012 11:22:30 +0000 (13:22 +0200)
committerDidier Raboud <odyx@debian.org>
Wed, 23 May 2012 12:56:48 +0000 (14:56 +0200)
Git-Dch: None

lsb_release.py
test/test_lsb_release.py

index eb3c45a3c8cf0f3ddd2c8266325e9ecd85732cf4..d4335c6cea6a652beee26535864844edcaf78a0c 100644 (file)
@@ -177,6 +177,15 @@ def parse_policy_line(data):
                 retval[longnames[k]] = v
     return retval
 
+def release_index(x):
+    suite = x[1].get('suite')
+    if suite:
+        if suite in RELEASES_ORDER:
+            return int(len(RELEASES_ORDER) - RELEASES_ORDER.index(suite))
+        else:
+            return suite
+    return 0
+
 def compare_release(x, y):
     suite_x = x[1].get('suite')
     suite_y = y[1].get('suite')
index d095664aa41764d5b4c41fad29f90d35017ffb33..4966d5491c7ad70175bc82b93515ecc7e3243fcd 100644 (file)
@@ -101,6 +101,36 @@ class TestLSBRelease(unittest.TestCase):
                release_line = string.strip(release_line,',')
                self.assertEqual(sorted(lr.parse_policy_line(release_line)),sorted(longnames),'parse_policy_line(' + release_line + ')')
 
+       def test_sort_releases(self):
+               # Compare suites with random suite names
+               releases = []
+               suites = []
+               for i in range(random.randint(5,40)):
+                       suite_name = rnd_string(8,25)
+                       suites.append(suite_name)
+                       releases.append([rnd_string(1,12), {'suite': suite_name}])
+               suites_from_releases     = [x[1]['suite'] for x in sorted(releases,lr.compare_release)]
+               suites_from_releases_new = [x[1]['suite'] for x in sorted(releases,key=lr.release_index)]
+               suites.sort()
+               self.assertEqual(suites,suites_from_releases)
+               self.assertEqual(suites,suites_from_releases_new)
+
+               # Compare suites with known suite names
+               releases = []
+               suites = []
+               RO_min = 0
+               RO_max = len(lr.RELEASES_ORDER) - 1
+               for i in range(random.randint(5,7)):
+                       suite_i = random.randint(RO_min,RO_max)
+                       suite_name = lr.RELEASES_ORDER[suite_i]
+                       suites.append(suite_name)
+                       releases.append([rnd_string(1,12), {'suite': suite_name}])
+               suites_from_releases     = [x[1]['suite'] for x in sorted(releases,lr.compare_release)]
+               suites_from_releases_new = [x[1]['suite'] for x in sorted(releases,key=lr.release_index)]
+               suites.sort(key=lambda suite: int(lr.RELEASES_ORDER.index(suite)),reverse=True)
+               self.assertEqual(suites,suites_from_releases)
+               self.assertEqual(suites,suites_from_releases_new)
+
        def test_compare_release(self):
                # Test that equal suite strings lead to 0
                fake_release_equal = rnd_string(1,25)