From: <rb...@us...> - 2013-06-14 20:24:06
|
Revision: 8344 http://sourceforge.net/p/htmlunit/code/8344 Author: rbri Date: 2013-06-14 20:24:02 +0000 (Fri, 14 Jun 2013) Log Message: ----------- use english as locale for upper/lowecase conversion instead of the default one to reduce the environment dependencies Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/DefaultPageCreator.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/FormEncodingType.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DefaultElementFactory.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNamespaceNode.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlButton.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMeta.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/InputElementFactory.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/xpath/XPathAdapter.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/ProxyAutoConfig.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/ActiveXObject.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Console.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventListenersContainer.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventNode.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleRule.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLCollection.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLSerializer.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/EncodingSniffer.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/MimeType.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/StringUtils.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/xml/XmlUtil.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/HttpWebConnection2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/UrlFetchWebConnectionTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/AttributesTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/BaseFrameElementTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequestTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/DefaultPageCreator.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/DefaultPageCreator.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/DefaultPageCreator.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -147,7 +147,7 @@ * @return the new page object */ public Page createPage(final WebResponse webResponse, final WebWindow webWindow) throws IOException { - final String contentType = determineContentType(webResponse.getContentType().toLowerCase(), + final String contentType = determineContentType(webResponse.getContentType().toLowerCase(Locale.ENGLISH), webResponse.getContentAsStream()); final PageType pageType = determinePageType(contentType); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/FormEncodingType.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/FormEncodingType.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/FormEncodingType.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit; import java.io.Serializable; +import java.util.Locale; /** * A collection of constants that represent the various ways a form can be encoded when submitted. @@ -53,7 +54,7 @@ * @return the constant corresponding to the specified name, {@link #URL_ENCODED} if none match. */ public static FormEncodingType getInstance(final String name) { - final String lowerCaseName = name.toLowerCase(); + final String lowerCaseName = name.toLowerCase(Locale.ENGLISH); if (MULTIPART.getName().equals(lowerCaseName)) { return MULTIPART; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DefaultElementFactory.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DefaultElementFactory.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DefaultElementFactory.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import org.xml.sax.Attributes; @@ -130,10 +131,10 @@ final String tagName; final int colonIndex = qualifiedName.indexOf(':'); if (colonIndex == -1) { - tagName = qualifiedName.toLowerCase(); + tagName = qualifiedName.toLowerCase(Locale.ENGLISH); } else { - tagName = qualifiedName.substring(colonIndex + 1).toLowerCase(); + tagName = qualifiedName.substring(colonIndex + 1).toLowerCase(Locale.ENGLISH); } // final Class<? extends HtmlElement> klass = JavaScriptConfiguration.getHtmlTagNameMapping().get(tagName); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomElement.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -22,6 +22,7 @@ import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; @@ -623,7 +624,7 @@ if (caseSensitive_) { return name; } - return name.toLowerCase(); + return name.toLowerCase(Locale.ENGLISH); } /** @@ -682,10 +683,11 @@ */ public DomAttr put(final String key, final DomAttr value) { final String name = fixName(key); - if (!map_.containsKey(name)) { + final DomAttr previous = map_.put(name, value); + if (null == previous) { attrPositions_.add(name); } - return map_.put(name, value); + return previous; } /** Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNamespaceNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNamespaceNode.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNamespaceNode.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -14,6 +14,8 @@ */ package com.gargoylesoftware.htmlunit.html; +import java.util.Locale; + import com.gargoylesoftware.htmlunit.SgmlPage; import com.gargoylesoftware.htmlunit.WebAssert; import com.gargoylesoftware.htmlunit.html.xpath.XPathUtils; @@ -73,7 +75,7 @@ public String getLocalName() { final boolean caseSensitive = getPage().hasCaseSensitiveTagNames(); if (!caseSensitive && XPathUtils.isProcessingXPath()) { // and this method was called from Xalan - return localName_.toLowerCase(); + return localName_.toLowerCase(Locale.ENGLISH); } return localName_; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Stack; @@ -359,7 +360,7 @@ tagName = tagName.substring(index + 1); } else { - tagName = tagName.toLowerCase(); + tagName = tagName.toLowerCase(Locale.ENGLISH); } final ElementFactory factory = ELEMENT_FACTORIES.get(tagName); @@ -498,7 +499,7 @@ handleCharacters(); - final String tagLower = localName.toLowerCase(); + final String tagLower = localName.toLowerCase(Locale.ENGLISH); if (page_.isParsingHtmlSnippet() && ("html".equals(tagLower) || "body".equals(tagLower))) { return; } @@ -641,7 +642,7 @@ handleCharacters(); - final String tagLower = localName.toLowerCase(); + final String tagLower = localName.toLowerCase(Locale.ENGLISH); if (page_.isParsingHtmlSnippet() && ("html".equals(tagLower) || "body".equals(tagLower))) { return; @@ -869,7 +870,7 @@ // add the attributes that don't already exist final int length = attrs.getLength(); for (int i = 0; i < length; ++i) { - final String attrName = attrs.getLocalName(i).toLowerCase(); + final String attrName = attrs.getLocalName(i).toLowerCase(Locale.ENGLISH); if (body_.getAttributes().getNamedItem(attrName) == null) { body_.setAttribute(attrName, attrs.getValue(i)); if (attrName.startsWith("on") && body_.getScriptObject() != null) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -20,6 +20,7 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.util.Locale; import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -210,7 +211,7 @@ * @return <code>true</code> if the point is contained in this area */ boolean containsPoint(final int x, final int y) { - final String shape = StringUtils.defaultIfEmpty(getShapeAttribute(), "rect").toLowerCase(); + final String shape = StringUtils.defaultIfEmpty(getShapeAttribute(), "rect").toLowerCase(Locale.ENGLISH); if ("default".equals(shape) && getCoordsAttribute() != null) { return true; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlButton.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlButton.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlButton.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.Locale; import java.util.Map; import org.apache.commons.logging.Log; @@ -78,7 +79,7 @@ */ @Override protected boolean doClickStateUpdate() throws IOException { - final String type = getTypeAttribute().toLowerCase(); + final String type = getTypeAttribute().toLowerCase(Locale.ENGLISH); final HtmlForm form = getEnclosingForm(); if (form != null) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -26,6 +26,7 @@ import java.io.StringWriter; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Map; import net.sourceforge.htmlunit.corejs.javascript.BaseFunction; @@ -193,7 +194,7 @@ @SuppressWarnings("unchecked") public final <E extends HtmlElement> List<E> getHtmlElementsByTagName(final String tagName) { final List<E> list = new ArrayList<E>(); - final String lowerCaseTagName = tagName.toLowerCase(); + final String lowerCaseTagName = tagName.toLowerCase(Locale.ENGLISH); final Iterable<HtmlElement> iterable = getHtmlElementDescendants(); for (final HtmlElement element : iterable) { if (lowerCaseTagName.equals(element.getTagName())) { @@ -218,7 +219,8 @@ htmlPage.removeMappedElement(this); } - super.removeAttribute(attributeName.toLowerCase()); + // TODO is this toLowerCase call needed? + super.removeAttribute(attributeName.toLowerCase(Locale.ENGLISH)); if (htmlPage != null) { htmlPage.addMappedElement(this); @@ -306,12 +308,12 @@ final String prefix = getPrefix(); if (prefix != null) { // create string builder only if needed (performance) - final StringBuilder name = new StringBuilder(prefix); + final StringBuilder name = new StringBuilder(prefix.toLowerCase(Locale.ENGLISH)); name.append(':'); - name.append(getLocalName()); - return name.toString().toLowerCase(); + name.append(getLocalName().toLowerCase(Locale.ENGLISH)); + return name.toString(); } - return getLocalName().toLowerCase(); + return getLocalName().toLowerCase(Locale.ENGLISH); } /** @@ -355,7 +357,7 @@ * @return the first element with the specified tag name that is an ancestor to this element */ public HtmlElement getEnclosingElement(final String tagName) { - final String tagNameLC = tagName.toLowerCase(); + final String tagNameLC = tagName.toLowerCase(Locale.ENGLISH); for (DomNode currentNode = getParentNode(); currentNode != null; currentNode = currentNode.getParentNode()) { if (currentNode instanceof HtmlElement && currentNode.getNodeName().equals(tagNameLC)) { @@ -706,7 +708,7 @@ final String attributeValue) { final List<E> list = new ArrayList<E>(); - final String lowerCaseTagName = elementName.toLowerCase(); + final String lowerCaseTagName = elementName.toLowerCase(Locale.ENGLISH); for (final HtmlElement next : getHtmlElementDescendants()) { if (next.getTagName().equals(lowerCaseTagName)) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlForm.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.regex.Pattern; @@ -229,8 +230,10 @@ * @return the charset to use for the form submission */ private String getSubmitCharset() { - if (getAcceptCharsetAttribute().length() > 0) { - return SUBMIT_CHARSET_PATTERN.matcher(getAcceptCharsetAttribute().trim()).replaceAll("").toUpperCase(); + String charset = getAcceptCharsetAttribute(); + if (charset.length() > 0) { + charset = charset.trim(); + return SUBMIT_CHARSET_PATTERN.matcher(charset).replaceAll("").toUpperCase(Locale.ENGLISH); } return getPage().getPageEncoding(); } @@ -329,7 +332,7 @@ } if (element instanceof HtmlInput) { - final String type = element.getAttribute("type").toLowerCase(); + final String type = element.getAttribute("type").toLowerCase(Locale.ENGLISH); if ("radio".equals(type) || "checkbox".equals(type)) { return element.hasAttribute("checked"); } @@ -361,7 +364,7 @@ } if (element instanceof HtmlInput) { final HtmlInput input = (HtmlInput) element; - final String type = input.getTypeAttribute().toLowerCase(); + final String type = input.getTypeAttribute().toLowerCase(Locale.ENGLISH); if ("submit".equals(type) || "image".equals(type) || "reset".equals(type) || "button".equals(type)) { return false; } @@ -402,7 +405,7 @@ final String attributeValue) { final List<E> list = new ArrayList<E>(); - final String lowerCaseTagName = elementName.toLowerCase(); + final String lowerCaseTagName = elementName.toLowerCase(Locale.ENGLISH); for (final HtmlElement next : getFormHtmlElementDescendants()) { if (next.getTagName().equals(lowerCaseTagName)) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMeta.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMeta.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMeta.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -16,6 +16,7 @@ import java.net.URL; import java.util.Date; +import java.util.Locale; import java.util.Map; import java.util.regex.Pattern; @@ -69,7 +70,7 @@ String path = null; Date expires = null; for (int i = 1; i < parts.length; i++) { - final String partName = StringUtils.substringBefore(parts[i], "=").trim().toLowerCase(); + final String partName = StringUtils.substringBefore(parts[i], "=").trim().toLowerCase(Locale.ENGLISH); final String partValue = StringUtils.substringAfter(parts[i], "=").trim(); if ("path".equals(partName)) { path = partValue; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -37,6 +37,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; @@ -518,7 +519,7 @@ @Override public DomElement createElement(String tagName) { if (tagName.indexOf(':') == -1) { - tagName = tagName.toLowerCase(); + tagName = tagName.toLowerCase(Locale.ENGLISH); } return HTMLParser.getFactory(tagName).createElementNS(this, null, tagName, null, true); } @@ -896,7 +897,7 @@ public List<HtmlElement> getHtmlElementsByAccessKey(final char accessKey) { final List<HtmlElement> elements = new ArrayList<HtmlElement>(); - final String searchString = Character.toString(accessKey).toLowerCase(); + final String searchString = Character.toString(accessKey).toLowerCase(Locale.ENGLISH); final List<String> acceptableTagNames = Arrays.asList( new String[]{"a", "area", "button", "input", "label", "legend", "textarea"}); @@ -1347,7 +1348,7 @@ LOG.error("Malformed refresh string (no valid number before ';') " + refreshString, e); return; } - index = refreshString.toLowerCase().indexOf("url=", index); + index = refreshString.toLowerCase(Locale.ENGLISH).indexOf("url=", index); if (index == -1) { LOG.error("Malformed refresh string (found ';' but no 'url='): " + refreshString); return; @@ -1989,11 +1990,11 @@ if (getDocumentElement() == null) { return Collections.emptyList(); // weird case, for instance if document.documentElement has been removed } - final String nameLC = httpEquiv.toLowerCase(); + final String nameLC = httpEquiv.toLowerCase(Locale.ENGLISH); final List<HtmlMeta> tags = getDocumentElement().getHtmlElementsByTagName("meta"); for (final Iterator<HtmlMeta> iter = tags.iterator(); iter.hasNext();) { final HtmlMeta element = iter.next(); - if (!nameLC.equals(element.getHttpEquivAttribute().toLowerCase())) { + if (!nameLC.equals(element.getHttpEquivAttribute().toLowerCase(Locale.ENGLISH))) { iter.remove(); } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/InputElementFactory.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/InputElementFactory.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/InputElementFactory.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.html; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import org.apache.commons.logging.Log; @@ -88,7 +89,7 @@ type = ""; } else { - type = type.toLowerCase(); + type = type.toLowerCase(Locale.ENGLISH); attributeMap.get("type").setValue(type); // type value has to be lower case } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/xpath/XPathAdapter.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/xpath/XPathAdapter.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/xpath/XPathAdapter.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -14,6 +14,7 @@ */ package com.gargoylesoftware.htmlunit.html.xpath; +import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -105,7 +106,7 @@ final Matcher matcher = PREPROCESS_XPATH_PATTERN.matcher(xpath); while (matcher.find()) { final String attribute = matcher.group(1); - xpath = xpath.replace(attribute, attribute.toLowerCase()); + xpath = xpath.replace(attribute, attribute.toLowerCase(Locale.ENGLISH)); } return xpath; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/ProxyAutoConfig.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/ProxyAutoConfig.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/ProxyAutoConfig.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -18,6 +18,7 @@ import java.net.URL; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Locale; import java.util.TimeZone; import java.util.regex.Pattern; @@ -223,7 +224,7 @@ } final Calendar calendar = Calendar.getInstance(timezone); for (int i = 0; i < 7; i++) { - final String day = new SimpleDateFormat("EEE").format(calendar.getTime()).toUpperCase(); + final String day = new SimpleDateFormat("EEE").format(calendar.getTime()).toUpperCase(Locale.ENGLISH); if (day.equals(wd2)) { return true; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/ActiveXObject.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/ActiveXObject.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/ActiveXObject.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -17,6 +17,7 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; import java.lang.reflect.Method; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; @@ -145,7 +146,7 @@ if (name == null) { return false; } - name = name.toLowerCase(); + name = name.toLowerCase(Locale.ENGLISH); return "microsoft.xmlhttp".equals(name) || name.startsWith("msxml2.xmlhttp"); } @@ -158,8 +159,8 @@ if (name == null) { return false; } - name = name.toLowerCase(); - return "Microsoft.XMLDOM".equalsIgnoreCase(name) + name = name.toLowerCase(Locale.ENGLISH); + return "microsoft.xmldom".equals(name) || name.matches("msxml\\d*\\.domdocument.*") || name.matches("msxml\\d*\\.freethreadeddomdocument.*"); } @@ -173,7 +174,7 @@ if (name == null) { return false; } - name = name.toLowerCase(); + name = name.toLowerCase(Locale.ENGLISH); return name.matches("msxml\\d*\\.xsltemplate.*"); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Console.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Console.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Console.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -19,6 +19,7 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -414,7 +415,7 @@ break; default: if (ch < ' ' || ch > '~') { - sb.append("\\u" + Integer.toHexString(ch).toUpperCase()); + sb.append("\\u" + Integer.toHexString(ch).toUpperCase(Locale.ENGLISH)); } else { sb.append(ch); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -14,9 +14,9 @@ */ package com.gargoylesoftware.htmlunit.javascript.host; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOCUMENT_DESIGN_MODE_INHERIT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_32; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOCUMENT_CREATE_ELEMENT_EXTENDED_SYNTAX; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOCUMENT_DESIGN_MODE_INHERIT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.XUL_SUPPORT; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; @@ -505,15 +505,14 @@ } else { final boolean useLocalName = getBrowserVersion().hasFeature(GENERATED_32); - final String tagNameLC = tagName.toLowerCase(); collection = new HTMLCollection(getDomNodeOrDie(), false, description) { @Override protected boolean isMatching(final DomNode node) { if (useLocalName) { - return tagNameLC.equalsIgnoreCase(node.getLocalName()); + return tagName.equalsIgnoreCase(node.getLocalName()); } - return tagNameLC.equalsIgnoreCase(node.getNodeName()); + return tagName.equalsIgnoreCase(node.getNodeName()); } }; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import net.sourceforge.htmlunit.corejs.javascript.Scriptable; @@ -205,7 +206,7 @@ */ @JsxFunction public HTMLCollection getElementsByTagName(final String tagName) { - final String tagNameLC = tagName.toLowerCase(); + final String tagNameLC = tagName.toLowerCase(Locale.ENGLISH); if (elementsByTagName_ == null) { elementsByTagName_ = new HashMap<String, HTMLCollection>(); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventListenersContainer.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventListenersContainer.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventListenersContainer.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import net.sourceforge.htmlunit.corejs.javascript.EvaluatorException; @@ -102,16 +103,17 @@ } private Handlers getHandlersOrCreateIt(final String type) { - Handlers handlers = eventHandlers_.get(type.toLowerCase()); + final String typeLC = type.toLowerCase(Locale.ENGLISH); + Handlers handlers = eventHandlers_.get(typeLC); if (handlers == null) { handlers = new Handlers(); - eventHandlers_.put(type.toLowerCase(), handlers); + eventHandlers_.put(typeLC, handlers); } return handlers; } private List<Function> getHandlers(final String eventType, final boolean useCapture) { - final Handlers handlers = eventHandlers_.get(eventType.toLowerCase()); + final Handlers handlers = eventHandlers_.get(eventType.toLowerCase(Locale.ENGLISH)); if (handlers != null) { return handlers.getHandlers(useCapture); } @@ -255,7 +257,7 @@ * @return the handler function, <code>null</code> if the property is null or not a function */ public Function getEventHandler(final String eventName) { - final Object handler = getEventHandlerProp(eventName.toLowerCase()); + final Object handler = getEventHandlerProp(eventName.toLowerCase(Locale.ENGLISH)); if (handler instanceof Function) { return (Function) handler; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventNode.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/EventNode.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -16,6 +16,8 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; +import java.util.Locale; + import org.apache.commons.lang3.StringUtils; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; @@ -375,7 +377,7 @@ } // Create the event, whose class will depend on the type specified. - final String cleanedType = StringUtils.removeStart(type.toLowerCase(), "on"); + final String cleanedType = StringUtils.removeStart(type.toLowerCase(Locale.ENGLISH), "on"); if (MouseEvent.isMouseEvent(cleanedType)) { event.setPrototype(getPrototype(MouseEvent.class)); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Locale; import net.sourceforge.htmlunit.corejs.javascript.Context; import net.sourceforge.htmlunit.corejs.javascript.Function; @@ -872,7 +873,9 @@ if (eventListenersContainer_ == null) { return null; } - return eventListenersContainer_.getEventHandlerProp(StringUtils.substring(eventName.toLowerCase(), 2)); + + final String name = StringUtils.substring(eventName.toLowerCase(Locale.ENGLISH), 2); + return eventListenersContainer_.getEventHandlerProp(name); } /** Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -34,6 +34,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.WeakHashMap; @@ -1825,7 +1826,7 @@ return; } if (changed instanceof HtmlLink) { - final String rel = ((HtmlLink) changed).getRelAttribute().toLowerCase(); + final String rel = ((HtmlLink) changed).getRelAttribute().toLowerCase(Locale.ENGLISH); if ("stylesheet".equals(rel)) { synchronized (computedStyles_) { computedStyles_.clear(); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -37,6 +37,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; @@ -599,7 +600,7 @@ for (final String token : StringUtils.split(styleAttribute, ';')) { final int index = token.indexOf(":"); if (index != -1) { - final String key = token.substring(0, index).trim().toLowerCase(); + final String key = token.substring(0, index).trim().toLowerCase(Locale.ENGLISH); String value = token.substring(index + 1).trim(); String priority = ""; if (StringUtils.endsWithIgnoreCase(value, "!important")) { @@ -4234,7 +4235,7 @@ * @return whether the token is a reserved color keyword or not */ private static boolean isColorKeyword(final String token) { - return CSSColors_.containsKey(token.toLowerCase()); + return CSSColors_.containsKey(token.toLowerCase(Locale.ENGLISH)); } /** @@ -4244,7 +4245,7 @@ * in the form "rgb(x, y, z)" otherwise */ public static String toRGBColor(final String color) { - final String rgbValue = CSSColors_.get(color.toLowerCase()); + final String rgbValue = CSSColors_.get(color.toLowerCase(Locale.ENGLISH)); if (rgbValue != null) { return rgbValue; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleRule.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleRule.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleRule.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -16,6 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_SELECTOR_TEXT_UPPERCASE; +import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -69,10 +70,10 @@ // nothing } else if (getBrowserVersion().hasFeature(JS_SELECTOR_TEXT_UPPERCASE)) { - fixedName = fixedName.toUpperCase(); + fixedName = fixedName.toUpperCase(Locale.ENGLISH); } else { - fixedName = fixedName.toLowerCase(); + fixedName = fixedName.toLowerCase(Locale.ENGLISH); } fixedName = StringUtils.sanitizeForAppendReplacement(fixedName); m.appendReplacement(sb, fixedName); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; import net.sourceforge.htmlunit.corejs.javascript.Function; @@ -126,7 +127,7 @@ } private void doGetPosition() { - final String os = System.getProperty("os.name").toLowerCase(); + final String os = System.getProperty("os.name").toLowerCase(Locale.ENGLISH); String wifiStringString = null; if (os.contains("win")) { wifiStringString = getWifiStringWindows(); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBodyElement.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -18,6 +18,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_41; import java.net.MalformedURLException; +import java.util.Locale; import net.sourceforge.htmlunit.corejs.javascript.Context; @@ -50,7 +51,7 @@ public void createEventHandlerFromAttribute(final String attributeName, final String value) { // when many body tags are found while parsing, attributes of // different tags are added and should create an event handler when needed - if (attributeName.toLowerCase().startsWith("on")) { + if (attributeName.toLowerCase(Locale.ENGLISH).startsWith("on")) { createEventHandler(attributeName, value); } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLCollection.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLCollection.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLCollection.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -311,11 +311,10 @@ */ @JsxFunction(@WebBrowser(IE)) public Object tags(final String tagName) { - final String tagNameLC = tagName.toLowerCase(); final HTMLCollection collection = new HTMLSubCollection(this, ".tags('" + tagName + "')") { @Override protected boolean isMatching(final DomNode node) { - return tagNameLC.equalsIgnoreCase(node.getLocalName()); + return tagName.equalsIgnoreCase(node.getLocalName()); } }; return collection; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -43,7 +43,6 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; -import static com.gargoylesoftware.htmlunit.util.StringUtils.containsCaseInsensitive; import static com.gargoylesoftware.htmlunit.util.StringUtils.parseHttpDate; import java.io.IOException; @@ -55,7 +54,9 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.StringTokenizer; @@ -173,40 +174,12 @@ */ private static final Map<String, Class<? extends Event>> SUPPORTED_EVENT_TYPE_MAP; - private static final List<String> EXECUTE_CMDS_IE = Arrays.asList( - "2D-Position", "AbsolutePosition", "BackColor", "BackgroundImageCache" /* Undocumented */, - "BlockDirLTR", "BlockDirRTL", "Bold", "BrowseMode", "ClearAuthenticationCache", "Copy", "CreateBookmark", - "CreateLink", "Cut", "Delete", "DirLTR", "DirRTL", - "EditMode", "FontName", "FontSize", "ForeColor", "FormatBlock", - "Indent", "InlineDirLTR", "InlineDirRTL", "InsertButton", "InsertFieldset", - "InsertHorizontalRule", "InsertIFrame", "InsertImage", "InsertInputButton", "InsertInputCheckbox", - "InsertInputFileUpload", "InsertInputHidden", "InsertInputImage", "InsertInputPassword", "InsertInputRadio", - "InsertInputReset", "InsertInputSubmit", "InsertInputText", "InsertMarquee", "InsertOrderedList", - "InsertParagraph", "InsertSelectDropdown", "InsertSelectListbox", "InsertTextArea", "InsertUnorderedList", - "Italic", "JustifyCenter", "JustifyFull", "JustifyLeft", "JustifyNone", - "JustifyRight", "LiveResize", "MultipleSelection", "Open", "Outdent", - "OverWrite", "Paste", "PlayImage", "Print", "Redo", - "Refresh", "RemoveFormat", "RemoveParaFormat", "SaveAs", "SelectAll", - "SizeToControl", "SizeToControlHeight", "SizeToControlWidth", "Stop", "StopImage", - "StrikeThrough", "Subscript", "Superscript", "UnBookmark", "Underline", - "Undo", "Unlink", "Unselect" - ); - + // all as lowercase for performance + private static final Set<String> EXECUTE_CMDS_IE = new HashSet<String>(); /** https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing_Commands */ - private static final List<String> EXECUTE_CMDS_FF = Arrays.asList( - "backColor", "bold", "contentReadOnly", "copy", "createLink", "cut", "decreaseFontSize", "delete", - "fontName", "fontSize", "foreColor", "formatBlock", "heading", "hiliteColor", "increaseFontSize", - "indent", "insertHorizontalRule", "insertHTML", "insertImage", "insertOrderedList", "insertUnorderedList", - "insertParagraph", "italic", "justifyCenter", "justifyLeft", "justifyRight", "outdent", "paste", "redo", - "removeFormat", "selectAll", "strikeThrough", "subscript", "superscript", "underline", "undo", "unlink", - "useCSS", "styleWithCSS" - ); + private static final Set<String> EXECUTE_CMDS_FF = new HashSet<String>(); + private static final Set<String> EXECUTE_CMDS_FF17 = new HashSet<String>(); - private static final List<String> EXECUTE_CMDS_FF17 = new ArrayList<String>(EXECUTE_CMDS_FF) { { - add("JustifyFull"); - } - }; - /** * Static counter for {@link #uniqueID_}. */ @@ -248,6 +221,44 @@ eventMap.put("UIEvent", UIEvent.class); eventMap.put("UIEvents", UIEvent.class); SUPPORTED_EVENT_TYPE_MAP = Collections.unmodifiableMap(eventMap); + + // commands + List<String> cmds = Arrays.asList( + "2D-Position", "AbsolutePosition", "BackColor", "BackgroundImageCache" /* Undocumented */, + "BlockDirLTR", "BlockDirRTL", "Bold", "BrowseMode", "ClearAuthenticationCache", "Copy", "CreateBookmark", + "CreateLink", "Cut", "Delete", "DirLTR", "DirRTL", + "EditMode", "FontName", "FontSize", "ForeColor", "FormatBlock", + "Indent", "InlineDirLTR", "InlineDirRTL", "InsertButton", "InsertFieldset", + "InsertHorizontalRule", "InsertIFrame", "InsertImage", "InsertInputButton", "InsertInputCheckbox", + "InsertInputFileUpload", "InsertInputHidden", "InsertInputImage", "InsertInputPassword", "InsertInputRadio", + "InsertInputReset", "InsertInputSubmit", "InsertInputText", "InsertMarquee", "InsertOrderedList", + "InsertParagraph", "InsertSelectDropdown", "InsertSelectListbox", "InsertTextArea", "InsertUnorderedList", + "Italic", "JustifyCenter", "JustifyFull", "JustifyLeft", "JustifyNone", + "JustifyRight", "LiveResize", "MultipleSelection", "Open", "Outdent", + "OverWrite", "Paste", "PlayImage", "Print", "Redo", + "Refresh", "RemoveFormat", "RemoveParaFormat", "SaveAs", "SelectAll", + "SizeToControl", "SizeToControlHeight", "SizeToControlWidth", "Stop", "StopImage", + "StrikeThrough", "Subscript", "Superscript", "UnBookmark", "Underline", + "Undo", "Unlink", "Unselect" + ); + for (String cmd : cmds) { + EXECUTE_CMDS_IE.add(cmd.toLowerCase(Locale.ENGLISH)); + } + + cmds = Arrays.asList( + "backColor", "bold", "contentReadOnly", "copy", "createLink", "cut", "decreaseFontSize", "delete", + "fontName", "fontSize", "foreColor", "formatBlock", "heading", "hiliteColor", "increaseFontSize", + "indent", "insertHorizontalRule", "insertHTML", "insertImage", "insertOrderedList", "insertUnorderedList", + "insertParagraph", "italic", "justifyCenter", "justifyLeft", "justifyRight", "outdent", "paste", "redo", + "removeFormat", "selectAll", "strikeThrough", "subscript", "superscript", "underline", "undo", "unlink", + "useCSS", "styleWithCSS" + ); + for (String cmd : cmds) { + EXECUTE_CMDS_FF.add(cmd.toLowerCase(Locale.ENGLISH)); + EXECUTE_CMDS_FF17.add(cmd.toLowerCase(Locale.ENGLISH)); + } + + EXECUTE_CMDS_FF17.add("JustifyFull".toLowerCase(Locale.ENGLISH)); } /** @@ -929,10 +940,11 @@ final String token = st.nextToken(); final int indexEqual = token.indexOf('='); if (indexEqual > -1) { - atts.put(token.substring(0, indexEqual).toLowerCase().trim(), token.substring(indexEqual + 1).trim()); + atts.put(token.substring(0, indexEqual).trim().toLowerCase(Locale.ENGLISH), + token.substring(indexEqual + 1).trim()); } else { - atts.put(token.toLowerCase().trim(), Boolean.TRUE); + atts.put(token.trim().toLowerCase(Locale.ENGLISH), Boolean.TRUE); } } @@ -1009,7 +1021,7 @@ public String getCharset() { String charset = getHtmlPage().getPageEncoding(); if (getBrowserVersion().hasFeature(HTMLDOCUMENT_CHARSET_LOWERCASE)) { - charset = charset.toLowerCase(); + charset = charset.toLowerCase(Locale.ENGLISH); } return charset; } @@ -1603,7 +1615,7 @@ } domain_ = url.getHost(); if (getBrowserVersion().hasFeature(JS_DOCUMENT_DOMAIN_IS_LOWERCASE)) { - domain_ = domain_.toLowerCase(); + domain_ = domain_.toLowerCase(Locale.ENGLISH); } } @@ -1661,14 +1673,14 @@ } if (currentDomain.indexOf('.') > -1 - && !currentDomain.toLowerCase().endsWith("." + newDomain.toLowerCase())) { + && !currentDomain.toLowerCase(Locale.ENGLISH).endsWith("." + newDomain.toLowerCase(Locale.ENGLISH))) { throw Context.reportRuntimeError("Illegal domain value, cannot set domain from: \"" + currentDomain + "\" to: \"" + newDomain + "\""); } // Netscape down shifts the case of the domain if (browserVersion.hasFeature(JS_DOCUMENT_DOMAIN_IS_LOWERCASE)) { - domain_ = newDomain.toLowerCase(); + domain_ = newDomain.toLowerCase(Locale.ENGLISH); } else { domain_ = newDomain; @@ -1892,13 +1904,20 @@ } private boolean hasCommand(final String cmd) { + if (null == cmd) { + return false; + } + + final String cmdLC = cmd.toLowerCase(Locale.ENGLISH); if (getBrowserVersion().isIE()) { - return containsCaseInsensitive(EXECUTE_CMDS_IE, cmd); + return EXECUTE_CMDS_IE.contains(cmdLC); } else if ("FF3.6".equals(getBrowserVersion().getNickname())) { - return containsCaseInsensitive(EXECUTE_CMDS_FF, cmd); + return EXECUTE_CMDS_FF.contains(cmdLC); } - return containsCaseInsensitive(EXECUTE_CMDS_FF17, cmd); + else { + return EXECUTE_CMDS_FF17.contains(cmdLC); + } } /** Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -52,6 +52,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; @@ -513,14 +514,15 @@ public String getLocalName() { final DomNode domNode = getDomNodeOrDie(); if (domNode.getPage() instanceof HtmlPage) { - final StringBuilder localName = new StringBuilder(); final String prefix = domNode.getPrefix(); if (prefix != null) { - localName.append(prefix); + // create string builder only if needed (performance) + final StringBuilder localName = new StringBuilder(prefix.toUpperCase(Locale.ENGLISH)); localName.append(':'); + localName.append(domNode.getLocalName().toUpperCase(Locale.ENGLISH)); + return localName.toString(); } - localName.append(domNode.getLocalName()); - return localName.toString().toUpperCase(); + return domNode.getLocalName().toUpperCase(Locale.ENGLISH); } return domNode.getLocalName(); } @@ -557,7 +559,7 @@ // can name be an attribute of current element? // first approximation: attribute are all lowercase // this should be improved because it's wrong. For instance: tabIndex, hideFocus, acceptCharset - return name.toLowerCase().equals(name); + return name.toLowerCase(Locale.ENGLISH).equals(name); } /** @@ -681,7 +683,7 @@ // FF: call corresponding event handler setOnxxx if found if (getBrowserVersion().hasFeature(JS_SET_ATTRIBUTE_SUPPORTS_EVENT_HANDLERS) && !name.isEmpty()) { - name = name.toLowerCase(); + name = name.toLowerCase(Locale.ENGLISH); if (name.startsWith("on")) { try { name = Character.toUpperCase(name.charAt(0)) + name.substring(1); @@ -928,7 +930,7 @@ final boolean isUpperCase = getBrowserVersion().hasFeature(HTMLELEMENT_OUTER_HTML_UPPER_CASE); String tag = element.getTagName(); if (isUpperCase && !scriptObject.isLowerCaseInOuterHtml()) { - tag = tag.toUpperCase(); + tag = tag.toUpperCase(Locale.ENGLISH); } buffer.append("<").append(tag); // Add the attributes. IE does not use quotes, FF does. @@ -1055,7 +1057,7 @@ parseHtmlSnippet(fragment, false, value); DomNode child = fragment.getFirstChild(); if (child instanceof DomElement) { - final String parentName = domNode.getParentNode().getNodeName().toUpperCase(); + final String parentName = domNode.getParentNode().getNodeName().toUpperCase(Locale.ENGLISH); final short[] closes = HTMLElements.getElement(child.getNodeName()).closes; if (closes != null) { for (final short close : closes) { @@ -2075,7 +2077,7 @@ final DomNode domNode = getDomNodeOrDie(); String nodeName = domNode.getNodeName(); if (domNode.getPage() instanceof HtmlPage) { - nodeName = nodeName.toUpperCase(); + nodeName = nodeName.toUpperCase(Locale.ENGLISH); } return nodeName; } @@ -2320,12 +2322,12 @@ s = null; for (final String key : COLORS_MAP_IE.keySet()) { if (key.equalsIgnoreCase(value)) { - s = COLORS_MAP_IE.get(key).toLowerCase(); + s = COLORS_MAP_IE.get(key).toLowerCase(Locale.ENGLISH); break; } } if (s == null) { - s = value.toLowerCase(); + s = value.toLowerCase(Locale.ENGLISH); if (s.charAt(0) == '#') { s = s.substring(1); } @@ -2376,7 +2378,7 @@ * (i.e., it will not actually set the align attribute) */ protected void setAlign(final String align, final boolean ignoreIfNoError) { - final String alignLC = align.toLowerCase(); + final String alignLC = align.toLowerCase(Locale.ENGLISH); final boolean acceptArbitraryValues = getBrowserVersion().hasFeature(JS_ALIGN_ACCEPTS_ARBITRARY_VALUES); if (acceptArbitraryValues || "center".equals(alignLC) @@ -2413,7 +2415,7 @@ * @param valid the valid values; if <tt>null</tt>, any value is valid */ protected void setVAlign(final Object vAlign, final String[] valid) { - final String s = Context.toString(vAlign).toLowerCase(); + final String s = Context.toString(vAlign).toLowerCase(Locale.ENGLISH); if (valid == null || ArrayUtils.contains(valid, s)) { getDomNodeOrDie().setAttribute("valign", s); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElement.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElement.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -21,6 +21,7 @@ import java.io.IOException; import java.net.MalformedURLException; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import net.sourceforge.htmlunit.corejs.javascript.Context; @@ -185,7 +186,7 @@ return align; } - final String normalizedValue = NORMALIZED_ALIGN_VALUES.get(align.toLowerCase()); + final String normalizedValue = NORMALIZED_ALIGN_VALUES.get(align.toLowerCase(Locale.ENGLISH)); if (null != normalizedValue) { return normalizedValue; } @@ -204,7 +205,7 @@ return; } - final String normalizedValue = NORMALIZED_ALIGN_VALUES.get(align.toLowerCase()); + final String normalizedValue = NORMALIZED_ALIGN_VALUES.get(align.toLowerCase(Locale.ENGLISH)); if (null != normalizedValue) { getDomNodeOrDie().setAttribute("align", normalizedValue); return; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java 2013-06-14 17:39:48 UTC (rev 8343) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java 2013-06-14 20:24:02 UTC (rev 8344) @@ -20,6 +20,7 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; import java.io.IOException; +import java.util.Locale; import org.apache.commons.lang3.math.NumberUtils; import org.xml.sax.helpers.AttributesImpl; @@ -240,11 +241,12 @@ */ @Override protected boolean isAttributeName(final String name) { - if ("maxlength".equals(name.toLowerCase())) { + final String nameLC = name.toLowerCase(Locale.EN... [truncated message content] |