Check binary existence in gclient: 2nd try.

The first approach crrev.com/132446 was reverted due to
Windows build breaks. This approach is more robust because
it actually tests the binary by running the command actually.

BUG=114483
TEST=succeeded on Linux

Review URL: http://codereview.chromium.org/10103024

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@132783 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index 94ab420..ebe5e45 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -64,11 +64,17 @@
     self.mox.StubOutWithMock(subprocess2, 'Popen')
     self._scm_wrapper = gclient_scm.CreateSCM
     gclient_scm.scm.SVN.current_version = None
+    self._original_SVNBinaryExists = gclient_scm.SVNWrapper.BinaryExists
+    self._original_GitBinaryExists = gclient_scm.GitWrapper.BinaryExists
+    gclient_scm.SVNWrapper.BinaryExists = staticmethod(lambda : True)
+    gclient_scm.GitWrapper.BinaryExists = staticmethod(lambda : True)
     # Absolute path of the fake checkout directory.
     self.base_path = join(self.root_dir, self.relpath)
 
   def tearDown(self):
     SuperMoxTestBase.tearDown(self)
+    gclient_scm.SVNWrapper.BinaryExists = self._original_SVNBinaryExists
+    gclient_scm.GitWrapper.BinaryExists = self._original_GitBinaryExists
 
 
 class SVNWrapperTestCase(BaseTestCase):
@@ -94,6 +100,7 @@
 
   def testDir(self):
     members = [
+        'BinaryExists',
         'FullUrlForRelativeUrl',
         'GetRevisionDate',
         'GetUsableRev',
@@ -750,16 +757,23 @@
     self.base_path = join(self.root_dir, self.relpath)
     self.enabled = self.CreateGitRepo(self.sample_git_import, self.base_path)
     StdoutCheck.setUp(self)
+    self._original_GitBinaryExists = gclient_scm.GitWrapper.BinaryExists
+    self._original_SVNBinaryExists = gclient_scm.SVNWrapper.BinaryExists
+    gclient_scm.GitWrapper.BinaryExists = staticmethod(lambda : True)
+    gclient_scm.SVNWrapper.BinaryExists = staticmethod(lambda : True)
 
   def tearDown(self):
     StdoutCheck.tearDown(self)
     TestCaseUtils.tearDown(self)
     unittest.TestCase.tearDown(self)
     rmtree(self.root_dir)
+    gclient_scm.GitWrapper.BinaryExists = self._original_GitBinaryExists
+    gclient_scm.SVNWrapper.BinaryExists = self._original_SVNBinaryExists
 
 class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
   def testDir(self):
     members = [
+        'BinaryExists',
         'FullUrlForRelativeUrl',
         'GetRevisionDate',
         'GetUsableRev',