duke@1: /*
bpatel@1858: * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
duke@1: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1: *
duke@1: * This code is free software; you can redistribute it and/or modify it
duke@1: * under the terms of the GNU General Public License version 2 only, as
duke@1: * published by the Free Software Foundation.
duke@1: *
duke@1: * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1: * version 2 for more details (a copy is included in the LICENSE file that
duke@1: * accompanied this code).
duke@1: *
duke@1: * You should have received a copy of the GNU General Public License version
duke@1: * 2 along with this work; if not, write to the Free Software Foundation,
duke@1: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1: *
ohair@554: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@554: * or visit www.oracle.com if you need additional information or have any
ohair@554: * questions.
duke@1: */
duke@1:
duke@1: /*
duke@1: * @test
bpatel@2147: * @bug 4780441 4874845 4978816 8014017 8016328 8025633 8026567
duke@1: * @summary Make sure that when the -private flag is not used, members
duke@1: * inherited from package private class are documented in the child.
duke@1: *
duke@1: * Make sure that when a method inherits documentation from a method
duke@1: * in a non-public class/interface, the non-public class/interface
duke@1: * is not mentioned anywhere (not even in the signature or tree).
duke@1: *
duke@1: * Make sure that when a private interface method with generic parameters
duke@1: * is implemented, the comments can be inherited properly.
bpatel@1858: *
bpatel@1858: * Make sure when no modifier appear in the class signature, the
bpatel@1858: * signature is displayed correctly without extra space at the beginning.
duke@1: * @author jamieh
duke@1: * @library ../lib/
bpatel@1858: * @build JavadocTester TestPrivateClasses
duke@1: * @run main TestPrivateClasses
duke@1: */
duke@1:
duke@1: public class TestPrivateClasses extends JavadocTester {
duke@1:
duke@1: //Test information.
bpatel@1858: private static final String BUG_ID = "4780441-4874845-4978816-8014017";
duke@1:
duke@1: //Javadoc arguments.
duke@1: private static final String[] ARGS1 = new String[] {
duke@1: "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR, "-source", "1.5", "pkg", "pkg2"
duke@1: };
duke@1: private static final String[] ARGS2 = new String[] {
duke@1: "-d", BUG_ID + "-2", "-sourcepath", SRC_DIR, "-private",
duke@1: "-source", "1.5", "pkg", "pkg2"
duke@1: };
duke@1:
duke@1: // Test output when -private flag is not used.
duke@1: private static final String[][] TEST1 = {
duke@1: // Field inheritence from non-public superclass.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "" +
bpatel@766: "fieldInheritedFromParent"
duke@1: },
duke@1:
duke@1: // Method inheritence from non-public superclass.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
bpatel@2101: "" +
bpatel@766: "methodInheritedFromParent"
duke@1: },
duke@1:
duke@1: // Field inheritence from non-public superinterface.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@766: "" +
bpatel@766: "fieldInheritedFromInterface"
duke@1: },
duke@1:
duke@1: // Method inheritence from non-public superinterface.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@2101: "" +
bpatel@766: "methodInterface"
duke@1: },
duke@1:
duke@1: // private class does not show up in tree
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "
" + NL + "- java.lang.Object
" + NL +
bpatel@766: "- " + NL + "
" + NL + "- pkg.PublicChild
" + NL +
bpatel@766: "
" + NL + " " + NL + "
"
duke@1: },
duke@1:
duke@1: // Method is documented as though it is declared in the inheriting method.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "public void methodInheritedFromParent(int p1)"
duke@1: },
duke@1:
duke@1: //Make sure implemented interfaces from private superclass are inherited
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@766: "
" + NL + "- All Known Implementing Classes:
" + NL +
bpatel@766: "- " +
bpatel@766: "PublicChild
" + NL + "
"},
duke@1:
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "" + NL + "- All Implemented Interfaces:
" + NL +
bpatel@766: "- " +
bpatel@766: "PublicInterface
" + NL + "
"},
duke@1:
duke@1: //Generic interface method test.
duke@1: {BUG_ID + "-1" + FS + "pkg2" + FS + "C.html",
duke@1: "This comment should get copied to the implementing class"},
duke@1: };
duke@1: private static final String[][] NEGATED_TEST1 = {
duke@1: // Should not document that a method overrides method from private class.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
bpatel@2147: "Overrides:"},
duke@1: // Should not document that a method specified by private interface.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
bpatel@2147: "Specified by:"},
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@2147: "Specified by:"},
duke@1: // Should not mention that any documentation was copied.
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
duke@1: "Description copied from"},
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
duke@1: "Description copied from"},
duke@1: // Don't extend private classes or interfaces
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
duke@1: "PrivateParent"},
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
duke@1: "PrivateInterface"},
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
duke@1: "PrivateInterface"},
duke@1: {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
duke@1: "All Superinterfaces"},
duke@1: // Make inherited constant are documented correctly.
duke@1: {BUG_ID + "-1" + FS + "constant-values.html",
duke@1: "PrivateInterface"},
duke@1:
duke@1: //Do not inherit private interface method with generic parameters.
duke@1: //This method has been implemented.
duke@1: {BUG_ID + "-1" + FS + "pkg2" + FS + "C.html",
bpatel@2147: "hello"},
duke@1: };
duke@1:
duke@1: // Test output when -private flag is used.
duke@1: private static final String[][] TEST2 = {
duke@1: // Field inheritence from non-public superclass.
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "Fields inherited from class pkg." +
bpatel@766: "" +
bpatel@766: "PrivateParent"
duke@1: },
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "" +
bpatel@766: "fieldInheritedFromParent"
duke@1: },
duke@1: // Field inheritence from non-public superinterface.
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@766: "Fields inherited from interface pkg." +
bpatel@766: "" +
bpatel@766: "PrivateInterface"
duke@1: },
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@766: "" +
bpatel@766: "fieldInheritedFromInterface"
duke@1: },
duke@1: // Method inheritence from non-public superclass.
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "Methods inherited from class pkg." +
bpatel@766: "" +
bpatel@766: "PrivateParent"
duke@1: },
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@2101: "" +
bpatel@766: "methodInheritedFromParent"
duke@1: },
duke@1: // Should document that a method overrides method from private class.
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@2147: "Overrides:" + NL +
bpatel@2101: "" +
bpatel@766: "methodOverridenFromParent
in class " +
bpatel@766: "" +
bpatel@766: "PrivateParent
"},
duke@1: // Should document that a method is specified by private interface.
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@2147: "Specified by:" + NL +
bpatel@2101: "" +
bpatel@766: "methodInterface
in interface " +
bpatel@766: "" +
bpatel@766: "PrivateInterface
"},
duke@1: // Method inheritence from non-public superinterface.
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@766: "Methods inherited from interface pkg." +
bpatel@766: "" +
bpatel@766: "PrivateInterface"
duke@1: },
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PrivateInterface.html",
bpatel@2101: "" +
bpatel@766: "methodInterface"
duke@1: },
duke@1: // Should mention that any documentation was copied.
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
duke@1: "Description copied from"},
duke@1: // Extend documented private classes or interfaces
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
duke@1: "extends"},
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
duke@1: "extends"},
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
duke@1: "All Superinterfaces"},
duke@1:
duke@1: //Make sure implemented interfaces from private superclass are inherited
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
bpatel@766: "" + NL + "- All Known Implementing Classes:
" + NL +
bpatel@766: "- " +
bpatel@766: "PrivateParent, " +
bpatel@766: "PublicChild" +
bpatel@766: "
" + NL + "
"},
duke@1:
duke@1: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@766: "" + NL + "- All Implemented Interfaces:
" + NL +
bpatel@766: "- " +
bpatel@766: "PrivateInterface, " +
bpatel@766: "" +
bpatel@766: "PublicInterface
" + NL + "
"},
duke@1:
duke@1: //Since private flag is used, we can document that private interface method
duke@1: //with generic parameters has been implemented.
duke@1: {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
bpatel@2147: "Description copied from interface: " +
bpatel@2101: "I
"},
duke@1:
duke@1: {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
bpatel@2147: "Specified by:" + NL +
bpatel@2101: "hello
" +
bpatel@766: " in interface " +
bpatel@766: "I" +
bpatel@766: "<java.lang.String>
"},
bpatel@1858:
bpatel@1858: //Make sure when no modifier appear in the class signature, the
bpatel@1858: //signature is displayed correctly without extra space at the beginning.
bpatel@1858: {BUG_ID + "-2" + FS + "pkg" + FS + "PrivateParent.html",
bpatel@2147: "class PrivateParent"},
bpatel@1858:
bpatel@1858: {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
bpatel@2147: "public class PublicChild"},
duke@1: };
bpatel@1858: private static final String[][] NEGATED_TEST2 = {
bpatel@1858: {BUG_ID + "-2" + FS + "pkg" + FS + "PrivateParent.html",
bpatel@2147: " class PrivateParent"},
bpatel@1858: };
duke@1:
duke@1: /**
duke@1: * The entry point of the test.
duke@1: * @param args the array of command line arguments.
duke@1: */
duke@1: public static void main(String[] args) {
duke@1: TestPrivateClasses tester = new TestPrivateClasses();
duke@1: run(tester, ARGS1, TEST1, NEGATED_TEST1);
duke@1: run(tester, ARGS2, TEST2, NEGATED_TEST2);
duke@1: tester.printSummary();
duke@1: }
duke@1:
duke@1: /**
duke@1: * {@inheritDoc}
duke@1: */
duke@1: public String getBugId() {
duke@1: return BUG_ID;
duke@1: }
duke@1:
duke@1: /**
duke@1: * {@inheritDoc}
duke@1: */
duke@1: public String getBugName() {
duke@1: return getClass().getName();
duke@1: }
duke@1: }