Added basic support for IFrames, disabled a test which we don't take into account.
[jquery.git] / build / runtest / env.js
index fae6490..e152842 100644 (file)
@@ -1,3 +1,9 @@
+/*
+ * Simulated browser environment for Rhino
+ *   By John Resig <http://ejohn.org/>
+ * Copyright 2007 John Resig, under the MIT License
+ */
+
 // The window Object
 var window = this;
 
@@ -73,6 +79,9 @@ 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 = {
@@ -99,11 +108,6 @@ var window = this;
                get body(){
                        return this.getElementsByTagName("body")[0];
                },
-               defaultView: {
-                       getComputedStyle: {
-                               getPropertyValue: function(){ }
-                       }
-               },
                get documentElement(){
                        return makeNode( this._dom.getDocumentElement() );
                },
@@ -125,17 +129,29 @@ var window = this;
                
                get defaultView(){
                        return {
-                               getComputedStyle: function(){
+                               getComputedStyle: function(elem){
                                        return {
-                                               getPropertyValue: function(){
-                                                       return "";
+                                               getPropertyValue: function(prop){
+                                                       prop = prop.replace(/\-(\w)/g,function(m,c){
+                                                               return c.toUpperCase();
+                                                       });
+                                                       var val = elem.style[prop];
+                                                       
+                                                       if ( prop == "opacity" && val == "" )
+                                                               val = "1";
+                                                               
+                                                       return val;
                                                }
-                                       }
+                                       };
                                }
                        };
                }
        };
        
+       function getDocument(node){
+               return obj_nodes.get(node);
+       }
+       
        // DOM NodeList
        
        window.DOMNodeList = function(list){
@@ -179,10 +195,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() );
@@ -387,6 +403,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;
                }
        });