You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/04/22 17:07:54 UTC

svn commit: r1095940 - in /lucene/dev/branches/branch_3x/lucene/backwards: ./ src/test-framework/org/apache/lucene/util/ src/test/org/apache/lucene/index/ src/test/org/apache/lucene/store/

Author: rmuir
Date: Fri Apr 22 15:07:54 2011
New Revision: 1095940

URL: http://svn.apache.org/viewvc?rev=1095940&view=rev
Log:
LUCENE-2796: Lucene tests need to clean up after themselves

Modified:
    lucene/dev/branches/branch_3x/lucene/backwards/   (props changed)
    lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/_TestUtil.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestCompoundFile.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestFieldsReader.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterLockRelease.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterOnJRECrash.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestDirectory.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestMultiMMap.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestRAMDirectory.java
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/LuceneTestCase.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/LuceneTestCase.java Fri Apr 22 15:07:54 2011
@@ -129,6 +129,9 @@ public abstract class LuceneTestCase ext
     TEMP_DIR = new File(s);
     TEMP_DIR.mkdirs();
   }
+  
+  /** set of directories we created, in afterclass we try to clean these up */
+  static final Set<String> tempDirs = Collections.synchronizedSet(new HashSet<String>());
 
   // by default we randomly pick a different codec for
   // each test case (non-J4 tests) and each test class (J4
@@ -210,6 +213,7 @@ public abstract class LuceneTestCase ext
   public static void beforeClassLuceneTestCaseJ4() {
     staticSeed = "random".equals(TEST_SEED) ? seedRand.nextLong() : TwoLongs.fromString(TEST_SEED).l1;
     random.setSeed(staticSeed);
+    tempDirs.clear();
     stores = Collections.synchronizedMap(new IdentityHashMap<MockDirectoryWrapper,StackTraceElement[]>());
     // this code consumes randoms where 4.0's lucenetestcase would: to make seeds work across both branches.
     // TODO: doesn't completely work, because what if we get mockrandom codec?!
@@ -278,6 +282,16 @@ public abstract class LuceneTestCase ext
           + "free=" + Runtime.getRuntime().freeMemory() + ","
           + "total=" + Runtime.getRuntime().totalMemory());
     }
+    // clear out any temp directories if we can
+    if (!testsFailed) {
+      for (String path : tempDirs) {
+        try {
+          _TestUtil.rmDir(new File(path));
+        } catch (IOException e) {
+          e.printStackTrace();
+        }
+      }
+    }
   }
 
   private static boolean testsFailed; /* true if any tests failed */
@@ -912,6 +926,7 @@ public abstract class LuceneTestCase ext
         final File tmpFile = File.createTempFile("test", "tmp", TEMP_DIR);
         tmpFile.delete();
         tmpFile.mkdir();
