def run_trashput(self, *argv): cmd = TrashPutCmd(stdout=self.out, stderr=self.err, environ=self.environ, fstab=self.fstab) self.exit_code = cmd.run(list(argv)) self.stderr = self.err.getvalue()
class TestTrashPutTrashDirectory(unittest.TestCase): def setUp(self): parent_path = lambda _: None class MyVolumes: def volume_of(self, path): return '/' volumes = MyVolumes() self.try_trash_file_using_candidates = Mock() self.cmd = TrashPutCmd(None, None, {'XDG_DATA_HOME': '~/xdh'}, volumes, parent_path, None, None, lambda: '123', None) self.cmd.try_trash_file_using_candidates = self.try_trash_file_using_candidates def test_normally(self): self.cmd.run(['trash-put', 'file']) assert [ call('file', '/', [ ('~/xdh/Trash', '/', AbsolutePaths, all_is_ok_rules), ('/.Trash/123', '/', TopDirRelativePaths, top_trash_dir_rules), ('/.Trash-123', '/', TopDirRelativePaths, all_is_ok_rules), ]) ] == self.try_trash_file_using_candidates.mock_calls def test_with_a_specified_trashdir(self): self.cmd.run(['trash-put', '--trash-dir=/Trash2', 'file']) assert [ call('file', '/', [ ('/Trash2', '/', TopDirRelativePaths, all_is_ok_rules), ]) ] == self.try_trash_file_using_candidates.mock_calls
class TestTrashPutTrashDirectory: def setUp(self): parent_path = lambda _: None volume_of = lambda _: '/' self.try_trash_file_using_candidates = Mock() self.cmd = TrashPutCmd(None, None, {'XDG_DATA_HOME': '~/xdh'}, volume_of, parent_path, None, None, None, None) self.cmd.getuid = lambda: '123' self.cmd.try_trash_file_using_candidates = self.try_trash_file_using_candidates def test_normally(self): self.cmd.run(['trash-put', 'file']) assert_equals([ call('file', '/', [ ('~/xdh/Trash', '/', AbsolutePaths, all_is_ok_checker), ('/.Trash/123', '/', TopDirRelativePaths, TopTrashDirWriteRules), ('/.Trash-123', '/', TopDirRelativePaths, all_is_ok_checker), ]) ], self.try_trash_file_using_candidates.mock_calls) def test_with_a_specified_trashdir(self): self.cmd.run(['trash-put', '--trash-dir=/Trash2', 'file']) assert_equals([ call('file', '/', [ ('/Trash2', '/', TopDirRelativePaths, all_is_ok_checker), ]) ], self.try_trash_file_using_candidates.mock_calls)
class TestHomeFallback(unittest.TestCase): def setUp(self): self.reporter = Mock() mount_points = ['/', 'sandbox/other_partition'] self.fs = Mock() self.trashcan = TrashPutCmd( stdout=None, stderr=None, getuid=lambda: 123, volumes=create_fake_volume_of(mount_points), now=datetime.now, environ=dict(), fs=self.fs, parent_path=os.path.dirname, realpath=lambda x: x) self.trashcan.reporter = self.reporter self.trashcan.logger = Mock() self.trashcan.ignore_missing = False def test_use_of_top_trash_dir_when_sticky(self): self.fs.mock_add_spec([ 'isdir', 'islink', 'has_sticky_bit', 'move', 'atomic_write', 'remove_file', 'ensure_dir' ]) self.fs.isdir.return_value = True self.fs.islink.return_value = False self.fs.has_sticky_bit.return_value = True self.trashcan.trash('sandbox/foo', False) assert [ call.isdir('.Trash'), call.islink('.Trash'), call.has_sticky_bit('.Trash'), call.ensure_dir('.Trash/123/info', 448), call.atomic_write('.Trash/123/info/foo.trashinfo', ANY), call.ensure_dir('.Trash/123/files', 448), call.move('sandbox/foo', '.Trash/123/files/foo') ] == self.fs.mock_calls def test_bug_will_use_top_trashdir_even_with_not_sticky(self): self.fs.mock_add_spec([ 'isdir', 'islink', 'has_sticky_bit', 'move', 'atomic_write', 'remove_file', 'ensure_dir' ]) self.fs.isdir.return_value = True self.fs.islink.return_value = False self.fs.has_sticky_bit.return_value = False self.trashcan.trash('sandbox/foo', False) assert [ call.isdir('.Trash'), call.islink('.Trash'), call.has_sticky_bit('.Trash'), call.ensure_dir('.Trash-123/info', 448), call.atomic_write('.Trash-123/info/foo.trashinfo', ANY), call.ensure_dir('.Trash-123/files', 448), call.move('sandbox/foo', '.Trash-123/files/foo') ] == self.fs.mock_calls, self.fs.mock_calls
def run_trash_put(self, *arg): self.stderr = StringIO() self.stdout = StringIO() args = ['trash-put'] + list(arg) cmd = TrashPutCmd(self.stdout, self.stderr, None, None, None, None, None, None, None) self._collect_exit_code(lambda: cmd.run(args))
class TestTrashPutTrashDirectory: def setUp(self): parent_path = lambda _ : None volume_of = lambda _ : '/' self.try_trash_file_using_candidates = Mock() self.cmd = TrashPutCmd(None, None, {'XDG_DATA_HOME':'~/xdh'}, volume_of, parent_path, None, None, None, None) self.cmd.getuid = lambda : '123' self.cmd.try_trash_file_using_candidates = self.try_trash_file_using_candidates def test_normally(self): self.cmd.run(['trash-put', 'file']) assert_equals([call('file', '/', [ ('~/xdh/Trash', '/', AbsolutePaths, all_is_ok_checker), ('/.Trash/123', '/', TopDirRelativePaths, TopTrashDirWriteRules), ('/.Trash-123', '/', TopDirRelativePaths, all_is_ok_checker), ])], self.try_trash_file_using_candidates.mock_calls) def test_with_a_specified_trashdir(self): self.cmd.run(['trash-put', '--trash-dir=/Trash2', 'file']) assert_equals([call('file', '/', [ ('/Trash2', '/', TopDirRelativePaths, all_is_ok_checker), ])], self.try_trash_file_using_candidates.mock_calls)
def test_trash_put_last_line(self): from trashcli.put import TrashPutCmd cmd = TrashPutCmd(self.out, StringIO(), None, None) cmd.run(['', '--help']) self.assert_last_line_of_output_is( 'Report bugs to https://github.com/andreafrancia/trash-cli/issues')
def setUp(self): parent_path = lambda _: None volume_of = lambda _: '/' self.try_trash_file_using_candidates = Mock() self.cmd = TrashPutCmd(None, None, {'XDG_DATA_HOME': '~/xdh'}, volume_of, parent_path, None, None, None, None) self.cmd.getuid = lambda: '123' self.cmd.try_trash_file_using_candidates = self.try_trash_file_using_candidates
def run_trashput(self, *argv): cmd = TrashPutCmd( stdout = self.out, stderr = self.err, environ = self.environ, fstab = self.fstab ) self.exit_code = cmd.run(list(argv)) self.stderr = self.err.getvalue()
def run_trashput(self, *argv): cmd = TrashPutCmd(stdout=self.out, stderr=self.err, environ=self.environ, volume_of=self.fstab.volume_of, parent_path=os.path.dirname, realpath=lambda x: x) self.exit_code = cmd.run(list(argv)) self.stderr = self.err.getvalue()
def test_trash_put_last_line(self): from trashcli.put import TrashPutCmd cmd = TrashPutCmd(self.out, StringIO(), None, None, None, None, None, None, None) cmd.run(['', '--help']) self.assert_last_line_of_output_is( 'Report bugs to https://github.com/andreafrancia/trash-cli/issues')
def run_trashput(self, *argv): cmd = TrashPutCmd(stdout=self.out, stderr=self.err, environ=self.environ, volume_of=self.fstab.volume_of, parent_path=os.path.dirname, realpath=lambda x: x, fs=RealFs(), getuid=lambda: None, now=datetime.now) self.exit_code = cmd.run(list(argv)) self.stderr = self.err.getvalue()
def setUp(self): parent_path = lambda _: None class MyVolumes: def volume_of(self, path): return '/' volumes = MyVolumes() self.try_trash_file_using_candidates = Mock() self.cmd = TrashPutCmd(None, None, {'XDG_DATA_HOME': '~/xdh'}, volumes, parent_path, None, None, lambda: '123', None) self.cmd.try_trash_file_using_candidates = self.try_trash_file_using_candidates
def run(self, *arg): self.stderr = StringIO() self.stdout = StringIO() args = ['trash-put'] + list(arg) cmd = TrashPutCmd(self.stdout, self.stderr, None, None, None, None, None, None, None) self._collect_exit_code(lambda:cmd.run(args))
def run_trashput(self, *argv): cmd = TrashPutCmd( stdout = self.out, stderr = self.err, environ = self.environ, volume_of = self.fstab.volume_of, parent_path = os.path.dirname, realpath = lambda x:x, fs = RealFs(), getuid = lambda: None, now = datetime.now ) self.exit_code = cmd.run(list(argv)) self.stderr = self.err.getvalue()
def run_trashput(self, *argv): self.environ = {'XDG_DATA_HOME': self.temp_dir / 'XDG_DATA_HOME'} self.out = StringIO() self.err = StringIO() cmd = TrashPutCmd(stdout=self.out, stderr=self.err, environ=self.environ, volumes=self.volumes, parent_path=os.path.dirname, realpath=lambda x: x, fs=RealFs(), getuid=lambda: None, now=datetime.now) self.exit_code = cmd.run(list(argv)) self.stdout = self.out.getvalue() self.stderr = self.err.getvalue()
def setUp(self): self.reporter = Mock() mount_points = ['/', 'sandbox/other_partition'] self.fs = Mock() self.trashcan = TrashPutCmd( stdout=None, stderr=None, getuid=lambda: 123, volumes=create_fake_volume_of(mount_points), now=datetime.now, environ=dict(), fs=self.fs, parent_path=os.path.dirname, realpath=lambda x: x) self.trashcan.reporter = self.reporter self.trashcan.logger = Mock() self.trashcan.ignore_missing = False
class TestGlobalTrashCan(unittest.TestCase): def setUp(self): self.reporter = Mock() self.fs = Mock() self.volumes = Mock() self.volumes.volume_of.return_value = '/' self.trashcan = TrashPutCmd(stdout=None, stderr=None, volumes=self.volumes, getuid=lambda: 123, now=datetime.now, environ=dict(), fs=self.fs, parent_path=os.path.dirname, realpath=lambda x: x) self.trashcan.reporter = self.reporter self.trashcan.logger = Mock() self.trashcan.ignore_missing = False def test_log_volume(self): self.trashcan.trash('a-dir/with-a-file', False) self.reporter.volume_of_file.assert_called_with('/') def test_should_report_when_trash_fail(self): self.fs.move.side_effect = IOError self.trashcan.trash('non-existent', False) self.reporter.unable_to_trash_file.assert_called_with('non-existent') def test_should_not_delete_a_dot_entru(self): self.trashcan.trash('.', False) self.reporter.unable_to_trash_dot_entries.assert_called_with('.') def test_bug(self): self.fs.mock_add_spec([ 'move', 'atomic_write', 'remove_file', 'ensure_dir', 'isdir', 'islink', 'has_sticky_bit', ], True) self.fs.islink.side_effect = (lambda path: {'/.Trash': False}[path]) self.volumes.volume_of.side_effect = (lambda path: { '/foo': '/', '': '/', '/.Trash/123': '/', }[path]) self.trashcan.trash('foo', False)
def setUp(self): self.reporter = Mock() self.fs = Mock() self.volumes = Mock() self.volumes.volume_of.return_value = '/' self.trashcan = TrashPutCmd(stdout=None, stderr=None, volumes=self.volumes, getuid=lambda: 123, now=datetime.now, environ=dict(), fs=self.fs, parent_path=os.path.dirname, realpath=lambda x: x) self.trashcan.reporter = self.reporter self.trashcan.logger = Mock() self.trashcan.ignore_missing = False
def setUp(self): parent_path = lambda _ : None volume_of = lambda _ : '/' self.try_trash_file_using_candidates = Mock() self.cmd = TrashPutCmd(None, None, {'XDG_DATA_HOME':'~/xdh'}, volume_of, parent_path, None, None, None, None) self.cmd.getuid = lambda : '123' self.cmd.try_trash_file_using_candidates = self.try_trash_file_using_candidates
def test(self): parent_path = lambda _:None class MyVolumes: def volume_of(self, _path): return '/volume' volumes = MyVolumes() realpath = lambda _: None fs = Mock(['move', 'atomic_write', 'remove_file', 'ensure_dir', 'isdir', 'islink', 'has_sticky_bit']) fs.islink.side_effect = lambda path: { '/volume/.Trash':False }[path] fs.has_sticky_bit.side_effect = lambda path: { '/volume/.Trash':False }[path] reporter = Mock(['volume_of_file', 'found_unsecure_trash_dir_unsticky', 'trash_dir_with_volume', 'file_has_been_trashed_in_as']) trashcan = TrashPutCmd(stdout=None, stderr=None, environ={}, volumes=volumes, fs=fs, getuid=lambda: 'uid', now=datetime.now, parent_path=parent_path, realpath=realpath) trashcan.reporter = reporter trashcan.ignore_missing = False trashcan.logger = Mock() trashcan.trash('') assert [ call('', '/volume/.Trash-uid') ] == reporter.file_has_been_trashed_in_as.mock_calls