@ -4,8 +4,10 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import unicode_literals
import io
import os
import StringIO
import sys
sys . path . insert ( 0 , os . path . dirname ( os . path . dirname ( os . path . abspath ( __file__ ) ) ) )
@ -27,19 +29,19 @@ class GclientUtilBase(SuperMoxTestBase):
class CheckCallAndFilterTestCase ( GclientUtilBase ) :
class ProcessIdMock ( object ) :
def __init__ ( self , test_string ):
self . stdout = StringIO. StringIO ( test_string )
def __init__ ( self , test_string , return_code = 0 ):
self . stdout = io. BytesIO ( test_string . encode ( ' utf-8 ' ) )
self . pid = 9284
# pylint: disable=no-self-use
self . return_code = return_code
def wait ( self ) :
return 0
return self . return_code
def _inner( self , args , test_string ) :
def testCheckCallAndFilter( self ) :
cwd = ' bleh '
gclient_utils . sys . stdout . write (
' ________ running \' boo foo bar \' in \' bleh \' \n ' )
for i in test_string :
gclient_utils . sys . stdout . write ( i )
args = [ ' boo ' , ' foo ' , ' bar ' ]
test_string = ' ahah \n accb \n allo \n addb \n ✔ '
# pylint: disable=no-member
subprocess2 . Popen (
args ,
@ -50,30 +52,70 @@ class CheckCallAndFilterTestCase(GclientUtilBase):
os . getcwd ( )
self . mox . ReplayAll ( )
compiled_pattern = gclient_utils . re . compile ( r ' a(.*)b ' )
line_list = [ ]
capture_list = [ ]
def FilterLines ( line ) :
line_list . append ( line )
assert isinstance ( line , str ) , type ( line )
match = compiled_pattern . search ( line )
if match :
capture_list . append ( match . group ( 1 ) )
gclient_utils . CheckCallAndFilterAndHeader (
args , cwd = cwd , always = True , filter_fn = FilterLines )
self . assertEquals ( line_list , [ ' ahah ' , ' accb ' , ' allo ' , ' addb ' , ' ✔ ' ] )
self . assertEquals ( capture_list , [ ' cc ' , ' dd ' ] )
def testCheckCallAndFilter ( self ) :
result = gclient_utils . CheckCallAndFilter (
args , cwd = cwd , show_header = True , always_show_header = True ,
filter_fn = line_list . append )
self . assertEqual ( result , test_string . encode ( ' utf-8 ' ) )
self . assertEqual ( line_list , [
' ________ running \' boo foo bar \' in \' bleh \' \n ' ,
' ahah ' ,
' accb ' ,
' allo ' ,
' addb ' ,
' ✔ ' ] )
def testCheckCallAndFilter_RetryOnce ( self ) :
cwd = ' bleh '
args = [ ' boo ' , ' foo ' , ' bar ' ]
test_string = ' ahah \n accb \n allo \n addb \n ✔ \n '
self . _inner ( args , test_string )
test_string = ' ahah \n accb \n allo \n addb \n ✔ '
# pylint: disable=no-member
subprocess2 . Popen (
args ,
cwd = cwd ,
stdout = subprocess2 . PIPE ,
stderr = subprocess2 . STDOUT ,
bufsize = 0 ) . AndReturn ( self . ProcessIdMock ( test_string , 1 ) )
os . getcwd ( )
# pylint: disable=no-member
subprocess2 . Popen (
args ,
cwd = cwd ,
stdout = subprocess2 . PIPE ,
stderr = subprocess2 . STDOUT ,
bufsize = 0 ) . AndReturn ( self . ProcessIdMock ( test_string , 0 ) )
self . mox . ReplayAll ( )
line_list = [ ]
result = gclient_utils . CheckCallAndFilter (
args , cwd = cwd , show_header = True , always_show_header = True ,
filter_fn = line_list . append , retry = True )
self . assertEqual ( result , test_string . encode ( ' utf-8 ' ) )
self . assertEqual ( line_list , [
' ________ running \' boo foo bar \' in \' bleh \' \n ' ,
' ahah ' ,
' accb ' ,
' allo ' ,
' addb ' ,
' ✔ ' ,
' ________ running \' boo foo bar \' in \' bleh \' attempt 2 / 4 \n ' ,
' ahah ' ,
' accb ' ,
' allo ' ,
' addb ' ,
' ✔ ' ,
] )
self . checkstdout (
' ________ running \' boo foo bar \' in \' bleh \' \n '
' ahah \n accb \n allo \n addb \n ✔ \n '
' ________ running \' boo foo bar \' in \' bleh \' \n '
' ahah \n accb \n allo \n addb \n ✔ '
' \n ' )
' WARNING: subprocess \' " boo " " foo " " bar " \' in bleh failed; will retry '
' after a short nap... \n ' )
class SplitUrlRevisionTestCase ( GclientUtilBase ) :
@ -81,60 +123,60 @@ class SplitUrlRevisionTestCase(GclientUtilBase):
url = " ssh://test@example.com/test.git "
rev = " ac345e52dc "
out_url , out_rev = gclient_utils . SplitUrlRevision ( url )
self . assertEqual s ( out_rev , None )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , None )
self . assertEqual ( out_url , url )
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
url = " ssh://example.com/test.git "
out_url , out_rev = gclient_utils . SplitUrlRevision ( url )
self . assertEqual s ( out_rev , None )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , None )
self . assertEqual ( out_url , url )
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
url = " ssh://example.com/git/test.git "
out_url , out_rev = gclient_utils . SplitUrlRevision ( url )
self . assertEqual s ( out_rev , None )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , None )
self . assertEqual ( out_url , url )
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
rev = " test-stable "
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
url = " ssh://user-name@example.com/~/test.git "
out_url , out_rev = gclient_utils . SplitUrlRevision ( url )
self . assertEqual s ( out_rev , None )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , None )
self . assertEqual ( out_url , url )
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
url = " ssh://user-name@example.com/~username/test.git "
out_url , out_rev = gclient_utils . SplitUrlRevision ( url )
self . assertEqual s ( out_rev , None )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , None )
self . assertEqual ( out_url , url )
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
url = " git@github.com:dart-lang/spark.git "
out_url , out_rev = gclient_utils . SplitUrlRevision ( url )
self . assertEqual s ( out_rev , None )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , None )
self . assertEqual ( out_url , url )
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
def testSVNUrl ( self ) :
url = " svn://example.com/test "
rev = " ac345e52dc "
out_url , out_rev = gclient_utils . SplitUrlRevision ( url )
self . assertEqual s ( out_rev , None )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , None )
self . assertEqual ( out_url , url )
out_url , out_rev = gclient_utils . SplitUrlRevision ( " %s @ %s " % ( url , rev ) )
self . assertEqual s ( out_rev , rev )
self . assertEqual s ( out_url , url )
self . assertEqual ( out_rev , rev )
self . assertEqual ( out_url , url )
class GClientUtilsTest ( trial_dir . TestCase ) :
@ -171,7 +213,7 @@ class GClientUtilsTest(trial_dir.TestCase):
[ ' foo: ' , ' https://foo: ' ] ,
]
for content , expected in values :
self . assertEqual s (
self . assertEqual (
expected , gclient_utils . UpgradeToHttps ( content ) )
def testParseCodereviewSettingsContent ( self ) :
@ -191,7 +233,7 @@ class GClientUtilsTest(trial_dir.TestCase):
[ ' VIEW_VC:http://r/s ' , { ' VIEW_VC ' : ' https://r/s ' } ] ,
]
for content , expected in values :
self . assertEqual s (
self . assertEqual (
expected , gclient_utils . ParseCodereviewSettingsContent ( content ) )