test/java/io/pathNames/General.java

Print this page

        

@@ -37,16 +37,44 @@
 
     private static boolean win32 = (File.separatorChar == '\\');
 
     private static int gensymCounter = 0;
 
+    protected static final String userDir = System.getProperty("user.dir");
+
+    protected static String baseDir = null;
+    protected static String relative = null;
 
     /* Generate a filename unique to this run */
-    protected static String gensym() {
+    private static String gensym() {
         return "x." + ++gensymCounter;
     }
 
+    /**
+     * Create files and folders in the test working directory.
+     * The purpose is to make sure the test will not go out of
+     * its user dir when walking the file tree.
+     *
+     * @param  depth    The number of directory levels to be created under
+     *                  the user directory. It should be the maximum value
+     *                  of the depths passed to checkNames method (including
+     *                  direct or indirect calling) in a whole test.
+     */
+    protected static void initTestData(int depth) throws IOException {
+        File parent = new File(userDir);
+        for (int i = 0; i < depth; i++) {
+            File tmp = new File(parent, gensym());
+            tmp.createNewFile();
+            tmp = new File(parent, gensym());
+            if (tmp.mkdir())
+                parent = tmp;
+            else
+                throw new IOException("Fail to create directory, " + tmp);
+        }
+        baseDir = parent.getAbsolutePath();
+        relative = baseDir.substring(userDir.length() + 1);
+    }
 
     /**
      * Find a file in the given subdirectory, or descend into further
      * subdirectories, if any, if no file is found here.  Return null if no
      * file can be found anywhere beneath the given subdirectory.

@@ -212,11 +240,11 @@
     }
 
 
 
     /** Hash table of input pathnames, used to detect duplicates */
-    private static Hashtable checked = new Hashtable();
+    private static Hashtable<String, String> checked = new Hashtable<>();
 
     /**
      * Check the given pathname.  Its canonical pathname should be the given
      * answer.  If the path names a file that exists and is readable, then
      * FileInputStream and RandomAccessFile should both be able to open it.

@@ -270,11 +298,11 @@
      *     String ask        Input pathname to be passed to the check method
      */
 
 
     /** Check a single slash case, plus its children */
-    public static void checkSlash(int depth, boolean create,
+    private static void checkSlash(int depth, boolean create,
                                   String ans, String ask, String slash)
         throws Exception
     {
         check(ans, ask + slash);
         checkNames(depth, create,