+        tempDirs.add(tmpFile.getAbsolutePath());
         return newFSDirectoryImpl(clazz.asSubclass(FSDirectory.class), tmpFile, null);
       }
 

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/_TestUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/_TestUtil.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/_TestUtil.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/org/apache/lucene/util/_TestUtil.java Fri Apr 22 15:07:54 2011
@@ -46,7 +46,9 @@ public class _TestUtil {
   /** Returns temp dir, containing String arg in its name;
    *  does not create the directory. */
   public static File getTempDir(String desc) {
-    return new File(LuceneTestCase.TEMP_DIR, desc + "." + new Random().nextLong());
+    File f = new File(LuceneTestCase.TEMP_DIR, desc + "." + new Random().nextLong());
+    LuceneTestCase.tempDirs.add(f.getAbsolutePath());
+    return f;
   }
 
   /**
@@ -81,6 +83,7 @@ public class _TestUtil {
     rmDir(destDir);
     
     destDir.mkdir();
+    LuceneTestCase.tempDirs.add(destDir.getAbsolutePath());
     
     while (entries.hasMoreElements()) {
       ZipEntry entry = entries.nextElement();

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestCompoundFile.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestCompoundFile.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestCompoundFile.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestCompoundFile.java Fri Apr 22 15:07:54 2011
@@ -57,8 +57,7 @@ public class TestCompoundFile extends Lu
     @Override
     public void setUp() throws Exception {
        super.setUp();
-       File file = new File(TEMP_DIR, "testIndex");
-       _TestUtil.rmDir(file);
+       File file = _TestUtil.getTempDir("testIndex");
        // use a simple FSDir here, to be sure to have SimpleFSInputs
        dir = new SimpleFSDirectory(file,null);
     }
@@ -66,7 +65,6 @@ public class TestCompoundFile extends Lu
     @Override
     public void tearDown() throws Exception {
        dir.close();
-       _TestUtil.rmDir(new File(TEMP_DIR, "testIndex"));
        super.tearDown();
     }
 

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestDoc.java Fri Apr 22 15:07:54 2011
@@ -35,6 +35,7 @@ import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util._TestUtil;
 
 /** JUnit adaptation of an older test case DocTest. */
 public class TestDoc extends LuceneTestCase {
@@ -54,10 +55,10 @@ public class TestDoc extends LuceneTestC
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        workDir = new File(TEMP_DIR,"TestDoc");
+        workDir = _TestUtil.getTempDir("TestDoc");
         workDir.mkdirs();
 
-        indexDir = new File(workDir, "testIndex");
+        indexDir = _TestUtil.getTempDir("testIndex");
         indexDir.mkdirs();
 
         Directory directory = newFSDirectory(indexDir);

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestFieldsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestFieldsReader.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestFieldsReader.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestFieldsReader.java Fri Apr 22 15:07:54 2011
@@ -288,8 +288,7 @@ public class TestFieldsReader extends Lu
    */
   public void testLazyPerformance() throws Exception {
     String userName = System.getProperty("user.name");
-    File file = new File(TEMP_DIR, "lazyDir" + userName);
-    _TestUtil.rmDir(file);
+    File file = _TestUtil.getTempDir("lazyDir" + userName);
     Directory tmpDir = newFSDirectory(file);
     assertTrue(tmpDir != null);
 
@@ -470,7 +469,7 @@ public class TestFieldsReader extends Lu
 
   // LUCENE-1262
   public void testExceptions() throws Throwable {
-    File indexDir = new File(TEMP_DIR, "testfieldswriterexceptions");
+    File indexDir = _TestUtil.getTempDir("testfieldswriterexceptions");
 
     try {
       Directory dir = new FaultyFSDirectory(indexDir);

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java Fri Apr 22 15:07:54 2011
@@ -1110,7 +1110,7 @@ public class TestIndexReader extends Luc
     }
 
     public void testOpenReaderAfterDelete() throws IOException {
-      File dirFile = new File(TEMP_DIR, "deletetest");
+      File dirFile = _TestUtil.getTempDir("deletetest");
       Directory dir = newFSDirectory(dirFile);
       try {
         IndexReader.open(dir, false);

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java Fri Apr 22 15:07:54 2011
@@ -1084,7 +1084,7 @@ public class TestIndexReaderReopen exten
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    indexDir = new File(TEMP_DIR, "IndexReaderReopen");
+    indexDir = _TestUtil.getTempDir("IndexReaderReopen");
   }
   
   public void testCloseOrig() throws Throwable {

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java Fri Apr 22 15:07:54 2011
@@ -2743,7 +2743,7 @@ public class TestIndexWriter extends Luc
     // Tests that if FSDir is opened w/ a NoLockFactory (or SingleInstanceLF),
     // then IndexWriter ctor succeeds. Previously (LUCENE-2386) it failed 
     // when listAll() was called in IndexFileDeleter.
-    Directory dir = newFSDirectory(new File(TEMP_DIR, "emptyFSDirNoLock"), NoLockFactory.getNoLockFactory());
+    Directory dir = newFSDirectory(_TestUtil.getTempDir("emptyFSDirNoLock"), NoLockFactory.getNoLockFactory());
     new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))).close();
     dir.close();
   }

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterLockRelease.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterLockRelease.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterLockRelease.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterLockRelease.java Fri Apr 22 15:07:54 2011
@@ -22,6 +22,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.util._TestUtil;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.store.Directory;
@@ -39,7 +40,7 @@ public class TestIndexWriterLockRelease 
     public void setUp() throws Exception {
         super.setUp();
         if (this.__test_dir == null) {
-            this.__test_dir = new File(TEMP_DIR, "testIndexWriter");
+            this.__test_dir = _TestUtil.getTempDir("testIndexWriter");
 
             if (this.__test_dir.exists()) {
                 throw new IOException("test directory \"" + this.__test_dir.getPath() + "\" already exists (please remove by hand)");

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterOnJRECrash.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterOnJRECrash.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterOnJRECrash.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterOnJRECrash.java Fri Apr 22 15:07:54 2011
@@ -41,7 +41,7 @@ public class TestIndexWriterOnJRECrash e
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    tempDir = File.createTempFile("jrecrash", "tmp", TEMP_DIR);
+    tempDir = _TestUtil.getTempDir("jrecrash");
     tempDir.delete();
     tempDir.mkdir();
   }

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java Fri Apr 22 15:07:54 2011
@@ -240,7 +240,7 @@ public class TestBufferedIndexInput exte
     }
 
     public void testSetBufferSize() throws IOException {
-      File indexDir = new File(TEMP_DIR, "testSetBufferSize");
+      File indexDir = _TestUtil.getTempDir("testSetBufferSize");
       MockFSDirectory dir = new MockFSDirectory(indexDir, random);
       try {
         IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestDirectory.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestDirectory.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestDirectory.java Fri Apr 22 15:07:54 2011
@@ -42,7 +42,7 @@ public class TestDirectory extends Lucen
   // Test that different instances of FSDirectory can coexist on the same
   // path, can read, write, and lock files.
   public void testDirectInstantiation() throws Exception {
-    File path = new File(TEMP_DIR, "testDirectInstantiation");
+    File path = _TestUtil.getTempDir("testDirectInstantiation");
 
     int sz = 3;
     Directory[] dirs = new Directory[sz];
@@ -134,7 +134,7 @@ public class TestDirectory extends Lucen
 
   // LUCENE-1468
   public void testFSDirectoryFilter() throws IOException {
-    checkDirectoryFilter(newFSDirectory(new File(TEMP_DIR,"test")));
+    checkDirectoryFilter(newFSDirectory(_TestUtil.getTempDir("test")));
   }
 
   // LUCENE-1468
@@ -151,7 +151,7 @@ public class TestDirectory extends Lucen
 
   // LUCENE-1468
   public void testCopySubdir() throws Throwable {
-    File path = new File(TEMP_DIR, "testsubdir");
+    File path = _TestUtil.getTempDir("testsubdir");
     try {
       path.mkdirs();
       new File(path, "subdir").mkdirs();
@@ -164,7 +164,7 @@ public class TestDirectory extends Lucen
 
   // LUCENE-1468
   public void testNotDirectory() throws Throwable {
-    File path = new File(TEMP_DIR, "testnotdir");
+    File path = _TestUtil.getTempDir("testnotdir");
     Directory fsDir = new SimpleFSDirectory(path, null);
     try {
       IndexOutput out = fsDir.createOutput("afile");

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestMultiMMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestMultiMMap.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestMultiMMap.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestMultiMMap.java Fri Apr 22 15:07:54 2011
@@ -40,7 +40,7 @@ public class TestMultiMMap extends Lucen
   @Override
   public void setUp() throws Exception {
       super.setUp();
-      workDir = new File(TEMP_DIR, "TestMultiMMap");
+      workDir = _TestUtil.getTempDir("TestMultiMMap");
       workDir.mkdirs();
   }
   

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestRAMDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestRAMDirectory.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestRAMDirectory.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestRAMDirectory.java Fri Apr 22 15:07:54 2011
@@ -24,6 +24,7 @@ import java.io.ObjectOutputStream;
 import java.io.ByteArrayOutputStream;
 
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util._TestUtil;
 import org.apache.lucene.analysis.WhitespaceAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
@@ -49,7 +50,7 @@ public class TestRAMDirectory extends Lu
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    indexDir = new File(TEMP_DIR, "RAMDirIndex");
+    indexDir = _TestUtil.getTempDir("RAMDirIndex");
     
     Directory dir = newFSDirectory(indexDir);
     IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(

Modified: lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java?rev=1095940&r1=1095939&r2=1095940&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java (original)
+++ lucene/dev/branches/branch_3x/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java Fri Apr 22 15:07:54 2011
@@ -21,6 +21,7 @@ import java.util.Collections;
 import java.io.File;
 
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util._TestUtil;
 
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.document.Document;
@@ -60,7 +61,7 @@ public class TestWindowsMMap extends Luc
   }
   
   private final static String storePathname = 
-    new File(TEMP_DIR,"testLuceneMmap").getAbsolutePath();
+   _TestUtil.getTempDir("testLuceneMmap").getAbsolutePath();
 
   public void testMmapIndex() throws Exception {
     // sometimes the directory is not cleaned by rmDir, because on Windows it