@@ -113,13 +113,68 @@ def test_prefixes(self):
113113 out , err = p .communicate ()
114114 self .assertEqual (out .strip (), expected .encode ())
115115
116+ if sys .platform == 'win32' :
117+ ENV_SUBDIRS = (
118+ ('Scripts' ,),
119+ ('Include' ,),
120+ ('Lib' ,),
121+ ('Lib' , 'site-packages' ),
122+ )
123+ else :
124+ ENV_SUBDIRS = (
125+ ('bin' ,),
126+ ('include' ,),
127+ ('lib' ,),
128+ ('lib' , 'python%d.%d' % sys .version_info [:2 ]),
129+ ('lib' , 'python%d.%d' % sys .version_info [:2 ], 'site-packages' ),
130+ )
131+
132+ def create_contents (self , paths , filename ):
133+ """
134+ Create some files in the environment which are unrelated
135+ to the virtual environment.
136+ """
137+ for subdirs in paths :
138+ d = os .path .join (self .env_dir , * subdirs )
139+ os .mkdir (d )
140+ fn = os .path .join (d , filename )
141+ with open (fn , 'wb' ) as f :
142+ f .write (b'Still here?' )
143+
116144 def test_overwrite_existing (self ):
117145 """
118- Test control of overwriting an existing environment directory.
146+ Test creating environment in an existing directory.
119147 """
120- self .assertRaises (ValueError , venv .create , self .env_dir )
148+ self .create_contents (self .ENV_SUBDIRS , 'foo' )
149+ venv .create (self .env_dir )
150+ for subdirs in self .ENV_SUBDIRS :
151+ fn = os .path .join (self .env_dir , * (subdirs + ('foo' ,)))
152+ self .assertTrue (os .path .exists (fn ))
153+ with open (fn , 'rb' ) as f :
154+ self .assertEqual (f .read (), b'Still here?' )
155+
121156 builder = venv .EnvBuilder (clear = True )
122157 builder .create (self .env_dir )
158+ for subdirs in self .ENV_SUBDIRS :
159+ fn = os .path .join (self .env_dir , * (subdirs + ('foo' ,)))
160+ self .assertFalse (os .path .exists (fn ))
161+
162+ def clear_directory (self , path ):
163+ for fn in os .listdir (path ):
164+ fn = os .path .join (path , fn )
165+ if os .path .islink (fn ) or os .path .isfile (fn ):
166+ os .remove (fn )
167+ elif os .path .isdir (fn ):
168+ shutil .rmtree (fn )
169+
170+ def test_unoverwritable_fails (self ):
171+ #create a file clashing with directories in the env dir
172+ for paths in self .ENV_SUBDIRS [:3 ]:
173+ fn = os .path .join (self .env_dir , * paths )
174+ with open (fn , 'wb' ) as f :
175+ f .write (b'' )
176+ self .assertRaises ((ValueError , OSError ), venv .create , self .env_dir )
177+ self .clear_directory (self .env_dir )
123178
124179 def test_upgrade (self ):
125180 """
0 commit comments