test_utils.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # test_utils.py -- Tests for git compatibility utilities
  2. # Copyright (C) 2010 Google, Inc.
  3. #
  4. # This program is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU General Public License
  6. # as published by the Free Software Foundation; either version 2
  7. # of the License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program; if not, write to the Free Software
  16. # Foundation, Inc., 51 Franklin Street, Fifth Floor,
  17. # Boston, MA 02110-1301, USA.
  18. """Tests for git compatibility utilities."""
  19. from dulwich.tests import (
  20. SkipTest,
  21. TestCase,
  22. )
  23. from dulwich.tests.compat import utils
  24. class GitVersionTests(TestCase):
  25. def setUp(self):
  26. super(GitVersionTests, self).setUp()
  27. self._orig_run_git = utils.run_git
  28. self._version_str = None # tests can override to set stub version
  29. def run_git(args, **unused_kwargs):
  30. self.assertEqual(['--version'], args)
  31. return 0, self._version_str
  32. utils.run_git = run_git
  33. def tearDown(self):
  34. super(GitVersionTests, self).tearDown()
  35. utils.run_git = self._orig_run_git
  36. def test_git_version_none(self):
  37. self._version_str = b'not a git version'
  38. self.assertEqual(None, utils.git_version())
  39. def test_git_version_3(self):
  40. self._version_str = b'git version 1.6.6'
  41. self.assertEqual((1, 6, 6, 0), utils.git_version())
  42. def test_git_version_4(self):
  43. self._version_str = b'git version 1.7.0.2'
  44. self.assertEqual((1, 7, 0, 2), utils.git_version())
  45. def test_git_version_extra(self):
  46. self._version_str = b'git version 1.7.0.3.295.gd8fa2'
  47. self.assertEqual((1, 7, 0, 3), utils.git_version())
  48. def assertRequireSucceeds(self, required_version):
  49. try:
  50. utils.require_git_version(required_version)
  51. except SkipTest:
  52. self.fail()
  53. def assertRequireFails(self, required_version):
  54. self.assertRaises(SkipTest, utils.require_git_version,
  55. required_version)
  56. def test_require_git_version(self):
  57. try:
  58. self._version_str = b'git version 1.6.6'
  59. self.assertRequireSucceeds((1, 6, 6))
  60. self.assertRequireSucceeds((1, 6, 6, 0))
  61. self.assertRequireSucceeds((1, 6, 5))
  62. self.assertRequireSucceeds((1, 6, 5, 99))
  63. self.assertRequireFails((1, 7, 0))
  64. self.assertRequireFails((1, 7, 0, 2))
  65. self.assertRaises(ValueError, utils.require_git_version,
  66. (1, 6, 6, 0, 0))
  67. self._version_str = b'git version 1.7.0.2'
  68. self.assertRequireSucceeds((1, 6, 6))
  69. self.assertRequireSucceeds((1, 6, 6, 0))
  70. self.assertRequireSucceeds((1, 7, 0))
  71. self.assertRequireSucceeds((1, 7, 0, 2))
  72. self.assertRequireFails((1, 7, 0, 3))
  73. self.assertRequireFails((1, 7, 1))
  74. except SkipTest as e:
  75. # This test is designed to catch all SkipTest exceptions.
  76. self.fail('Test unexpectedly skipped: %s' % e)