@@ -2072,6 +2072,125 @@ def test_copy_dangling_symlink(self):
20722072 self .assertTrue (target2 .joinpath ('link' ).is_symlink ())
20732073 self .assertEqual (target2 .joinpath ('link' ).readlink (), self .cls ('nonexistent' ))
20742074
2075+ def test_move_file (self ):
2076+ base = self .cls (self .base )
2077+ source = base / 'fileA'
2078+ source_text = source .read_text ()
2079+ target = base / 'fileA_moved'
2080+ result = source .move (target )
2081+ self .assertEqual (result , target )
2082+ self .assertFalse (source .exists ())
2083+ self .assertTrue (target .exists ())
2084+ self .assertEqual (source_text , target .read_text ())
2085+
2086+ def test_move_file_to_file (self ):
2087+ base = self .cls (self .base )
2088+ source = base / 'fileA'
2089+ source_text = source .read_text ()
2090+ target = base / 'dirB' / 'fileB'
2091+ result = source .move (target )
2092+ self .assertEqual (result , target )
2093+ self .assertFalse (source .exists ())
2094+ self .assertTrue (target .exists ())
2095+ self .assertEqual (source_text , target .read_text ())
2096+
2097+ def test_move_file_to_dir (self ):
2098+ base = self .cls (self .base )
2099+ source = base / 'fileA'
2100+ target = base / 'dirB'
2101+ self .assertRaises (OSError , source .move , target )
2102+
2103+ def test_move_file_to_itself (self ):
2104+ base = self .cls (self .base )
2105+ source = base / 'fileA'
2106+ self .assertRaises (OSError , source .move , source )
2107+
2108+ def test_move_dir (self ):
2109+ base = self .cls (self .base )
2110+ source = base / 'dirC'
2111+ target = base / 'dirC_moved'
2112+ result = source .move (target )
2113+ self .assertEqual (result , target )
2114+ self .assertFalse (source .exists ())
2115+ self .assertTrue (target .is_dir ())
2116+ self .assertTrue (target .joinpath ('dirD' ).is_dir ())
2117+ self .assertTrue (target .joinpath ('dirD' , 'fileD' ).is_file ())
2118+ self .assertEqual (target .joinpath ('dirD' , 'fileD' ).read_text (),
2119+ "this is file D\n " )
2120+ self .assertTrue (target .joinpath ('fileC' ).is_file ())
2121+ self .assertTrue (target .joinpath ('fileC' ).read_text (),
2122+ "this is file C\n " )
2123+
2124+ def test_move_dir_to_dir (self ):
2125+ base = self .cls (self .base )
2126+ source = base / 'dirC'
2127+ target = base / 'dirB'
2128+ self .assertRaises (OSError , source .move , target )
2129+ self .assertTrue (source .exists ())
2130+ self .assertTrue (target .exists ())
2131+
2132+ def test_move_dir_to_itself (self ):
2133+ base = self .cls (self .base )
2134+ source = base / 'dirC'
2135+ self .assertRaises (OSError , source .move , source )
2136+ self .assertTrue (source .exists ())
2137+
2138+ def test_move_dir_into_itself (self ):
2139+ base = self .cls (self .base )
2140+ source = base / 'dirC'
2141+ target = base / 'dirC' / 'bar'
2142+ self .assertRaises (OSError , source .move , target )
2143+ self .assertTrue (source .exists ())
2144+ self .assertFalse (target .exists ())
2145+
2146+ @needs_symlinks
2147+ def test_move_file_symlink (self ):
2148+ base = self .cls (self .base )
2149+ source = base / 'linkA'
2150+ source_readlink = source .readlink ()
2151+ target = base / 'linkA_moved'
2152+ result = source .move (target )
2153+ self .assertEqual (result , target )
2154+ self .assertFalse (source .exists ())
2155+ self .assertTrue (target .is_symlink ())
2156+ self .assertEqual (source_readlink , target .readlink ())
2157+
2158+ @needs_symlinks
2159+ def test_move_file_symlink_to_itself (self ):
2160+ base = self .cls (self .base )
2161+ source = base / 'linkA'
2162+ self .assertRaises (OSError , source .move , source )
2163+
2164+ @needs_symlinks
2165+ def test_move_dir_symlink (self ):
2166+ base = self .cls (self .base )
2167+ source = base / 'linkB'
2168+ source_readlink = source .readlink ()
2169+ target = base / 'linkB_moved'
2170+ result = source .move (target )
2171+ self .assertEqual (result , target )
2172+ self .assertFalse (source .exists ())
2173+ self .assertTrue (target .is_symlink ())
2174+ self .assertEqual (source_readlink , target .readlink ())
2175+
2176+ @needs_symlinks
2177+ def test_move_dir_symlink_to_itself (self ):
2178+ base = self .cls (self .base )
2179+ source = base / 'linkB'
2180+ self .assertRaises (OSError , source .move , source )
2181+
2182+ @needs_symlinks
2183+ def test_move_dangling_symlink (self ):
2184+ base = self .cls (self .base )
2185+ source = base / 'brokenLink'
2186+ source_readlink = source .readlink ()
2187+ target = base / 'brokenLink_moved'
2188+ result = source .move (target )
2189+ self .assertEqual (result , target )
2190+ self .assertFalse (source .exists ())
2191+ self .assertTrue (target .is_symlink ())
2192+ self .assertEqual (source_readlink , target .readlink ())
2193+
20752194 def test_iterdir (self ):
20762195 P = self .cls
20772196 p = P (self .base )
0 commit comments