test/jdk/javadoc/tool/6227454/Test.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, 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.

@@ -27,28 +27,40 @@
  * @summary package.html and overview.html may not be read fully
  * @modules jdk.javadoc
  */
 
 import java.io.*;
+import java.util.Arrays;
 
-import com.sun.javadoc.Doclet;
-import com.sun.javadoc.RootDoc;
+import java.util.HashSet;
+import java.util.ListIterator;
+import java.util.Locale;
+import java.util.Set;
 
-public class Test extends Doclet {
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+
+import com.sun.source.doctree.DocCommentTree;
+import com.sun.source.util.DocTrees;
+import jdk.javadoc.doclet.Doclet;
+import jdk.javadoc.doclet.Reporter;
+import jdk.javadoc.doclet.DocletEnvironment;
+
+
+public class Test implements Doclet {
     public static void main(String... args) throws Exception {
         new Test().run();
     }
 
+    File referenceFile = new File("Foo.java");
+
     void run() throws Exception {
         test("<body>ABC      XYZ</body>");
         test("<body>ABC      XYZ</BODY>");
         test("<BODY>ABC      XYZ</body>");
         test("<BODY>ABC      XYZ</BODY>");
         test("<BoDy>ABC      XYZ</bOdY>");
-        test("      ABC      XYZ</bOdY>", "Body tag missing from HTML");
-        test("<body>ABC      XYZ       ", "Close body tag missing from HTML");
-        test("      ABC      XYZ       ", "Body tag missing from HTML");
         test("<body>ABC" + bigText(8192, 40) + "XYZ</body>");
 
         if (errors > 0)
             throw new Exception(errors + " errors occurred");
     }

@@ -56,37 +68,38 @@
     void test(String body) throws IOException {
         test(body, null);
     }
 
     void test(String body, String expectError) throws IOException {
+        if (!referenceFile.exists()) {
+            writeFile(referenceFile.getName(), "public class Foo {}");
+        }
         String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "
                          + "\"http://www.w3.org/TR/html4/loose.dtd\">";
         String headTag = "<head><title>Title </title></head>";
         String text = docType + "<html>" + headTag + body + "</html>";
         testNum++;
         System.err.println("test " + testNum);
         File file = writeFile("overview" + testNum + ".html", text);
         String thisClassName = Test.class.getName();
-        File testSrc = new File(System.getProperty("test.src"));
         String[] args = {
             "-bootclasspath",
                 System.getProperty("java.class.path")
                 + File.pathSeparator
                 + System.getProperty("sun.boot.class.path"),
             "-classpath", ".",
+            "-docletpath", System.getProperty("test.classes"),
+            "-doclet", thisClassName,
             "-package",
             "-overview", file.getPath(),
-            new File(testSrc, thisClassName + ".java").getPath()
+            "-sourcepath", ".",
+            referenceFile.getPath()
         };
 
         StringWriter sw = new StringWriter();
         PrintWriter pw = new PrintWriter(sw);
-        int rc = com.sun.tools.javadoc.Main.execute(
-                "javadoc",
-                pw, pw, pw,
-                thisClassName,
-                args);
+        int rc = jdk.javadoc.internal.tool.Main.execute(args, pw);
         pw.close();
         String out = sw.toString();
         if (!out.isEmpty())
             System.err.println(out);
         System.err.println("javadoc exit: rc=" + rc);

@@ -129,12 +142,23 @@
     }
 
     int testNum;
     int errors;
 
-    public static boolean start(RootDoc root) {
-        String text = root.commentText();
+    public boolean run(DocletEnvironment root) {
+        DocTrees docTrees = root.getDocTrees();
+        System.out.println("classes:" + root.getIncludedClasses());
+
+        Element klass = root.getIncludedClasses().iterator().next();
+        String text = "";
+        try {
+            DocCommentTree dcTree = docTrees.getDocCommentTree(klass, overviewpath);
+            text = dcTree.getFullBody().toString();
+        } catch (IOException ioe) {
+            throw new Error(ioe);
+        }
+
         if (text.length() < 64)
             System.err.println("text: '" + text + "'");
         else
             System.err.println("text: '"
                     + text.substring(0, 20)

@@ -141,6 +165,70 @@
                     + "..."
                     + text.substring(text.length() - 20)
                     + "'");
         return text.startsWith("ABC") && text.endsWith("XYZ");
     }
+
+    @Override
+    public String getName() {
+        return "Test";
+    }
+
+    private String overviewpath;
+
+    @Override
+    public Set<Option> getSupportedOptions() {
+        Option[] options = {
+            new Option() {
+
+                @Override
+                public int getArgumentCount() {
+                    return 1;
+                }
+
+                @Override
+                public String getDescription() {
+                    return "overview";
+                }
+
+                @Override
+                public Option.Kind getKind() {
+                    return Option.Kind.STANDARD;
+                }
+
+                @Override
+                public String getName() {
+                    return "overview";
+                }
+
+                @Override
+                public String getParameters() {
+                    return "url";
+                }
+
+                @Override
+                public boolean matches(String option) {
+                    String opt = option.startsWith("-") ? option.substring(1) : option;
+                    return getName().equals(opt);
+                }
+
+                @Override
+                public boolean process(String option, ListIterator<String> arguments) {
+                    if (matches(option)) {
+                        overviewpath = arguments.next();
+                    }
+                    return true;
+                }
+            }
+        };
+        return new HashSet<Option>(Arrays.asList(options));
+    }
+
+    @Override
+    public SourceVersion getSupportedSourceVersion() {
+        return SourceVersion.latest();
+    }
+
+    public void init(Locale locale, Reporter reporter) {
+        return;
+    }
 }