/* * Copyright (c) 2016, 2022, 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 8154119 8154262 8156077 8157987 8154261 8154817 8135291 8155995 8162363 * 8168766 8168688 8162674 8160196 8175799 8174974 8176778 8177562 8175218 * 8175823 8166306 8178043 8181622 8183511 8169819 8074407 8183037 8191464 * 8164407 8192007 8182765 8196200 8196201 8196202 8196202 8205593 8202462 * 8184205 8219060 8223378 8234746 8239804 8239816 8253117 8245058 8261976 * @summary Test modules support in javadoc. * @library ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool * @build javadoc.tester.* * @run main TestModules */ import javadoc.tester.JavadocTester; public class TestModules extends JavadocTester { public static void main(String... args) throws Exception { TestModules tester = new TestModules(); tester.runTests(); } /** * Test generated module pages for HTML 5. */ @Test public void testHtml5() { javadoc("-d", "out-html5", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB"); checkExit(Exit.OK); checkHtml5Description(true); checkHtml5NoDescription(false); checkHtml5OverviewSummaryModules(); checkModuleLink(); checkModuleFilesAndLinks(true); checkModulesInSearch(true); checkAllPkgsAllClasses(true); } /** * Test generated module pages for HTML 5 with -nocomment option. */ @Test public void testHtml5NoComment() { javadoc("-d", "out-html5-nocomment", "-nocomment", "-use", "-Xdoclint:none", "--no-platform-links", "-overview", testSrc("overview.html"), "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB"); checkExit(Exit.OK); checkHtml5Description(false); checkHtml5NoDescription(true); checkModuleLink(); checkModuleFilesAndLinks(true); } /** * Test generated pages, in an unnamed module, for HTML 5. */ @Test public void testHtml5UnnamedModule() { javadoc("-d", "out-html5-nomodule", "-use", "-overview", testSrc("overview.html"), "-sourcepath", testSrc, "testpkgnomodule", "testpkgnomodule1"); checkExit(Exit.OK); checkHtml5OverviewSummaryPackages(); checkModuleFilesAndLinks(false); checkModulesInSearch(false); } /** * Test generated module pages with javadoc tags. */ @Test public void testJDTagsInModules() { javadoc("-d", "out-mdltags", "-author", "-version", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, "--module", "moduletags,moduleB", "testpkgmdltags", "testpkgmdlB"); checkExit(Exit.OK); checkModuleTags(); } /** * Test generated module summary page. */ @Test public void testModuleSummary() { javadoc("-d", "out-moduleSummary", "-use", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB", "moduleB/testpkg2mdlB"); checkExit(Exit.OK); checkModuleSummary(); checkNegatedModuleSummary(); } /** * Test generated module summary page of an aggregating module. */ @Test public void testAggregatorModuleSummary() { javadoc("-d", "out-aggregatorModuleSummary", "-use", "--module-source-path", testSrc, "--expand-requires", "transitive", "--module", "moduleT"); checkExit(Exit.OK); checkAggregatorModuleSummary(); } /** * Test generated module pages and pages with link to modules. */ @Test public void testModuleFilesAndLinks() { javadoc("-d", "out-modulelinks", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB"); checkExit(Exit.OK); checkModuleFilesAndLinks(true); } /** * Test generated module pages for a deprecated module. */ @Test public void testModuleDeprecation() { javadoc("-d", "out-moduledepr", "-Xdoclint:none", "--no-platform-links", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, "--module", "moduleA,moduleB,moduletags", "testpkgmdlA", "testpkgmdlB", "testpkgmdltags"); checkExit(Exit.OK); checkModuleDeprecation(true); } /** * Test annotations on modules. */ @Test public void testModuleAnnotation() { javadoc("-d", "out-moduleanno", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB", "testpkgmdlA", "testpkgmdlB"); checkExit(Exit.OK); checkModuleAnnotation(); } /** * Test module summary pages in "api" mode. */ @Test public void testApiMode() { javadoc("-d", "out-api", "-use", "--show-module-contents=api", "-author", "-version", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, "--module", "moduleA,moduleB,moduleC,moduletags", "testpkgmdlA", "moduleA/concealedpkgmdlA", "testpkgmdlB", "testpkg2mdlB", "testpkgmdlC", "testpkgmdltags"); checkExit(Exit.OK); checkModuleModeCommon(); checkModuleModeApi(true); checkModuleModeAll(false); } /** * Test module summary pages in "all" mode. */ @Test public void testAllMode() { javadoc("-d", "out-all", "-use", "--show-module-contents=all", "-author", "-version", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, "--module", "moduleA,moduleB,moduleC,moduletags", "testpkgmdlA", "moduleA/concealedpkgmdlA", "testpkgmdlB", "testpkg2mdlB", "testpkgmdlC", "testpkgmdltags"); checkExit(Exit.OK); checkModuleModeCommon(); checkModuleModeApi(false); checkModuleModeAll(true); } /** * Test generated module summary page of a module with no exported package. */ @Test public void testModuleSummaryNoExportedPkgAll() { javadoc("-d", "out-ModuleSummaryNoExportedPkgAll", "-use", "--show-module-contents=all", "-sourcepath", testSrc + "/moduleNoExport", "--module", "moduleNoExport", "testpkgmdlNoExport"); checkExit(Exit.OK); checkModuleSummaryNoExported(true); } /** * Test generated module summary page of a module with no exported package. */ @Test public void testModuleSummaryNoExportedPkgApi() { javadoc("-d", "out-ModuleSummaryNoExportedPkgApi", "-use", "-sourcepath", testSrc + "/moduleNoExport", "--module", "moduleNoExport", "testpkgmdlNoExport"); checkExit(Exit.OK); checkModuleSummaryNoExported(false); } /** * Test generated module pages for javadoc run for a single module having a single package. */ @Test public void testSingleModuleSinglePkg() { javadoc("-d", "out-singlemod", "--module-source-path", testSrc, "--module", "moduleC", "testpkgmdlC"); checkExit(Exit.OK); } /** * Test generated module pages for javadoc run for a single module having multiple packages. */ @Test public void testSingleModuleMultiplePkg() { javadoc("-d", "out-singlemodmultiplepkg", "--show-module-contents=all", "-Xdoclint:none", "--module-source-path", testSrc, "--add-modules", "moduleC", "--module", "moduleB", "testpkg2mdlB", "testpkgmdlB"); checkExit(Exit.OK); } /** * Test -group option for modules. The overview-summary.html page should group the modules accordingly. */ @Test public void testGroupOption() { javadoc("-d", "out-group", "--show-module-contents=all", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, "-group", "Module Group A", "moduleA*", "-group", "Module Group B & C", "moduleB*:moduleC*", "-group", "Java SE Modules", "java*", "--module", "moduleA,moduleB,moduleC,moduletags", "moduleA/concealedpkgmdlA", "testpkgmdlA", "testpkg2mdlB", "testpkgmdlB", "testpkgmdlC", "testpkgmdltags"); checkExit(Exit.OK); checkGroupOption(); } /** * Test -group option for modules and the ordering of module groups. * The overview-summary.html page should group the modules accordingly and display the group tabs in * the order it was provided on the command-line. */ @Test public void testGroupOptionOrdering() { javadoc("-d", "out-groupOrder", "--show-module-contents=all", "-Xdoclint:none", "-tag", "regular:a:Regular Tag:", "-tag", "moduletag:s:Module Tag:", "--module-source-path", testSrc, "-group", "B Group", "moduleB*", "-group", "C Group", "moduleC*", "-group", "A Group", "moduleA*", "-group", "Java SE Modules", "java*", "--module", "moduleA,moduleB,moduleC,moduletags", "moduleA/concealedpkgmdlA", "testpkgmdlA", "testpkg2mdlB", "testpkgmdlB", "testpkgmdlC", "testpkgmdltags"); checkExit(Exit.OK); checkGroupOptionOrdering(); } /** * Test -group option for unnamed modules. The overview-summary.html page should group the packages accordingly. */ @Test public void testUnnamedModuleGroupOption() { javadoc("-d", "out-groupnomodule", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "-sourcepath", testSrc, "-group", "Package Group 0", "testpkgnomodule", "-group", "Package Group 1", "testpkgnomodule1", "testpkgnomodule", "testpkgnomodule1"); checkExit(Exit.OK); checkUnnamedModuleGroupOption(); } /** * Test -group option for unnamed modules and the ordering of package groups. * The overview-summary.html page should group the packages accordingly and display the group tabs in * the order it was provided on the command-line. */ @Test public void testGroupOptionPackageOrdering() { javadoc("-d", "out-groupPkgOrder", "-use", "-Xdoclint:none", "-overview", testSrc("overview.html"), "-sourcepath", testSrc, "-group", "Z Group", "testpkgnomodule", "-group", "A Group", "testpkgnomodule1", "testpkgnomodule", "testpkgnomodule1"); checkExit(Exit.OK); checkGroupOptionPackageOrdering(); } /** * Test -group option for a single module. */ @Test public void testGroupOptionSingleModule() { javadoc("-d", "out-groupsinglemodule", "-use", "-Xdoclint:none", "--module-source-path", testSrc, "-group", "Module Group B", "moduleB*", "--module", "moduleB", "testpkg2mdlB", "testpkgmdlB"); checkExit(Exit.OK); checkGroupOptionSingleModule(); } /** * Test -group option for a single module. */ @Test public void testModuleName() { javadoc("-d", "out-modulename", "-use", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleB,test.moduleFullName", "testpkg2mdlB", "testpkgmdlB", "testpkgmdlfullname"); checkExit(Exit.OK); checkModuleName(true); } /** * Test -linkoffline option. */ @Test public void testLinkOffline() { String url = "https://docs.oracle.com/javase/9/docs/api/"; javadoc("-d", "out-linkoffline", "-use", "--show-module-contents=all", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB", "-linkoffline", url, testSrc + "/jdk", "testpkgmdlA", "testpkgmdlB", "testpkg3mdlB"); checkExit(Exit.OK); checkLinkOffline(); } /** * Test -linksource option. */ @Test public void testLinkSource() { javadoc("-d", "out-linksource", "-use", "-linksource", "--no-platform-links", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB"); checkExit(Exit.OK); checkLinks(); checkLinkSource(false); } /** * Test -linksource option combined with -private. */ @Test public void testLinkSourcePrivate() { javadoc("-d", "out-linksource-private", "-use", "-private", "-linksource", "--no-platform-links", "-Xdoclint:none", "--module-source-path", testSrc, "--module", "moduleA,moduleB"); checkExit(Exit.OK); checkLinks(); checkLinkSource(true); } void checkDescription(boolean found) { checkOutput("moduleA/module-summary.html", found, """
This is a test description for the moduleA module with a Sear\ ch phrase search phrase\ .
"""); checkOutput("moduleB/module-summary.html", found, """
This is a test description for the moduleB module. Search wor\ d search_word with no de\ scription.
"""); checkOutput("index.html", found, """
The overview summary page header.
"""); checkOutput("index.html", false, """
Modules 
The overview summary page header.
"""); } void checkHtml5Description(boolean found) { checkOutput("moduleA/module-summary.html", found, """
Deprecated, for re\ moval: This API element is subject to removal in a future version.
This module is deprecated.
This is a test description for the moduleA module with a Sear\ ch phrase search phrase\ .
"""); checkOutput("moduleB/module-summary.html", found, """
This is a test description for the moduleB module. Search wor\ d search_word with no de\ scription.
"""); checkOutput("index.html", found, """
The overview summary page header.
Modules
"""); checkOutput("index.html", false, """
The overview summary page header.
Modules
"""); } void checkHtml5NoDescription(boolean found) { checkOutput("moduleA/module-summary.html", found, """

Module moduleA


@Deprecated(forRemoval=true) module moduleA
  • """); checkOutput("moduleB/module-summary.html", found, """

    Module moduleB


    @AnnotationType(optional="Module Anno\ tation", required=2016) module moduleB
    • """); } void checkModuleLink() { checkOutput("index.html", true, "
    • Module
    • "); checkOutput("moduleA/module-summary.html", true, """ """); checkOutput("moduleB/module-summary.html", true, """ """); checkOutput("moduleA/testpkgmdlA/class-use/TestClassInModuleA.html", true, """
    • Module
    • """); checkOutput("moduleB/testpkgmdlB/package-summary.html", true, """
    • Module
    • """); checkOutput("moduleB/testpkgmdlB/TestClassInModuleB.html", true, """
    • Module
    • """); checkOutput("moduleB/testpkgmdlB/class-use/TestClassInModuleB.html", true, """
    • Module
    • """); } void checkNoModuleLink() { checkOutput("testpkgnomodule/package-summary.html", true, """
""", """
Since:
JDK 9
""", """
See Also:
""", """
Regular Tag:
Just a regular simple tag.
""", """
Module Tag:
Just a simple module tag.
""", """
Version:
1.0
""", """
Author:
Alice
"""); checkOutput("moduletags/testpkgmdltags/TestClassInModuleTags.html", false, """
Module Tag:
Just a simple module tag.
"""); } void checkHtml5OverviewSummaryModules() { checkOutput("index.html", true, """
Modules
Module
Description
"""); checkOutput("overview-summary.html", false, """
Packages
Package
Description
"""); } void checkHtml5OverviewSummaryPackages() { checkOutput("index.html", false, """
Modules 
""", """
Modules
Module Description
The overview summary page header.
"""); checkOutput("index.html", true, """
Packages
Package
Description
""", """
The overview summary page header.
Packages
"""); } void checkModuleSummary() { checkOutput("moduleA/module-summary.html", true, """ """, """

Modules

""", """
 
""", """

Packages

""", """
transitive
This is a test description for the moduleB module.
"""); checkOutput("moduleB/module-summary.html", true, """
  • Description | 
  • Modules | 
  • Packages | 
  • Services
  • """, """

    Packages

    """, """
     
    """, """

    Packages

    """, """

    Services

    """, """
    With a test description for uses.
    """, """
    Opens
    Package
    Description
    """, """
    Uses
    Type
    Description
    """, """
    Provides
    Type
    Description
    """); } void checkAggregatorModuleSummary() { checkOutput("moduleT/module-summary.html", true, """

    Module moduleT

    """, """
    This is a test description for the moduleT module. Search phr\ ase search phrase. Make\ sure there are no exported packages.
    """, """
    transitive
    This is a test description for the moduleA module with a Search phrase search phrase.
    transitive
    This is a test description for the moduleB module.
    """); } void checkNegatedModuleSummary() { checkOutput("moduleA/module-summary.html", false, """

    Services

    """); } void checkModuleFilesAndLinks(boolean found) { checkFileAndOutput("moduleA/testpkgmdlA/package-summary.html", found, """
  • Module
  • """, """
    Module \ moduleA
    """); checkFileAndOutput("moduleA/testpkgmdlA/TestClassInModuleA.html", found, """
  • Module
  • """, """
    Module moduleA
    """); checkFileAndOutput("moduleB/testpkgmdlB/AnnotationType.html", found, """
    Module moduleB
    """, """
    Package <\ a href="package-summary.html">testpkgmdlB
    """); checkFiles(found, "moduleA/module-summary.html"); } void checkModulesInSearch(boolean found) { checkOutput("index-all.html", found, """
    moduleA - module moduleA
    This is a test description for the moduleA module with a Search phrase search phrase.
    moduleB - module moduleB
    This is a test description for the moduleB module.
    """, """
    se\ arch_word - Search tag in module moduleB
     
    s\ earch phrase - Search tag in module moduleA
    with description
    """); checkOutput("index-all.html", false, """
    s\ earch phrase - Search tag in module moduleA
    with description
    s\ earch phrase - Search tag in module moduleA
    with description
    """); } void checkModuleModeCommon() { checkOutput("index.html", true, """
    <\ a href="moduleA/module-summary.html">moduleA
    This is a test description for the moduleA module with a Search phrase search phrase.
    """, """
    moduleB
    This is a test description for the moduleB module.
    """, """
    moduletags
    This is a test description for the moduletags module.
    Type Link: TestClassInModuleTags.
    Member Link: testMethod(String).
    Package Link: testpkgmdltags.
    """); checkOutput("moduleA/module-summary.html", true, """
  • Description | 
  • Modules | 
  • Packages | 
  • Services
  • """, """ """); checkOutput("moduletags/module-summary.html", true, """
     
    """, """
  • Description | 
  • Modules | 
  • Packages | 
  • Services
  • """, """
    Indirect Requires
    """, """
    transitive
    This is a test description for the moduleB module.
    """, """
    Indirect Exports
    """, """
    Requires
    Modifier
    Module
    Description
    """, """
    Indirect Requires
    Modifier
    Module
    Description
    """, """
    Indirect Opens
    From
    Packages
    """, """ """); } void checkModuleModeApi(boolean found) { checkOutput("moduleA/module-summary.html", found, """
     
    """); checkOutput("moduleB/module-summary.html", found, """
  • Description | 
  • Modules | 
  • Packages | 
  • Services
  • """, """
     
    """, """
    Opens
    Package
    Description
     
    """, """
    With a test description for uses.
    """); checkOutput("moduletags/module-summary.html", found, """
    transitive static
    This is a test description for the moduleA module with a Search phrase search phrase.
    """); } void checkModuleModeAll(boolean found) { checkOutput("moduleA/module-summary.html", found, """
    java.base
     
    """, """
    This is a test description for the moduleC module.
    """, """ """, """
    All Modules
     
    """, """
    \ \ \ \
    """, """
    concealedpkgmdlA
    None
     
    """); checkOutput("moduleB/module-summary.html", found, """
  • Description | 
  • Modules | 
  • Packages | 
  • Services
  • """, """
    None
    All Modules
     
    """, """
    java.base
     
    """, """
     
    """, """
     
    (Im\ plementation(s): TestClass2InModuleB)
    """, """
     
    (Im\ plementation(s): TestClassInModuleB)
    """, """
    \ \ \ \
    """, """
    With a test description for uses.
    """); checkOutput("moduleC/module-summary.html", found, """
    Exports
    Package
    Exported To Modules
    Description
    """); checkOutput("moduletags/module-summary.html", found, """
    transitive static
    This is a test description for the moduleA module with a Search phrase search phrase.
    """); } void checkModuleDeprecation(boolean found) { checkOutput("moduleA/module-summary.html", found, """
    Deprecated, for re\ moval: This API element is subject to removal in a future version.
    This module is deprecated.
    """); checkOutput("deprecated-list.html", found, """ """, """
    This module is deprecated.
    """); checkOutput("moduleB/module-summary.html", !found, """
    Deprecated.
    This module is deprecated using just the javadoc tag.
    """); checkOutput("moduletags/module-summary.html", found, """

    Module moduletags


    @Deprecated module moduletags
    """, """
    Deprecated.
    """); } void checkModuleAnnotation() { checkOutput("moduleB/module-summary.html", true, """

    Module moduleB


    @AnnotationType(optional="Module Anno\ tation", required=2016) module moduleB
    """); checkOutput("moduleB/module-summary.html", false, "@AnnotationTypeUndocumented"); } void checkModuleSummaryNoExported(boolean found) { checkOutput("moduleNoExport/module-summary.html", found, """

    Packages

    """, """
    Concealed
    """); } void checkGroupOption() { checkOutput("index.html", true, """
    \ \ \ \ \
    """); checkOutput("index.html", false, """
    Packages
    """, "Java SE Modules"); } void checkGroupOptionOrdering() { checkOutput("index.html", true, """
    \ \ \ \ \ \
    """); checkOutput("index.html", false, """
    \ \ \ \ \ \
    """, "Java SE Modules"); } void checkUnnamedModuleGroupOption() { checkOutput("index.html", true, """
    The overview summary page header.
    \ \ \ \
    """); } void checkGroupOptionPackageOrdering() { checkOutput("index.html", true, """
    \ \ \ \
    """); } void checkGroupOptionSingleModule() { checkOutput("index.html", true, "window.location.replace('moduleB/module-summary.html')"); } void checkModuleName(boolean found) { checkOutput("test.moduleFullName/module-summary.html", found, """

    Module test.moduleFullName

    """); checkOutput("index-all.html", found, """

    T

    test.moduleFullName - module test.moduleFullName
    This is a test description for the test.moduleFullName.
    """); checkOutput("test.moduleFullName/module-summary.html", !found, """

    Module moduleFullName

    """); checkOutput("index-all.html", !found, """
    moduleFullName - module moduleFullName
    This is a test description for the test.moduleFullName.
    """); } void checkLinkOffline() { checkOutput("moduleB/testpkg3mdlB/package-summary.html", true, """ Link to \ String Class"""); checkOutput("moduleB/testpkg3mdlB/package-summary.html", true, """ Link to java.lang package"""); checkOutput("moduleB/testpkg3mdlB/package-summary.html", true, """ Link to java.base module"""); } void checkLinkSource(boolean includePrivate) { checkOutput("moduleA/module-summary.html", !includePrivate, """ div id="package-summary-table">
    Exports
    Package
    Description
     
    """); checkOutput("moduleA/testpkgmdlA/TestClassInModuleA.html", true, """

    public class TestClassInModuleA extends java.lang.Object
    """); checkOutput("src-html/moduleA/testpkgmdlA/TestClassInModuleA.html", true, """ 019 * Please contact Orac\ le, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 020 * or visit www.oracle\ .com if you need additional information or have any 021 * questions. 022 */ 023package testpkgmdlA; 024 025public class TestClassInModuleA { 026}"""); if (includePrivate) { checkOutput("src-html/moduleA/concealedpkgmdlA/ConcealedClassInModuleA.html", true, """ 024package concealedpkgmdlA; 025 026public class ConcealedClassInModuleA { 027 public void testMethodConcealedClass() { } 028}"""); } } void checkAllPkgsAllClasses(boolean found) { checkOutput("allclasses-index.html", true, """
    \ \
    """, """
    Class
    Description
    """); checkOutput("allpackages-index.html", true, """
    Package Summary
    Package
    Description
    """); checkOutput("allclasses-index.html", found, """
    """); checkOutput("allpackages-index.html", found, """
    Package Summary
    """); checkOutput("allclasses-index.html", !found, """
    Modules
    """); checkOutput("allpackages-index.html", !found, """
    """); checkOutput("type-search-index.js", true, """ {"l":"All Classes and Interfaces","u":"allclasses-index.html"}"""); checkOutput("package-search-index.js", true, """ {"l":"All Packages","u":"allpackages-index.html"}"""); checkOutput("index-all.html", true, """
    All Classes and Interfaces|All&n\ bsp;Packages"""); } }