diff --git a/borg/testsuite/helpers.py b/borg/testsuite/helpers.py index e97c4ed33..e766ed441 100644 --- a/borg/testsuite/helpers.py +++ b/borg/testsuite/helpers.py @@ -160,8 +160,23 @@ class FormatTimedeltaTestCase(BaseTestCase): ) -class PatternTestCase(BaseTestCase): - +@pytest.mark.parametrize("paths, excludes, expected", [ + # "None" means all files, i.e. none excluded + ([], [], None), + (['/'], [], None), + (['/'], ['/h'], None), + (['/'], ['/home'], ['/etc/passwd', '/etc/hosts', '/var/log/messages', '/var/log/dmesg']), + (['/'], ['/home/'], ['/etc/passwd', '/etc/hosts', '/home', '/var/log/messages', '/var/log/dmesg']), + (['/home/u'], [], []), + (['/', '/home', '/etc/hosts'], ['/'], []), + (['/home/'], ['/home/user2'], ['/home', '/home/user/.profile', '/home/user/.bashrc']), + (['/'], ['*.profile', '/var/log'], + ['/etc/passwd', '/etc/hosts', '/home', '/home/user/.bashrc', '/home/user2/public_html/index.html']), + (['/'], ['/home/*/public_html', '*.profile', '*/log/*'], + ['/etc/passwd', '/etc/hosts', '/home', '/home/user/.bashrc']), + (['/etc/', '/var'], ['dmesg'], ['/etc/passwd', '/etc/hosts', '/var/log/messages', '/var/log/dmesg']), + ]) +def test_patterns(paths, excludes, expected): files = [ '/etc/passwd', '/etc/hosts', '/home', '/home/user/.profile', '/home/user/.bashrc', @@ -169,28 +184,10 @@ class PatternTestCase(BaseTestCase): '/var/log/messages', '/var/log/dmesg', ] - def evaluate(self, paths, excludes): - patterns = adjust_patterns(paths, [ExcludePattern(p) for p in excludes]) - return [path for path in self.files if not exclude_path(path, patterns)] + patterns = adjust_patterns(paths, [ExcludePattern(p) for p in excludes]) + included = [path for path in files if not exclude_path(path, patterns)] - def test(self): - self.assert_equal(self.evaluate(['/'], []), self.files) - self.assert_equal(self.evaluate([], []), self.files) - self.assert_equal(self.evaluate(['/'], ['/h']), self.files) - self.assert_equal(self.evaluate(['/'], ['/home']), - ['/etc/passwd', '/etc/hosts', '/var/log/messages', '/var/log/dmesg']) - self.assert_equal(self.evaluate(['/'], ['/home/']), - ['/etc/passwd', '/etc/hosts', '/home', '/var/log/messages', '/var/log/dmesg']) - self.assert_equal(self.evaluate(['/home/u'], []), []) - self.assert_equal(self.evaluate(['/', '/home', '/etc/hosts'], ['/']), []) - self.assert_equal(self.evaluate(['/home/'], ['/home/user2']), - ['/home', '/home/user/.profile', '/home/user/.bashrc']) - self.assert_equal(self.evaluate(['/'], ['*.profile', '/var/log']), - ['/etc/passwd', '/etc/hosts', '/home', '/home/user/.bashrc', '/home/user2/public_html/index.html']) - self.assert_equal(self.evaluate(['/'], ['/home/*/public_html', '*.profile', '*/log/*']), - ['/etc/passwd', '/etc/hosts', '/home', '/home/user/.bashrc']) - self.assert_equal(self.evaluate(['/etc/', '/var'], ['dmesg']), - ['/etc/passwd', '/etc/hosts', '/var/log/messages', '/var/log/dmesg']) + assert included == (files if expected is None else expected) @pytest.mark.skipif(sys.platform in ('darwin',), reason='all but OS X test')