diff options
author | Tim Golden <mail@timgolden.me.uk> | 2014-05-05 18:46:17 (GMT) |
---|---|---|
committer | Tim Golden <mail@timgolden.me.uk> | 2014-05-05 18:46:17 (GMT) |
commit | 0321cf25503e291eb4125411183e124f45793f64 (patch) | |
tree | 9e5db0d41a3f65874c8905e1e1506b5032c600b4 /Lib/test | |
parent | a4790965f477a77daff6a0c04aabdb2a6a51a239 (diff) | |
download | cpython-0321cf25503e291eb4125411183e124f45793f64.zip cpython-0321cf25503e291eb4125411183e124f45793f64.tar.gz cpython-0321cf25503e291eb4125411183e124f45793f64.tar.bz2 |
Issue18314 Allow unlink to remove junctions. Includes support for creating junctions. Patch by Kim Gräsman
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_os.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index e129bef..7d5ee69 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 @@ -1773,6 +1777,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 +2579,7 @@ def test_main(): RemoveDirsTests, CPUCountTests, FDInheritanceTests, + Win32JunctionTests, ) if __name__ == "__main__": |