Index: src/tests/pybin/test_run.py
===================================================================
--- src/tests/pybin/test_run.py	(revision b9c04946cb3139bb23092df4cfa353e135a976ff)
+++ src/tests/pybin/test_run.py	(revision 0300979dcd79625c45973163a1e4c179b2303223)
@@ -28,19 +28,18 @@
 
 	def prepare(self):
-		sh("mkdir -p %s" % os.path.join(self.path, '.err'))
-		sh("mkdir -p %s" % os.path.join(self.path, '.out'))
-		sh("mkdir -p %s" % os.path.join(self.path, '.in' ))
+		mkdir( (self.output_log(), self.error_log(), self.input()            ) )
+		rm   ( (self.output_log(), self.error_log(), self.target_executable()) )
 
 	def expect(self):
-		return ("%s.expect/%s%s.txt" % (os.path.join(settings.SRCDIR, self.path), self.name, '' if not self.arch else ".%s" % self.arch))
+		return os.path.normpath( os.path.join(settings.SRCDIR  , self.path, ".expect", "%s%s.txt" % (self.name,'' if not self.arch else ".%s" % self.arch)) )
 
 	def error_log(self):
-		return ("%s.err/%s.log"    % (os.path.join(settings.BUILDDIR, self.path), self.name))
+		return os.path.normpath( os.path.join(settings.BUILDDIR, self.path, ".err"   , "%s.log" % self.name) )
 
 	def output_log(self):
-		return ("%s.out/%s.log"    % (os.path.join(settings.BUILDDIR, self.path), self.name))
+		return os.path.normpath( os.path.join(settings.BUILDDIR, self.path, ".out"   , "%s.log" % self.name) )
 
 	def input(self):
-		return ("%s.in/%s.txt"     % (os.path.join(settings.SRCDIR, self.path), self.name))
+		return os.path.normpath( os.path.join(settings.SRCDIR  , self.path, ".in"    , "%s.txt" % self.name) )
 
 	def target_output(self):
@@ -48,8 +47,8 @@
 
 	def target(self):
-		return os.path.join(self.path, self.name)
+		return os.path.normpath( os.path.join(self.path, self.name) )
 
 	def target_executable(self):
-		return os.path.join(settings.BUILDDIR, self.path, self.name)
+		return os.path.normpath( os.path.join(settings.BUILDDIR, self.path, self.name) )
 
 	@classmethod
@@ -61,5 +60,5 @@
 		test = Test()
 		test.name = os.path.basename(target)
-		test.path = os.path.dirname (target)
+		test.path = os.path.relpath (os.path.dirname(target), settings.SRCDIR)
 		test.arch = settings.arch.toString() if settings.arch.cross_compile else ''
 		return test
Index: src/tests/pybin/tools.py
===================================================================
--- src/tests/pybin/tools.py	(revision b9c04946cb3139bb23092df4cfa353e135a976ff)
+++ src/tests/pybin/tools.py	(revision 0300979dcd79625c45973163a1e4c179b2303223)
@@ -57,4 +57,12 @@
 	except TypeError:
 		sh("rm -f %s > /dev/null 2>&1" % files )
+
+# Create 1 or more directory
+def mkdir( files ):
+	try:
+		for file in files:
+			sh("mkdir -p %s" % os.path.dirname(file) )
+	except TypeError:
+		sh("mkdir -p %s" % os.path.dirname(files) )
 
 def chdir( dest = __main__.__file__ ):
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision b9c04946cb3139bb23092df4cfa353e135a976ff)
+++ src/tests/test.py	(revision 0300979dcd79625c45973163a1e4c179b2303223)
@@ -64,5 +64,5 @@
 			testname = canonicalPath( testname )
 			if Test.valid_name(testname):
-				found = [test for test in allTests if test.target() == testname]
+				found = [test for test in allTests if canonicalPath( test.target() ) == testname]
 				tests.append( found[0] if len(found) == 1 else Test.from_target(testname) )
 			else :
@@ -137,7 +137,4 @@
 	test.prepare()
 
-	# remove any outputs from the previous tests to prevent side effects
-	rm( (out_file, err_file, exe_file) )
-
 	# build, skipping to next test on error
 	before = time.time()
