test/java/nio/file/Files/probeContentType/Basic.java

Print this page
rev 12244 : 8129632: (fs) Files.probeContentType returns null on Mac OS X
Summary: Append a Uniform Type Identifier-based FileType Detector for Mac OS X
Reviewed-by: XXX

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -20,24 +20,24 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
 /* @test
- * @bug 4313887
+ * @bug 4313887 8129632
  * @summary Unit test for probeContentType method
  * @library ../..
  * @build Basic SimpleFileTypeDetector
  * @run main/othervm Basic
  */
 
 import java.nio.file.*;
 import java.io.*;
 
 /**
- * Uses Files.probeContentType to probe html file and custom file type.
+ * Uses Files.probeContentType to probe html file, custom file type, and minimal
+ * set of file extension to content type mappings.
  */
-
 public class Basic {
 
     static Path createHtmlFile() throws IOException {
         Path file = Files.createTempFile("foo", ".html");
         try (OutputStream out = Files.newOutputStream(file)) {

@@ -49,10 +49,43 @@
 
     static Path createGrapeFile() throws IOException {
         return Files.createTempFile("red", ".grape");
     }
 
+    static void checkContentTypes(String[] extensions, String[] expectedTypes)
+        throws IOException {
+        if (extensions.length != expectedTypes.length) {
+            throw new IllegalArgumentException("Parameter array lengths differ");
+        }
+
+        int failures = 0;
+        for (int i = 0; i < extensions.length; i++) {
+            String extension = extensions[i];
+            Path file = Files.createTempFile("foo", "." + extension);
+            try {
+                String type = Files.probeContentType(file);
+                if (type == null) {
+                    System.err.println("Content type of " + extension
+                            + " cannot be determined");
+                    failures++;
+                } else {
+                    if (!type.equals(expectedTypes[i])) {
+                        System.err.println("Content type: " + type
+                                + "; expected: " + expectedTypes[i]);
+                        failures++;
+                    }
+                }
+            } finally {
+                file.toFile().delete();
+            }
+        }
+
+        if (failures > 0) {
+            throw new RuntimeException("Test failed!");
+        }
+    }
+
     public static void main(String[] args) throws IOException {
 
         // exercise default file type detector
         Path file = createHtmlFile();
         try {

@@ -77,7 +110,28 @@
                 throw new RuntimeException("Unexpected type: " + type);
         } finally {
             Files.delete(file);
         }
 
+        // Verify that common file extensions are mapped to the correct content
+        // types taking into account OS-dependent minimum state.
+        String[] extensions;
+        String[] expectedTypes;
+        if (System.getProperty("os.name").toLowerCase().contains("windows")) {
+            extensions = new String[] {
+                "jpg", "png"
+            };
+            expectedTypes = new String[] {
+                "image/jpeg", "image/png"
+            };
+        } else {
+            extensions = new String[] {
+                "jpg", "mp3", "mp4", "pdf", "png"
+            };
+            expectedTypes = new String[] {
+                "image/jpeg", "audio/mpeg", "video/mp4", "application/pdf",
+                "image/png"
+            };
+        }
+        checkContentTypes (extensions, expectedTypes);
     }
 }