Пример #1
0
 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()
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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
Пример #5
0
 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))
Пример #6
0
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)
Пример #7
0
    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')
Пример #8
0
 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
Пример #9
0
 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()
Пример #10
0
 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()
Пример #11
0
    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')
Пример #12
0
 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()
Пример #13
0
    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
Пример #14
0
 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))
Пример #15
0
 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()
Пример #16
0
 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()
Пример #17
0
 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
Пример #18
0
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)
Пример #19
0
    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
Пример #20
0
 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
Пример #21
0
 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