Bug 1453274 - Add testing for python/mozrelease/versions.py r=rail draft
authorJustin Wood <Callek@gmail.com>
Mon, 23 Apr 2018 12:40:26 -0400
changeset 786630 0eaeb17809fede07f6b9fc4ee5d856d0078f83be
parent 786478 dfb15917c057f17e5143f7d7c6e1972ba53efc49
child 786631 33225a5ecb879705327af505920d4db040a91d7b
push id107547
push userCallek@gmail.com
push dateMon, 23 Apr 2018 18:15:07 +0000
reviewersrail
bugs1453274
milestone61.0a1
Bug 1453274 - Add testing for python/mozrelease/versions.py r=rail for: taskgraph: Make update tasks support esr60 MozReview-Commit-ID: GUmAq3sBXGB
build/virtualenv_packages.txt
python/moz.build
python/mozrelease/test/python.ini
python/mozrelease/test/test_versions.py
--- a/build/virtualenv_packages.txt
+++ b/build/virtualenv_packages.txt
@@ -1,12 +1,13 @@
 mozilla.pth:python/mach
 mozilla.pth:python/mozboot
 mozilla.pth:python/mozbuild
 mozilla.pth:python/mozlint
+mozilla.pth:python/mozrelease
 mozilla.pth:python/mozterm
 mozilla.pth:python/mozversioncontrol
 mozilla.pth:python/l10n
 mozilla.pth:third_party/python/blessings
 mozilla.pth:third_party/python/compare-locales
 mozilla.pth:third_party/python/configobj
 mozilla.pth:third_party/python/cram
 mozilla.pth:third_party/python/dlmanager
--- a/python/moz.build
+++ b/python/moz.build
@@ -52,16 +52,17 @@ SPHINX_TREES['python'] = 'docs'
 
 with Files('mach/docs/**'):
     SCHEDULES.exclusive = ['docs']
 
 PYTHON_UNITTEST_MANIFESTS += [
     'mach/mach/test/python.ini',
     'mozbuild/dumbmake/test/python.ini',
     'mozlint/test/python.ini',
+    'mozrelease/test/python.ini',
     'mozterm/test/python.ini',
     'mozversioncontrol/test/python.ini',
 ]
 
 if CONFIG['MOZ_BUILD_APP']:
     PYTHON_UNITTEST_MANIFESTS += [
         'mozbuild/mozbuild/test/python.ini',
         'mozbuild/mozpack/test/python.ini',
new file mode 100644
--- /dev/null
+++ b/python/mozrelease/test/python.ini
@@ -0,0 +1,4 @@
+[DEFAULT]
+subsuite=mozrelease
+
+[test_versions.py]
new file mode 100644
--- /dev/null
+++ b/python/mozrelease/test/test_versions.py
@@ -0,0 +1,98 @@
+from __future__ import absolute_import
+
+import mozunit
+import pytest
+
+from mozrelease.versions import MozillaVersion
+
+
+ALL_VERSIONS = [  # Keep this sorted
+    '3.0',
+    '3.0.1',
+    '3.0.2',
+    '3.0.3',
+    '3.0.4',
+    '3.0.5',
+    '3.0.6',
+    '3.0.7',
+    '3.0.8',
+    '3.0.9',
+    '3.0.10',
+    '3.0.11',
+    '3.0.12',
+    '3.0.13',
+    '3.0.14',
+    '3.0.15',
+    '3.0.16',
+    '3.0.17',
+    '3.0.18',
+    '3.0.19',
+    '3.1b1',
+    '3.1b2',
+    '3.1b3',
+    '3.5b4',
+    '3.5b99',
+    '3.5rc1',
+    '3.5rc2',
+    '3.5rc3',
+    '3.5',
+    '3.5.1',
+    '3.5.2',
+    '3.5.3',
+    '3.5.4',
+    '3.5.5',
+    '3.5.6',
+    '3.5.7',
+    '3.5.8',
+    '3.5.9',
+    '3.5.10',
+    # ... Start skipping around...
+    '4.0b9',
+    # '10.0.2esr',
+    # '10.0.3esr',
+    '32.0',
+    '49.0a1',
+    '49.0a2',
+    '59.0',
+    '60.0',
+    # '60.0esr',
+    # '60.0.1esr',
+    '60.1',
+    # '60.1.0esr',
+    '61.0',
+]
+
+
+@pytest.fixture(scope='function',
+                params=range(len(ALL_VERSIONS) - 1),
+                ids=lambda x: "{}, {}".format(ALL_VERSIONS[x], ALL_VERSIONS[x+1]))
+def comparable_versions(request):
+    index = request.param
+    return ALL_VERSIONS[index], ALL_VERSIONS[index + 1]
+
+
+@pytest.mark.parametrize('version', ALL_VERSIONS)
+def test_versions_parseable(version):
+    """Test that we can parse previously shipped versions.
+
+    We only test 3.0 and up, since we never generate updates against
+    versions that old."""
+    assert MozillaVersion(version) is not None
+
+
+def test_versions_compare(comparable_versions):
+    """Test that versions properly compare in order."""
+    smaller_version, larger_version = comparable_versions
+    assert MozillaVersion(smaller_version) < MozillaVersion(larger_version)
+    assert MozillaVersion(larger_version) > MozillaVersion(smaller_version)
+    assert MozillaVersion(larger_version) != MozillaVersion(smaller_version)
+
+
+@pytest.mark.parametrize('version', ALL_VERSIONS)
+def test_versions_compare_equal(version):
+    """Test that versions properly compare as equal through multiple passes."""
+    assert MozillaVersion(version) == MozillaVersion(version)
+
+
+if __name__ == '__main__':
+    mozunit.main()