Index: py/utils/git_utils_test.py |
diff --git a/py/utils/git_utils_test.py b/py/utils/git_utils_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..88a273693264850764c1b3064b4a178678088b3e |
--- /dev/null |
+++ b/py/utils/git_utils_test.py |
@@ -0,0 +1,103 @@ |
+#!/usr/bin/python |
+ |
+""" |
+Copyright 2014 Google Inc. |
+ |
+Use of this source code is governed by a BSD-style license that can be |
+found in the LICENSE file. |
+ |
+Test git_utils.py. |
+""" |
+ |
+# System-level imports |
+import os |
+import tempfile |
+import unittest |
+ |
+# Imports from within Skia |
+import git_utils |
+ |
+ |
+# A git repo we can use for tests. |
+REPO = 'https://skia.googlesource.com/common' |
+ |
+# A file in some subdirectory within REPO. |
+REPO_FILE = os.path.join('py', 'utils', 'git_utils.py') |
+ |
+ |
+class NewGitCheckoutTest(unittest.TestCase): |
+ |
+ def test_defaults(self): |
+ """Test NewGitCheckout created using default parameters.""" |
+ with git_utils.NewGitCheckout(repository=REPO) as checkout: |
+ filepath = os.path.join(checkout.root, REPO_FILE) |
+ self.assertTrue( |
+ os.path.exists(filepath), |
+ 'file %s should exist' % filepath) |
+ # Confirm that NewGitCheckout cleaned up after itself. |
+ self.assertFalse( |
+ os.path.exists(filepath), |
+ 'file %s should not exist' % filepath) |
+ |
+ def test_subdir(self): |
+ """Create NewGitCheckout with a specific subdirectory.""" |
+ subdir = os.path.dirname(REPO_FILE) |
+ file_within_subdir = os.path.basename(REPO_FILE) |
+ |
+ containing_dir = tempfile.mkdtemp() |
+ try: |
+ with git_utils.NewGitCheckout(repository=REPO, subdir=subdir, |
+ containing_dir=containing_dir) as checkout: |
+ self.assertTrue( |
+ checkout.root.startswith(containing_dir), |
+ 'checkout.root %s should be within %s' % ( |
+ checkout.root, containing_dir)) |
+ filepath = os.path.join(checkout.root, file_within_subdir) |
+ self.assertTrue( |
+ os.path.exists(filepath), |
+ 'file %s should exist' % filepath) |
+ finally: |
+ os.rmdir(containing_dir) |
+ |
+ def test_refspec(self): |
+ """Create NewGitCheckout with a specific refspec. |
+ |
+ This test depends on the fact that the whitespace.txt file was added to the |
+ repo in a particular commit. |
+ See https://skia.googlesource.com/common/+/c2200447734f13070fb3b2808dea58847241ab0e |
+ ('Initial commit of whitespace.txt') |
+ """ |
+ filename = 'whitespace.txt' |
+ hash_without_file = 'f63e1cfff23615157e28942af5f5e8298351cb10' |
+ hash_with_file = 'c2200447734f13070fb3b2808dea58847241ab0e' |
+ |
+ with git_utils.NewGitCheckout( |
+ repository=REPO, refspec=hash_without_file) as checkout: |
+ filepath = os.path.join(checkout.root, filename) |
+ self.assertEquals( |
+ hash_without_file, checkout.commithash(), |
+ '"%s" != "%s"' % (hash_without_file, checkout.commithash())) |
+ self.assertFalse( |
+ os.path.exists(filepath), |
+ 'file %s should not exist' % filepath) |
+ |
+ with git_utils.NewGitCheckout( |
+ repository=REPO, refspec=hash_with_file) as checkout: |
+ filepath = os.path.join(checkout.root, filename) |
+ self.assertEquals( |
+ hash_with_file, checkout.commithash(), |
+ '"%s" != "%s"' % (hash_with_file, checkout.commithash())) |
+ self.assertTrue( |
+ os.path.exists(filepath), |
+ 'file %s should exist' % filepath) |
+ |
+ |
+def main(test_case_class): |
+ """Run the unit tests within this class.""" |
+ suite = unittest.TestLoader().loadTestsFromTestCase(NewGitCheckoutTest) |
+ results = unittest.TextTestRunner(verbosity=2).run(suite) |
+ if not results.wasSuccessful(): |
+ raise Exception('failed unittest %s' % test_case_class) |
+ |
+if __name__ == '__main__': |
+ main(NewGitCheckoutTest) |