test/langtools/tools/javadoc/api/basic/GetTask_FileManagerTest.java
branchniosocketimpl-branch
changeset 57208 7a45c67e73d0
parent 57207 30695f27d7ea
parent 53902 7a6fd71449e7
child 57210 a67ea4f53e56
equal deleted inserted replaced
57207:30695f27d7ea 57208:7a45c67e73d0
     1 /*
       
     2  * Copyright (c) 2012, 2015, 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 /*
       
    25  * @test
       
    26  * @bug 6493690 8024434
       
    27  * @summary javadoc should have a javax.tools.Tool service provider
       
    28  * @modules jdk.compiler/com.sun.tools.javac.file
       
    29  *          jdk.compiler/com.sun.tools.javac.util
       
    30  * @build APITest
       
    31  * @run main GetTask_FileManagerTest
       
    32  */
       
    33 
       
    34 import java.io.File;
       
    35 import java.io.IOException;
       
    36 import java.nio.file.Path;
       
    37 import java.util.Arrays;
       
    38 import java.util.Set;
       
    39 
       
    40 import javax.tools.DocumentationTool;
       
    41 import javax.tools.DocumentationTool.DocumentationTask;
       
    42 import javax.tools.FileObject;
       
    43 import javax.tools.ForwardingJavaFileManager;
       
    44 import javax.tools.JavaFileObject;
       
    45 import javax.tools.JavaFileObject.Kind;
       
    46 import javax.tools.StandardJavaFileManager;
       
    47 import javax.tools.ToolProvider;
       
    48 
       
    49 import com.sun.tools.javac.file.JavacFileManager;
       
    50 import com.sun.tools.javac.util.Context;
       
    51 
       
    52 /**
       
    53  * Tests for DocumentationTool.getTask  fileManager  parameter.
       
    54  */
       
    55 public class GetTask_FileManagerTest extends APITest {
       
    56     public static void main(String... args) throws Exception {
       
    57         new GetTask_FileManagerTest().run();
       
    58     }
       
    59 
       
    60     /**
       
    61      * Verify that an alternate file manager can be specified:
       
    62      * in this case, a TestFileManager.
       
    63      */
       
    64     @Test
       
    65     public void testFileManager() throws Exception {
       
    66         JavaFileObject srcFile = createSimpleJavaFileObject();
       
    67         DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
       
    68         StandardJavaFileManager fm = new TestFileManager();
       
    69         File outDir = getOutDir();
       
    70         fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
       
    71         Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
       
    72         DocumentationTask t = tool.getTask(null, fm, null, null, Arrays.asList("-verbose"), files);
       
    73         if (t.call()) {
       
    74             System.err.println("task succeeded");
       
    75             checkFiles(outDir, standardExpectFiles);
       
    76         } else {
       
    77             throw new Exception("task failed");
       
    78         }
       
    79     }
       
    80 
       
    81     /**
       
    82      * Verify that exceptions from a bad file manager are thrown as expected.
       
    83      */
       
    84     @Test
       
    85     public void testBadFileManager() throws Exception {
       
    86         JavaFileObject srcFile = createSimpleJavaFileObject();
       
    87         DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
       
    88         StandardJavaFileManager fm = new TestFileManager() {
       
    89             @Override
       
    90             public Iterable<JavaFileObject> list(Location location,
       
    91                     String packageName,
       
    92                     Set<Kind> kinds,
       
    93                     boolean recurse)
       
    94                     throws IOException {
       
    95                 throw new UnexpectedError();
       
    96             }
       
    97         };
       
    98         fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(getOutDir()));
       
    99         Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
       
   100         DocumentationTask t = tool.getTask(null, fm, null, null, null, files);
       
   101         try {
       
   102             t.call();
       
   103             error("call completed without exception");
       
   104         } catch (RuntimeException e) {
       
   105             Throwable c = e.getCause();
       
   106             if (c.getClass() == UnexpectedError.class)
       
   107                 System.err.println("exception caught as expected: " + c);
       
   108             else
       
   109                 throw e;
       
   110         }
       
   111     }
       
   112 
       
   113     public static class UnexpectedError extends Error { }
       
   114 
       
   115     /*
       
   116      * A JavaFileManager which is not a JavacFileManager, even though it uses one internally for
       
   117      * convenience.
       
   118      */
       
   119     static class TestFileManager extends ForwardingJavaFileManager<StandardJavaFileManager>
       
   120             implements StandardJavaFileManager  {
       
   121         TestFileManager() {
       
   122             super(new JavacFileManager(new Context(), false, null));
       
   123         }
       
   124 
       
   125         @Override
       
   126         public Iterable<? extends JavaFileObject> getJavaFileObjectsFromFiles(Iterable<? extends File> files) {
       
   127             return fileManager.getJavaFileObjectsFromFiles(files);
       
   128         }
       
   129 
       
   130         @Override
       
   131         public Iterable<? extends JavaFileObject> getJavaFileObjects(File... files) {
       
   132             return fileManager.getJavaFileObjects(files);
       
   133         }
       
   134 
       
   135         @Override
       
   136         public Iterable<? extends JavaFileObject> getJavaFileObjectsFromStrings(Iterable<String> names) {
       
   137             return fileManager.getJavaFileObjectsFromStrings(names);
       
   138         }
       
   139 
       
   140         @Override
       
   141         public Iterable<? extends JavaFileObject> getJavaFileObjects(String... names) {
       
   142             return fileManager.getJavaFileObjects(names);
       
   143         }
       
   144 
       
   145         @Override
       
   146         public void setLocation(Location location, Iterable<? extends File> path) throws IOException {
       
   147             fileManager.setLocation(location, path);
       
   148         }
       
   149 
       
   150         @Override
       
   151         public Iterable<? extends File> getLocation(Location location) {
       
   152             return fileManager.getLocation(location);
       
   153         }
       
   154 
       
   155     }
       
   156 }