# Copyright (C) 2011 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. # * Neither the name of Google Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import os import re import unittest from webkitpy.common.system import filesystem_mock from webkitpy.common.system import filesystem_unittest class MockFileSystemTest(unittest.TestCase, filesystem_unittest.GenericFileSystemTests): def setUp(self): self.fs = filesystem_mock.MockFileSystem() self.setup_generic_test_dir() def tearDown(self): self.teardown_generic_test_dir() self.fs = None def quick_check(self, test_fn, good_fn, *tests): for test in tests: if hasattr(test, '__iter__'): expected = good_fn(*test) actual = test_fn(*test) else: expected = good_fn(test) actual = test_fn(test) self.assertEqual(expected, actual, 'given %s, expected %s, got %s' % (repr(test), repr(expected), repr(actual))) def test_join(self): self.quick_check(self.fs.join, self.fs._slow_but_correct_join, ('',), ('', 'bar'), ('foo',), ('foo/',), ('foo', ''), ('foo/', ''), ('foo', 'bar'), ('foo', '/bar'), ) def test_normpath(self): self.quick_check(self.fs.normpath, self.fs._slow_but_correct_normpath, '', '/', '.', '/.', 'foo', 'foo/', 'foo/.', 'foo/bar', '/foo', 'foo/../bar', 'foo/../bar/baz', '../foo') def test_dirs_under(self): FAKE_FILES = { '/tests/test1.txt': '', '/tests/test3/test2/test.txt': 'test', '/tests/test2/test.txt': 'test'} fs = filesystem_mock.MockFileSystem(files=FAKE_FILES) self.assertEquals(fs.dirs_under('/tests'), ['/tests', '/tests/test2', '/tests/test3', '/tests/test3/test2']) def filter_dir(fs, dirpath): return fs.basename(dirpath) != 'test2' self.assertEquals(fs.dirs_under('/tests', filter_dir), ['/tests', '/tests/test3'])