From: <rb...@us...> - 2016-09-05 15:52:27
|
Revision: 12960 http://sourceforge.net/p/htmlunit/code/12960 Author: rbri Date: 2016-09-05 15:52:24 +0000 (Mon, 05 Sep 2016) Log Message: ----------- more NaN handling Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclarationTest.java 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 2016-09-04 15:23:12 UTC (rev 12959) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java 2016-09-05 15:52:24 UTC (rev 12960) @@ -1865,11 +1865,11 @@ final String trimedOpacity = opacity.trim(); try { - final float value = Float.parseFloat(trimedOpacity); + final double value = Double.parseDouble(trimedOpacity); if (value % 1 == 0) { return Integer.toString((int) value); } - return Float.toString(value); + return Double.toString(value); } catch (final NumberFormatException e) { // ignore wrong value @@ -1882,19 +1882,37 @@ * @param opacity the new attribute */ @JsxSetter - public void setOpacity(final String opacity) { - if (opacity.isEmpty()) { - setStyleAttribute(OPACITY.getAttributeName(), opacity); + public void setOpacity(final Object opacity) { + if (ScriptRuntime.NaNobj == opacity) { + return; } - final String trimedOpacity = opacity.trim(); - try { - Float.parseFloat(trimedOpacity); - setStyleAttribute(OPACITY.getAttributeName(), trimedOpacity); + final double doubleValue; + if (opacity instanceof Number) { + doubleValue = ((Number) opacity).doubleValue(); } - catch (final NumberFormatException e) { - // ignore wrong value + else { + String valueString = Context.toString(opacity); + + if (valueString.isEmpty()) { + setStyleAttribute(OPACITY.getAttributeName(), valueString); + return; + } + + valueString = valueString.trim(); + try { + doubleValue = Double.parseDouble(valueString); + } + catch (final NumberFormatException e) { + // ignore wrong value + return; + } } + + if (Double.isNaN(doubleValue) || Double.isInfinite(doubleValue)) { + return; + } + setStyleAttribute(OPACITY.getAttributeName(), Double.toString(doubleValue)); } /** @@ -3008,7 +3026,7 @@ token = token.substring(0, token.length() - 2); } try { - Float.parseFloat(token); + Double.parseDouble(token); return true; } catch (final NumberFormatException e) { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclarationTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclarationTest.java 2016-09-04 15:23:12 UTC (rev 12959) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclarationTest.java 2016-09-05 15:52:24 UTC (rev 12960) @@ -410,7 +410,7 @@ * @throws Exception if an error occurs */ @Test - @Alerts(" 0.5 0.4 0.33333 -3 3 8 7 7 7 7 ") + @Alerts(" 0.5 0.4 0.33333 -3 3 8 7 7 7 7 7 ") public void setOpacity() throws Exception { final String html = "<html><body>\n" + "<div id='d'>d</div>\n" @@ -432,6 +432,8 @@ + "s += d.style.opacity + ' ';\n" + "d.style.opacity = ' 7 ';\n" + "s += d.style.opacity + ' ';\n" + + "d.style.opacity = NaN;\n" + + "s += d.style.opacity + ' ';\n" + "d.style.opacity = '10px';\n" + "s += d.style.opacity + ' ';\n" + "d.style.opacity = 'foo';\n" |