File tree Expand file tree Collapse file tree 2 files changed +31
-3
lines changed Expand file tree Collapse file tree 2 files changed +31
-3
lines changed Original file line number Diff line number Diff line change @@ -46,16 +46,21 @@ class InputInterrupt(Exception):
46
46
47
47
48
48
class ChangeDirHandler (object ):
49
+ def __init__ (self , output = sys .stdout , err = sys .stderr , chdir = os .chdir ):
50
+ self ._output = output
51
+ self ._err = err
52
+ self ._chdir = chdir
53
+
49
54
def run (self , command , application ):
50
55
# command is a list of parsed commands
51
56
if len (command ) != 2 :
52
- sys . stderr .write ("invalid syntax, must be: .cd dirname\n " )
57
+ self . _err .write ("invalid syntax, must be: .cd dirname\n " )
53
58
return
54
59
dirname = os .path .expandvars (os .path .expanduser (command [1 ]))
55
60
try :
56
- os . chdir (dirname )
61
+ self . _chdir (dirname )
57
62
except OSError as e :
58
- sys . stderr .write ("cd: %s\n " % e )
63
+ self . _err .write ("cd: %s\n " % e )
59
64
60
65
61
66
class EditHandler (object ):
Original file line number Diff line number Diff line change @@ -42,3 +42,26 @@ def test_prints_error_message_on_unknown_dot_command(errstream):
42
42
handler = app .DotCommandHandler (err = errstream )
43
43
handler .handle_cmd (".unknown foo bar" , None )
44
44
assert errstream .getvalue () == "Unknown dot command: .unknown\n "
45
+
46
+
47
+ def test_cd_handler_can_chdir ():
48
+ chdir = mock .Mock ()
49
+ handler = app .ChangeDirHandler (chdir = chdir )
50
+ handler .run (['.cd' , 'foo/bar' ], None )
51
+ assert chdir .call_args == mock .call ('foo/bar' )
52
+
53
+
54
+ def test_chdir_syntax_error_prints_err_msg (errstream ):
55
+ chdir = mock .Mock ()
56
+ handler = app .ChangeDirHandler (err = errstream , chdir = chdir )
57
+ handler .run (['.cd' ], None )
58
+ assert 'invalid syntax' in errstream .getvalue ()
59
+ assert not chdir .called
60
+
61
+
62
+ def test_error_displayed_when_chdir_fails (errstream ):
63
+ chdir = mock .Mock ()
64
+ chdir .side_effect = OSError ("FAILED" )
65
+ handler = app .ChangeDirHandler (err = errstream , chdir = chdir )
66
+ handler .run (['.cd' , 'foo' ], None )
67
+ assert 'FAILED' in errstream .getvalue ()
You can’t perform that action at this time.
0 commit comments