From: <rb...@us...> - 2017-12-22 15:44:27
|
Revision: 15034 http://sourceforge.net/p/htmlunit/code/15034 Author: rbri Date: 2017-12-22 15:44:24 +0000 (Fri, 22 Dec 2017) Log Message: ----------- more tests, ignore areas with invalid rect definitions Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElementTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java 2017-12-22 14:21:35 UTC (rev 15033) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlArea.java 2017-12-22 15:44:24 UTC (rev 15034) @@ -26,6 +26,8 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import com.gargoylesoftware.htmlunit.HttpHeader; import com.gargoylesoftware.htmlunit.SgmlPage; @@ -46,6 +48,7 @@ * @author Frank Danek */ public class HtmlArea extends HtmlElement { + private static final Log LOG = LogFactory.getLog(HtmlArea.class); /** The HTML tag represented by this element. */ public static final String TAG_NAME = "area"; @@ -265,21 +268,28 @@ final String[] coords = StringUtils.split(getCoordsAttribute(), ','); double leftX = 0; - if (coords.length > 0) { - leftX = Double.parseDouble(coords[0].trim()); - } double topY = 0; - if (coords.length > 1) { - topY = Double.parseDouble(coords[1].trim()); - } double rightX = 0; - if (coords.length > 2) { - rightX = Double.parseDouble(coords[2].trim()); - } double bottomY = 0; - if (coords.length > 3) { - bottomY = Double.parseDouble(coords[3].trim()); + + try { + if (coords.length > 0) { + leftX = Double.parseDouble(coords[0].trim()); + } + if (coords.length > 1) { + topY = Double.parseDouble(coords[1].trim()); + } + if (coords.length > 2) { + rightX = Double.parseDouble(coords[2].trim()); + } + if (coords.length > 3) { + bottomY = Double.parseDouble(coords[3].trim()); + } } + catch (final NumberFormatException e) { + LOG.warn("Invalid rect coords '" + coords + "'", e); + } + final Rectangle2D rectangle = new Rectangle2D.Double(leftX, topY, rightX - leftX, bottomY - topY); return rectangle; Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElementTest.java 2017-12-22 14:21:35 UTC (rev 15033) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElementTest.java 2017-12-22 15:44:24 UTC (rev 15034) @@ -137,4 +137,31 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({"myImage clicked", "myImageDisplayNone clicked"}) + public void click() throws Exception { + final String html = "<html><head>\n" + + "<script>\n" + + " function test() {\n" + + " document.getElementById('a1').click();\n" + + " document.getElementById('a2').click();\n" + + " }\n" + + "</script>\n" + + "</head>\n" + + "<body onload='test()'>\n" + + " <img usemap='#dot'" + + " src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA" + + "HElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='>\n" + + " <map name='dot'>\n" + + " <area id='a1' shape='rect' coords='0,0,1,1' onclick='alert(\"a1 clicked\");'/>\n" + + " <area id='a2' shape='rect' coords='0 0 2 2' onclick='alert(\"a2 clicked\");'/>\n" + + " <map>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElementTest.java 2017-12-22 14:21:35 UTC (rev 15033) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElementTest.java 2017-12-22 15:44:24 UTC (rev 15034) @@ -16,6 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF52; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.IE; import java.io.File; import java.io.FileInputStream; @@ -671,34 +672,52 @@ * @throws Exception if the test fails */ @Test - @Alerts({"myImage clicked", "myImageDisplayNone clicked"}) + @Alerts({"myImage clicked", "myImageNone clicked"}) public void click() throws Exception { - try (InputStream is = getClass().getClassLoader().getResourceAsStream("testfiles/tiny-jpg.img")) { - final byte[] directBytes = IOUtils.toByteArray(is); - final URL urlImage = new URL(URL_FIRST, "img.jpg"); - final List<NameValuePair> emptyList = Collections.emptyList(); - getMockWebConnection().setResponse(urlImage, directBytes, 200, "ok", "image/jpg", emptyList); - } - final String html = "<html><head>\n" + "<script>\n" + " function test() {\n" - + " var img = document.getElementById('myImage');\n" - + " img.click();\n" - + " img = document.getElementById('myImageDisplayNone');\n" - + " img.click();\n" + + " document.getElementById('myImage').click();\n" + + " document.getElementById('myImageNone').click();\n" + " }\n" + "</script>\n" + "</head><body onload='test()'>\n" - + " <img id='myImage' src='\" + URL_SECOND + \"img.jpg' onclick='alert(\"myImage clicked\");'>\n" - + " <img id='myImageDisplayNone' src='\" + URL_SECOND + \"img.jpg' style='display: none'" - + " onclick='alert(\"myImageDisplayNone clicked\");'>\n" + + " <img id='myImage' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA" + + "HElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='" + + " onclick='alert(\"myImage clicked\");'>\n" + + " <img id='myImageNone' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA" + + "HElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='" + + " style='display: none' onclick='alert(\"myImageNone clicked\");'>\n" + "</body></html>"; - final WebDriver driver = getWebDriver(); - if (driver instanceof HtmlUnitDriver) { - ((HtmlUnitDriver) driver).setDownloadImages(true); - } loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "myImageWithMap clicked", + IE = "a0 clicked") + @NotYetImplemented(IE) + public void clickWithMap() throws Exception { + final String html = "<html><head>\n" + + "<script>\n" + + " function test() {\n" + + " document.getElementById('myImageWithMap').click();\n" + + " }\n" + + "</script>\n" + + "</head><body onload='test()'>\n" + + " <img id='myImageWithMap' usemap='#dot'" + + " src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA" + + "HElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='" + + " onclick='alert(\"myImageWithMap clicked\");'>\n" + + " <map name='dot'>\n" + + " <area id='a0' shape='rect' coords='0 0 7 7' onclick='alert(\"a0 clicked\");'/>\n" + + " <area id='a1' shape='rect' coords='0,0,1,1' onclick='alert(\"a1 clicked\");'/>\n" + + " <map>\n" + + "</body></html>"; + + loadPageWithAlerts2(html, 70000000); + } } |