8016675: Make Javadoc pages more robust
Reviewed-by: jlaskey, ksrini
This commit is contained in:
parent
c1ca4a663a
commit
dd0661e5ad
@ -290,7 +290,7 @@ public class HtmlWriter {
|
||||
script.addAttr(HtmlAttr.TYPE, "text/javascript");
|
||||
String scriptCode = "<!--" + DocletConstants.NL +
|
||||
" if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
|
||||
" parent.document.title=\"" + winTitle + "\";" + DocletConstants.NL +
|
||||
" parent.document.title=\"" + escapeJavaScriptChars(winTitle) + "\";" + DocletConstants.NL +
|
||||
" }" + DocletConstants.NL +
|
||||
"//-->" + DocletConstants.NL;
|
||||
RawHtml scriptContent = new RawHtml(scriptCode);
|
||||
@ -299,6 +299,53 @@ public class HtmlWriter {
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a String with escaped special JavaScript characters.
|
||||
*
|
||||
* @param s String that needs to be escaped
|
||||
* @return a valid escaped JavaScript string
|
||||
*/
|
||||
private static String escapeJavaScriptChars(String s) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char ch = s.charAt(i);
|
||||
switch (ch) {
|
||||
case '\b':
|
||||
sb.append("\\b");
|
||||
break;
|
||||
case '\t':
|
||||
sb.append("\\t");
|
||||
break;
|
||||
case '\n':
|
||||
sb.append("\\n");
|
||||
break;
|
||||
case '\f':
|
||||
sb.append("\\f");
|
||||
break;
|
||||
case '\r':
|
||||
sb.append("\\r");
|
||||
break;
|
||||
case '"':
|
||||
sb.append("\\\"");
|
||||
break;
|
||||
case '\'':
|
||||
sb.append("\\\'");
|
||||
break;
|
||||
case '\\':
|
||||
sb.append("\\\\");
|
||||
break;
|
||||
default:
|
||||
if (ch < 32 || ch >= 127) {
|
||||
sb.append(String.format("\\u%04X", (int)ch));
|
||||
} else {
|
||||
sb.append(ch);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a content tree for the SCRIPT tag for the main page(index.html).
|
||||
*
|
||||
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 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 8016675
|
||||
* @summary Test for window title.
|
||||
* @author Bhavesh Patel
|
||||
* @library ../lib/
|
||||
* @build JavadocTester TestWindowTitle
|
||||
* @run main TestWindowTitle
|
||||
*/
|
||||
|
||||
public class TestWindowTitle extends JavadocTester {
|
||||
|
||||
private static final String BUG_ID = "8016675";
|
||||
private static final String WIN_TITLE =
|
||||
"Testing \"Window 'Title'\" with a \\ backslash and a / " +
|
||||
"forward slash and a \u00e8 unicode char also a tab and also a " +
|
||||
"\t special character another \u0002 unicode)";
|
||||
private static final String[][] TEST = {
|
||||
{BUG_ID + FS + "overview-summary.html",
|
||||
"parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" " +
|
||||
"with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char " +
|
||||
"also a tab and also a \\t special character another \\u0002 unicode))\";"
|
||||
},
|
||||
};
|
||||
private static final String[][] NEG_TEST = {
|
||||
{BUG_ID + FS + "overview-summary.html",
|
||||
"parent.document.title=\"Overview (Testing \"Window \'Title\'\" " +
|
||||
"with a \\ backslash and a / forward slash and a \u00E8 unicode char " +
|
||||
"also a tab and also a \t special character another \u0002 unicode))\";"
|
||||
},
|
||||
};
|
||||
private static final String[] ARGS = new String[]{
|
||||
"-d", BUG_ID, "-windowtitle", WIN_TITLE, "-sourcepath", SRC_DIR, "p1", "p2"
|
||||
};
|
||||
|
||||
/**
|
||||
* The entry point of the test.
|
||||
* @param args the array of command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
TestWindowTitle tester = new TestWindowTitle();
|
||||
run(tester, ARGS, TEST, NEG_TEST);
|
||||
tester.printSummary();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String getBugId() {
|
||||
return BUG_ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public String getBugName() {
|
||||
return getClass().getName();
|
||||
}
|
||||
}
|
27
langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java
Normal file
27
langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 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.
|
||||
*/
|
||||
|
||||
package p1;
|
||||
|
||||
public class C1 {
|
||||
}
|
27
langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java
Normal file
27
langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 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.
|
||||
*/
|
||||
|
||||
package p2;
|
||||
|
||||
public class C2 {
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user