1 /*
   2  * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /* @test
  25  * @bug 6808647
  26  * @summary Checks that a DirectoryStream's iterator returns the expected
  27  *    path when opening a directory by specifying only the drive letter.
  28  * @library ..
  29  */
  30 
  31 import java.nio.file.*;
  32 import java.io.File;
  33 import java.io.IOException;
  34 
  35 public class DriveLetter {
  36 
  37     public static void main(String[] args) throws IOException {
  38         String os = System.getProperty("os.name");
  39         if (!os.startsWith("Windows")) {
  40             System.out.println("This is Windows specific test");
  41             return;
  42         }
  43         String here = System.getProperty("user.dir");
  44         if (here.length() < 2 || here.charAt(1) != ':')
  45             throw new RuntimeException("Unable to determine drive letter");
  46 
  47         // create temporary file in current directory
  48         File tempFile = File.createTempFile("foo", "tmp", new File(here));
  49         try {
  50             // we should expect C:foo.tmp to be returned by iterator
  51             String drive = here.substring(0, 2);
  52             Path expected = Paths.get(drive).resolve(tempFile.getName());
  53 
  54             boolean found = false;
  55             Path dir = Paths.get(drive);
  56             try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
  57                 for (Path file : stream) {
  58                     if (file.equals(expected)) {
  59                         found = true;
  60                         break;
  61                     }
  62                 }
  63             }
  64             if (!found)
  65                 throw new RuntimeException("Temporary file not found???");
  66 
  67         } finally {
  68             tempFile.delete();
  69         }
  70     }
  71 }