/* * Copyright (c) 2015, 2019, 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. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * @test * @bug 8141492 8071982 8141636 8147890 8166175 8168965 8176794 8175218 8147881 * 8181622 8182263 8074407 8187521 8198522 8182765 8199278 8196201 8196202 * 8184205 8214468 * @summary Test the search feature of javadoc. * @author bpatel * @library ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool * @build javadoc.tester.* * @run main TestSearch */ import javadoc.tester.JavadocTester; public class TestSearch extends JavadocTester { public static void main(String... args) throws Exception { TestSearch tester = new TestSearch(); tester.runTests(); } @Test public void test1() { javadoc("-d", "out-1", "-sourcepath", "-use", testSrc("UnnamedPkgClass.java")); checkExit(Exit.OK); checkSearchOutput("UnnamedPkgClass.html", true, true); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(false, "tag-search-index.zip", "tag-search-index.js"); checkFiles(true, "package-search-index.zip", "member-search-index.zip", "type-search-index.zip", "package-search-index.js", "member-search-index.js", "type-search-index.js"); } @Test public void test2() { javadoc("-d", "out-2", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkInvalidUsageIndexTag(); checkSearchOutput(true); checkSingleIndex(true, true); checkSingleIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkAllPkgsAllClasses(); checkFiles(true, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test2a() { javadoc("-d", "out-2a", "-Xdoclint:all", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.ERROR); checkDocLintErrors(); checkSearchOutput(true); checkSingleIndex(true, true); checkSingleIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test3() { javadoc("-d", "out-3", "-noindex", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(false); checkJqueryAndImageFiles(false); checkFiles(false, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js", "index-all.html", "allpackages-index.html", "allclasses-index.html"); } @Test public void test4() { javadoc("-d", "out-4", "-html5", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkSingleIndex(true, true); checkSingleIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test5() { javadoc("-d", "out-5", "-html5", "-noindex", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(false); checkJqueryAndImageFiles(false); checkFiles(false, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js", "index-all.html"); } @Test public void test6() { javadoc("-d", "out-6", "-nocomment", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkIndexNoComment(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test7() { javadoc("-d", "out-7", "-nodeprecated", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkIndexNoDeprecated(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test8() { javadoc("-d", "out-8", "-splitindex", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkInvalidUsageIndexTag(); checkSearchOutput(true); checkSplitIndex(); checkSplitIndexSearchTagDuplication(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(true, "member-search-index.zip", "package-search-index.zip", "tag-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "tag-search-index.js", "type-search-index.js"); } @Test public void test9() { javadoc("-d", "out-9", "-sourcepath", testSrc, "-javafx", "--disable-javafx-strict-checks", "-package", "-use", "pkgfx", "pkg3"); checkExit(Exit.OK); checkSearchOutput(true); checkJavaFXOutput(); checkJqueryAndImageFiles(true); checkSearchJS(); checkFiles(false, "tag-search-index.zip", "tag-search-index.js"); checkFiles(true, "member-search-index.zip", "package-search-index.zip", "type-search-index.zip", "member-search-index.js", "package-search-index.js", "type-search-index.js"); } @Test public void testURLEncoding() { javadoc("-d", "out-encode-html5", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkSearchJS(); checkSearchIndex(true); } @Test public void testJapaneseLocale() { javadoc("-locale", "ja_JP", "-d", "out-jp", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkOutput(Output.OUT, true, "\u30d1\u30c3\u30b1\u30fc\u30b8pkg\u306e\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1" + "\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\n", "\u30d1\u30c3\u30b1\u30fc\u30b8pkg1\u306e\u30bd\u30fc\u30b9\u30fb\u30d5\u30a1" + "\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...\n"); checkSearchJS(); checkSearchIndex(true); } @Test public void testChineseLocale() { javadoc("-locale", "zh_CN", "-d", "out-cn", "-Xdoclint:none", "-sourcepath", testSrc, "-use", "pkg", "pkg1", "pkg2", "pkg3"); checkExit(Exit.OK); checkOutput(Output.OUT, true, "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg\u7684\u6e90\u6587\u4ef6...\n", "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg1\u7684\u6e90\u6587\u4ef6...\n", "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg2\u7684\u6e90\u6587\u4ef6...\n", "\u6b63\u5728\u52a0\u8f7d\u7a0b\u5e8f\u5305pkg3\u7684\u6e90\u6587\u4ef6...\n"); checkSearchJS(); checkSearchIndex(true); } void checkDocLintErrors() { checkOutput(Output.OUT, true, "A sample method. Testing search tag for {@index \"unclosed quote}.", "Another test class. Testing empty {@index }.", "Constant field. Testing no text in index tag {@index}.", "A test field. Testing only white-spaces in index tag text {@index }."); } void checkSearchOutput(boolean expectedOutput) { checkSearchOutput("index.html", expectedOutput, true); } void checkSearchIndex(boolean expectedOutput) { checkOutput("member-search-index.js", expectedOutput, "{\"p\":\"pkg\",\"c\":\"AnotherClass\",\"l\":\"AnotherClass()\",\"url\":\"%3Cinit%3E()\"}", "{\"p\":\"pkg1\",\"c\":\"RegClass\",\"l\":\"RegClass()\",\"url\":\"%3Cinit%3E()\"}", "{\"p\":\"pkg2\",\"c\":\"TestError\",\"l\":\"TestError()\",\"url\":\"%3Cinit%3E()\"}", "{\"p\":\"pkg\",\"c\":\"AnotherClass\",\"l\":\"method(byte[], int, String)\",\"url\":\"method(byte[],int,java.lang.String)\"}"); checkOutput("member-search-index.js", !expectedOutput, "{\"p\":\"pkg\",\"c\":\"AnotherClass\",\"l\":\"method(RegClass)\",\"url\":\"method-pkg1.RegClass-\"}", "{\"p\":\"pkg2\",\"c\":\"TestClass\",\"l\":\"TestClass()\",\"url\":\"TestClass--\"}", "{\"p\":\"pkg\",\"c\":\"TestError\",\"l\":\"TestError()\",\"url\":\"TestError--\"}", "{\"p\":\"pkg\",\"c\":\"AnotherClass\",\"l\":\"method(byte[], int, String)\",\"url\":\"method-byte:A-int-java.lang.String-\"}"); } void checkSearchOutput(boolean expectedOutput, boolean moduleDirectoriesVar) { checkSearchOutput("index.html", expectedOutput, moduleDirectoriesVar); } void checkSearchOutput(String fileName, boolean expectedOutput, boolean moduleDirectoriesVar) { // Test for search related markup checkOutput(fileName, expectedOutput, "\n", "\n", "\n", "\n", "\n", "\n", "", "var pathtoroot = \"./\";\n" + "loadScripts(document, 'script');", "