# Created By: Virgil Dupras # Created On: 2008-01-08 # Copyright 2015 Hardcoded Software (http://www.hardcoded.net) # This software is licensed under the "GPLv3" License as described in the "LICENSE" file, # which should be included with this package. The terms are also available at # http://www.gnu.org/licenses/gpl-3.0.html from ..conflict import * from ..path import Path from ..testutil import eq_ class TestCase_GetConflictedName: def test_simple(self): name = get_conflicted_name(['bar'], 'bar') eq_('[000] bar', name) name = get_conflicted_name(['bar', '[000] bar'], 'bar') eq_('[001] bar', name) def test_no_conflict(self): name = get_conflicted_name(['bar'], 'foobar') eq_('foobar', name) def test_fourth_digit(self): # This test is long because every time we have to add a conflicted name, # a test must be made for every other conflicted name existing... # Anyway, this has very few chances to happen. names = ['bar'] + ['[%03d] bar' % i for i in range(1000)] name = get_conflicted_name(names, 'bar') eq_('[1000] bar', name) def test_auto_unconflict(self): # Automatically unconflict the name if it's already conflicted. name = get_conflicted_name([], '[000] foobar') eq_('foobar', name) name = get_conflicted_name(['bar'], '[001] bar') eq_('[000] bar', name) class TestCase_GetUnconflictedName: def test_main(self): eq_('foobar',get_unconflicted_name('[000] foobar')) eq_('foobar',get_unconflicted_name('[9999] foobar')) eq_('[000]foobar',get_unconflicted_name('[000]foobar')) eq_('[000a] foobar',get_unconflicted_name('[000a] foobar')) eq_('foobar',get_unconflicted_name('foobar')) eq_('foo [000] bar',get_unconflicted_name('foo [000] bar')) class TestCase_IsConflicted: def test_main(self): assert is_conflicted('[000] foobar') assert is_conflicted('[9999] foobar') assert not is_conflicted('[000]foobar') assert not is_conflicted('[000a] foobar') assert not is_conflicted('foobar') assert not is_conflicted('foo [000] bar') class TestCase_move_copy: def pytest_funcarg__do_setup(self, request): tmpdir = request.getfuncargvalue('tmpdir') self.path = Path(str(tmpdir)) self.path['foo'].open('w').close() self.path['bar'].open('w').close() self.path['dir'].mkdir() def test_move_no_conflict(self, do_setup): smart_move(self.path + 'foo', self.path + 'baz') assert self.path['baz'].exists() assert not self.path['foo'].exists() def test_copy_no_conflict(self, do_setup): # No need to duplicate the rest of the tests... Let's just test on move smart_copy(self.path + 'foo', self.path + 'baz') assert self.path['baz'].exists() assert self.path['foo'].exists() def test_move_no_conflict_dest_is_dir(self, do_setup): smart_move(self.path + 'foo', self.path + 'dir') assert self.path['dir']['foo'].exists() assert not self.path['foo'].exists() def test_move_conflict(self, do_setup): smart_move(self.path + 'foo', self.path + 'bar') assert self.path['[000] bar'].exists() assert not self.path['foo'].exists() def test_move_conflict_dest_is_dir(self, do_setup): smart_move(self.path['foo'], self.path['dir']) smart_move(self.path['bar'], self.path['foo']) smart_move(self.path['foo'], self.path['dir']) assert self.path['dir']['foo'].exists() assert self.path['dir']['[000] foo'].exists() assert not self.path['foo'].exists() assert not self.path['bar'].exists() def test_copy_folder(self, tmpdir): # smart_copy also works on folders path = Path(str(tmpdir)) path['foo'].mkdir() path['bar'].mkdir() smart_copy(path['foo'], path['bar']) # no crash assert path['[000] bar'].exists()