diff options
Diffstat (limited to 'Lib/test/test_os.py')
| -rw-r--r-- | Lib/test/test_os.py | 58 | 
1 files changed, 58 insertions, 0 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index e129bef..f559841 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -39,6 +39,10 @@ try:      import fcntl  except ImportError:      fcntl = None +try: +    import _winapi +except ImportError: +    _winapi = None  from test.script_helper import assert_python_ok @@ -526,6 +530,28 @@ class StatAttributeTests(unittest.TestCase):              os.stat(r)          self.assertEqual(ctx.exception.errno, errno.EBADF) +    def check_file_attributes(self, result): +        self.assertTrue(hasattr(result, 'st_file_attributes')) +        self.assertTrue(isinstance(result.st_file_attributes, int)) +        self.assertTrue(0 <= result.st_file_attributes <= 0xFFFFFFFF) + +    @unittest.skipUnless(sys.platform == "win32", +                         "st_file_attributes is Win32 specific") +    def test_file_attributes(self): +        # test file st_file_attributes (FILE_ATTRIBUTE_DIRECTORY not set) +        result = os.stat(self.fname) +        self.check_file_attributes(result) +        self.assertEqual( +            result.st_file_attributes & stat.FILE_ATTRIBUTE_DIRECTORY, +            0) + +        # test directory st_file_attributes (FILE_ATTRIBUTE_DIRECTORY set) +        result = os.stat(support.TESTFN) +        self.check_file_attributes(result) +        self.assertEqual( +            result.st_file_attributes & stat.FILE_ATTRIBUTE_DIRECTORY, +            stat.FILE_ATTRIBUTE_DIRECTORY) +  from test import mapping_tests  class EnvironTests(mapping_tests.BasicTestMappingProtocol): @@ -1773,6 +1799,37 @@ class Win32SymlinkTests(unittest.TestCase):              shutil.rmtree(level1) +@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests") +class Win32JunctionTests(unittest.TestCase): +    junction = 'junctiontest' +    junction_target = os.path.dirname(os.path.abspath(__file__)) + +    def setUp(self): +        assert os.path.exists(self.junction_target) +        assert not os.path.exists(self.junction) + +    def tearDown(self): +        if os.path.exists(self.junction): +            # os.rmdir delegates to Windows' RemoveDirectoryW, +            # which removes junction points safely. +            os.rmdir(self.junction) + +    def test_create_junction(self): +        _winapi.CreateJunction(self.junction_target, self.junction) +        self.assertTrue(os.path.exists(self.junction)) +        self.assertTrue(os.path.isdir(self.junction)) + +        # Junctions are not recognized as links. +        self.assertFalse(os.path.islink(self.junction)) + +    def test_unlink_removes_junction(self): +        _winapi.CreateJunction(self.junction_target, self.junction) +        self.assertTrue(os.path.exists(self.junction)) + +        os.unlink(self.junction) +        self.assertFalse(os.path.exists(self.junction)) + +  @support.skip_unless_symlink  class NonLocalSymlinkTests(unittest.TestCase): @@ -2544,6 +2601,7 @@ def test_main():          RemoveDirsTests,          CPUCountTests,          FDInheritanceTests, +        Win32JunctionTests,      )  if __name__ == "__main__":  | 
