1#!/usr/bin/env python 2# Copyright (c) 2014 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import os 7import sys 8import collections 9import unittest 10 11SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 12BUILD_TOOLS_DIR = os.path.dirname(SCRIPT_DIR) 13CHROME_SRC = os.path.dirname(os.path.dirname(os.path.dirname(BUILD_TOOLS_DIR))) 14MOCK_DIR = os.path.join(CHROME_SRC, "third_party", "pymock") 15 16# For the mock library 17sys.path.append(MOCK_DIR) 18import mock 19 20sys.path.append(BUILD_TOOLS_DIR) 21import build_version 22 23ProcInfo = collections.namedtuple('ProcInfo', ['returncode', 'output']) 24 25class TestCase(unittest.TestCase): 26 def setUp(self): 27 self.fetch_svn = mock.patch('lastchange.FetchSVNRevision').start() 28 self.fetch_git_svn = mock.patch('lastchange.FetchGitSVNRevision').start() 29 self.run_git = mock.patch('lastchange.RunGitCommand').start() 30 31 self.fetch_svn.return_value = None 32 self.fetch_git_svn.return_value = None 33 34 def tearDown(self): 35 mock.patch.stopall() 36 37 def mockGitCommand(self, *args): 38 side_effects = [] 39 for proc_info in args: 40 mock_proc = mock.MagicMock() 41 mock_proc.returncode = proc_info.returncode 42 comm_result = mock_proc.MagicMock() 43 comm_result.__getitem__.return_value = proc_info.output 44 mock_proc.communicate.return_value = comm_result 45 side_effects.append(mock_proc) 46 47 self.run_git.side_effect = side_effects 48 49 def mockDefaultGitCommand(self): 50 output = """\ 516a8b61d6be4656e682eba005a1dd7f129789129c 52[NaCl SDK] Update build_sdk.py to display Cr-Commit-Position in README. 53 54BUG=none 55R=bradnelson@google.com, bradnelson@chromium.org 56 57Review URL: https://codereview.chromium.org/495423010 58 59Cr-Commit-Position: refs/heads/master@{#292480}""" 60 self.mockGitCommand(ProcInfo(0, output)) 61 62 def mockDepthTwoGitCommand(self): 63 output0 = """\ 64ae4b444a0aa09a1fa73e59b180d7d957b9a36bf2 65.""" 66 67 output1 = """\ 686a8b61d6be4656e682eba005a1dd7f129789129c 69[NaCl SDK] Update build_sdk.py to display Cr-Commit-Position in README. 70 71BUG=none 72R=bradnelson@google.com, bradnelson@chromium.org 73 74Review URL: https://codereview.chromium.org/495423010 75 76Cr-Commit-Position: refs/heads/master@{#292480}""" 77 self.mockGitCommand(ProcInfo(0, output0), ProcInfo(0, output1)) 78 79 80 def assertGitShowCalled(self, depth=0): 81 cmd = ['show', '-s', '--format=%H%n%B', 'HEAD~%d' % depth] 82 self.run_git.assert_called_with(None, cmd) 83 84 def testChromeVersion(self): 85 self.mockDefaultGitCommand() 86 result = build_version.ChromeVersion() 87 self.assertGitShowCalled() 88 self.assertEqual(result, 'trunk.292480') 89 90 def testChromeRevision(self): 91 self.mockDefaultGitCommand() 92 result = build_version.ChromeRevision() 93 self.assertGitShowCalled() 94 self.assertEqual(result, '292480') 95 96 def testChromeCommitPosition(self): 97 self.mockDefaultGitCommand() 98 result = build_version.ChromeCommitPosition() 99 self.assertGitShowCalled() 100 self.assertEqual( 101 result, 102 '6a8b61d6be4656e682eba005a1dd7f129789129c-refs/heads/master@{#292480}') 103 104 def testChromeCommitPositionDepthTwo(self): 105 self.mockDepthTwoGitCommand() 106 result = build_version.ChromeCommitPosition() 107 self.assertEqual( 108 result, 109 '6a8b61d6be4656e682eba005a1dd7f129789129c-refs/heads/master@{#292480}') 110 111 112if __name__ == '__main__': 113 unittest.main() 114