public void testCopyRecursivelyFiles() throws IOException {
    	
    	Debug.println("fileio", "my tmpdir = " + tmpDir);
      
    	File thisTestWorkDir = new File(tmpDir, "testFrom");
    	File foo = null, bar = null;
    	File targetCopyDir = null;
    	File newFoo = null, newBar = null, bleah = null;
      	try {
      		thisTestWorkDir.delete();
      		thisTestWorkDir.mkdir();
      		foo = new File(thisTestWorkDir, "foo");
			foo.createNewFile();
			bleah = new File(thisTestWorkDir, "bleah");
			bleah.mkdir();
			bar = new File(thisTestWorkDir, "bleah/bar");
			bar.createNewFile();

      		targetCopyDir = new File(tmpDir, "testTo");
      		targetCopyDir.mkdir();
      		// Should be empty as yet.
      		assertEquals(0, targetCopyDir.listFiles().length);
      		
      		// Set up File objects for the things we expect the copy 
      		// routing to create; be sure they dont exist yet.
      		newFoo = new File(targetCopyDir, "foo");
      		assertFalse(newFoo.exists());
      		newBar = new File(targetCopyDir, "bleah/bar");
      		assertFalse(newBar.exists());
      		
      		FileIO.copyRecursively(thisTestWorkDir, targetCopyDir);

      		assertTrue(newFoo.exists());
      		assertTrue(bleah.exists());
      		assertTrue(newBar.exists());

      		// Should contain source files foo and bar, and the directory.
      		assertEquals(2, targetCopyDir.listFiles().length);
    	} finally {
    		// order matters
    		if (bar != null) bar.delete();
    		if (bleah != null) bleah.delete();
    		if (foo != null) foo.delete();
    		if (thisTestWorkDir != null) thisTestWorkDir.delete();
    		if (newFoo != null) newFoo.delete();
    		if (newBar != null) newBar.delete();
    		if (targetCopyDir != null) targetCopyDir.delete();
    	}
    }