Added a className tweak. All core and selector tests now pass.
[jquery.git] / build / runtest / env.js
index 564b022..bf53efa 100644 (file)
@@ -79,17 +79,22 @@ var window = this;
                this._dom = Packages.javax.xml.parsers.
                        DocumentBuilderFactory.newInstance()
                                .newDocumentBuilder().parse(file);
+               
+               if ( !obj_nodes.containsKey( this._dom ) )
+                       obj_nodes.put( this._dom, this );
        };
        
        DOMDocument.prototype = {
                createTextNode: function(text){
-                       return makeNode( this._dom.createTextNode(text) );
+                       return makeNode( this._dom.createTextNode(
+                               text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")) );
                },
                createElement: function(name){
-                       return makeNode( this._dom.createElement(name) );
+                       return makeNode( this._dom.createElement(name.toLowerCase()) );
                },
                getElementsByTagName: function(name){
-                       return new DOMNodeList( this._dom.getElementsByTagName(name) );
+                       return new DOMNodeList( this._dom.getElementsByTagName(
+                               name.toLowerCase()) );
                },
                getElementById: function(id){
                        var elems = this._dom.getElementsByTagName("*");
@@ -145,6 +150,10 @@ var window = this;
                }
        };
        
+       function getDocument(node){
+               return obj_nodes.get(node);
+       }
+       
        // DOM NodeList
        
        window.DOMNodeList = function(list){
@@ -188,10 +197,10 @@ var window = this;
                        return makeNode( this._dom.cloneNode(deep) );
                },
                get ownerDocument(){
-                       return document;
+                       return getDocument( this._dom.ownerDocument );
                },
                get documentElement(){
-                       return document.documentElement;
+                       return makeNode( this._dom.documentElement );
                },
                get parentNode() {
                        return makeNode( this._dom.getParentNode() );
@@ -214,7 +223,10 @@ var window = this;
 
        window.DOMElement = function(elem){
                this._dom = elem;
-               this.style = {};
+               this.style = {
+                       get opacity(){ return this._opacity; },
+                       set opacity(val){ this._opacity = val + ""; }
+               };
                
                // Load CSS info
                var styles = (this.getAttribute("style") || "").split(/\s*;\s*/);
@@ -264,6 +276,10 @@ var window = this;
                        return this.childNodes.valueOf();       
                },
                set innerHTML(html){
+                       html = html.replace(/<\/?([A-Z]+)/g, function(m){
+                               return m.toLowerCase();
+                       });
+                       
                        var nodes = this.ownerDocument.importNode(
                                new DOMDocument( new java.io.ByteArrayInputStream(
                                        (new java.lang.String("<wrap>" + html + "</wrap>"))
@@ -292,8 +308,7 @@ var window = this;
                set textContent(text){
                        while (this.firstChild)
                                this.removeChild( this.firstChild );
-                       this.appendChild( document.createTextNode(text) );
-                       this.innerHTML = document.createTextNode(text).nodeValue;
+                       this.appendChild( this.ownerDocument.createTextNode(text));
                },
                
                style: {},
@@ -342,7 +357,10 @@ var window = this;
                set selected(val) { return this.setAttribute("selected",val); },
 
                get className() { return this.getAttribute("class") || ""; },
-               set className(val) { return this.setAttribute("class",val); },
+               set className(val) {
+                       return this.setAttribute("class",
+                               val.replace(/(^\s*|\s*$)/g,""));
+               },
                
                get type() { return this.getAttribute("type") || ""; },
                set type(val) { return this.setAttribute("type",val); },
@@ -396,6 +414,22 @@ var window = this;
                blur: function(){},
                get elements(){
                        return this.getElementsByTagName("*");
+               },
+               get contentWindow(){
+                       return this.nodeName == "IFRAME" ? {
+                               document: this.contentDocument
+                       } : null;
+               },
+               get contentDocument(){
+                       if ( this.nodeName == "IFRAME" ) {
+                               if ( !this._doc )
+                                       this._doc = new DOMDocument(
+                                               new java.io.ByteArrayInputStream((new java.lang.String(
+                                               "<html><head><title></title></head><body></body></html>"))
+                                               .getBytes("UTF8")));
+                               return this._doc;
+                       } else
+                               return null;
                }
        });