Revision: 761
          http://jwebunit.svn.sourceforge.net/jwebunit/?rev=761&view=rev
Author:   jevonwright
Date:     2008-11-04 11:21:23 +0000 (Tue, 04 Nov 2008)

Log Message:
-----------
IElement.setAttribute("value") on an HtmlInput or IElement.setTextContent() on 
an HtmlTextArea will now call any attached onChange Javascript

Modified Paths:
--------------
    
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/IElementTest.java
    
trunk/jwebunit-commons-tests/src/main/resources/testcases/IElementTest/template.html
    
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitElementImpl.java

Modified: 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/IElementTest.java
===================================================================
--- 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/IElementTest.java
 2008-10-30 03:57:26 UTC (rev 760)
+++ 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/IElementTest.java
 2008-11-04 11:21:23 UTC (rev 761)
@@ -137,9 +137,11 @@
        
        // get all input children
        List<IElement> inputs = element.getElements("input");
-       assertEquals(2, inputs.size()); // there should be two
+       assertEquals(4, inputs.size()); // there should be two
        assertEquals("test3", inputs.get(0).getAttribute("value"));
        assertEquals("Do nothing", inputs.get(1).getAttribute("value"));
+       assertEquals("initial", inputs.get(2).getAttribute("value"));
+       assertEquals("unchanged", inputs.get(3).getAttribute("value"));
        
        // get parent through xpath
        IElement parent = element.getElement("..");
@@ -148,4 +150,33 @@
        
     }
     
+    /**
+     * Test that setting attributes manually (e.g setAttribute("value") 
+     * properly calls any attached Javascript.
+     */
+    public void testAttributeJavascript() {
+       String testingText = new Date().toString();
+       
+       {
+               IElement js1 = getElementById("js1");
+               IElement js2 = getElementById("js2");
+               
+               assertEquals(js1.getAttribute("value"), "initial");
+               assertEquals(js2.getAttribute("value"), "unchanged");
+               
+               // change js1's value
+               js1.setAttribute("value", testingText);
+       }
+       
+       // refresh the elements and check they have changed
+       {
+               IElement js1 = getElementById("js1");
+               IElement js2 = getElementById("js2");
+               
+               assertEquals(js1.getAttribute("value"), testingText);
+               assertEquals(js2.getAttribute("value"), testingText);
+       }
+
+    }
+    
 }

Modified: 
trunk/jwebunit-commons-tests/src/main/resources/testcases/IElementTest/template.html
===================================================================
--- 
trunk/jwebunit-commons-tests/src/main/resources/testcases/IElementTest/template.html
        2008-10-30 03:57:26 UTC (rev 760)
+++ 
trunk/jwebunit-commons-tests/src/main/resources/testcases/IElementTest/template.html
        2008-11-04 11:21:23 UTC (rev 761)
@@ -27,5 +27,11 @@
        <li>four</li>
 </ol>
 
+<hr>
+
+<p>A small Javascript test.</p>
+<input id="js1" value="initial" 
onChange="document.getElementById('js2').value=this.value;" />
+<input id="js2" value="unchanged" />
+
 </body>
 </html>

Modified: 
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitElementImpl.java
===================================================================
--- 
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitElementImpl.java
     2008-10-30 03:57:26 UTC (rev 760)
+++ 
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitElementImpl.java
     2008-11-04 11:21:23 UTC (rev 761)
@@ -10,6 +10,8 @@
 
 import com.gargoylesoftware.htmlunit.html.DomNode;
 import com.gargoylesoftware.htmlunit.html.HtmlElement;
+import com.gargoylesoftware.htmlunit.html.HtmlInput;
+import com.gargoylesoftware.htmlunit.html.HtmlTextArea;
 
 /**
  * HtmlUnit implementation of IElement wrapper.
@@ -119,7 +121,7 @@
         * @see 
net.sourceforge.jwebunit.api.IElement#setAttribute(java.lang.String)
         */
        public void setAttribute(String string) {
-               element.setAttribute(string, "1");
+               element.setAttributeValue(string, "1");
        }
 
 
@@ -127,7 +129,12 @@
         * @see 
net.sourceforge.jwebunit.api.IElement#setAttribute(java.lang.String, 
java.lang.String)
         */
        public void setAttribute(String string, String value) {
-               element.setAttribute(string, value);
+               if ("value".equals(string) && element instanceof HtmlInput) {
+                       // for HtmlInputs, we want to run any onChange code if 
the value changes
+                       ((HtmlInput) element).setValueAttribute(value);
+               } else {
+                       element.setAttributeValue(string, value);
+               }
        }
 
 
@@ -135,7 +142,11 @@
         * @see 
net.sourceforge.jwebunit.api.IElement#setTextContent(java.lang.String)
         */
        public void setTextContent(String value) {
-               element.setTextContent(value);
+               if (element instanceof HtmlTextArea) {
+                       ((HtmlTextArea) element).setText(value);
+               } else {
+                       element.setTextContent(value);
+               }
        }
 
 }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
JWebUnit-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jwebunit-development

Reply via email to