X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=build%2Fruntest%2Fenv.js;h=febc08a693aa684282c6c94a06a82c170daa119f;hb=0bb035a1abc37fbf033a18ac53dd62ec85599a49;hp=de422f7e59fd4532ecfacd3bd9d09c7b10804998;hpb=c4eddea7c3adfddc79a6b43de69f0b31cff980d0;p=jquery.git diff --git a/build/runtest/env.js b/build/runtest/env.js index de422f7..febc08a 100644 --- a/build/runtest/env.js +++ b/build/runtest/env.js @@ -17,17 +17,32 @@ var window = this; } }; + var curLocation = (new java.io.File("./")).toURL(); + window.__defineSetter__("location", function(url){ - window.document = new DOMDocument( - new Packages.org.xml.sax.InputSource( - new java.io.InputStreamReader( - new java.io.FileInputStream(url)))); + var xhr = new XMLHttpRequest(); + xhr.open("GET", url); + xhr.onreadystatechange = function(){ + curLocation = new java.net.URL( curLocation, url ); + window.document = xhr.responseXML; + + var event = document.createEvent(); + event.initEvent("load"); + window.dispatchEvent( event ); + }; + xhr.send(); }); window.__defineGetter__("location", function(url){ return { get protocol(){ - return "file:"; + return curLocation.getProtocol() + ":"; + }, + get href(){ + return curLocation.toString(); + }, + toString: function(){ + return this.href; } }; }); @@ -69,9 +84,51 @@ var window = this; }; // Window Events + + var events = [{}]; - window.addEventListener = function(){}; - window.removeEventListener = function(){}; + window.addEventListener = function(type, fn){ + if ( !this.uuid || this == window ) { + this.uuid = events.length; + events[this.uuid] = {}; + } + + if ( !events[this.uuid][type] ) + events[this.uuid][type] = []; + + if ( events[this.uuid][type].indexOf( fn ) < 0 ) + events[this.uuid][type].push( fn ); + }; + + window.removeEventListener = function(type, fn){ + if ( !this.uuid || this == window ) { + this.uuid = events.length; + events[this.uuid] = {}; + } + + if ( !events[this.uuid][type] ) + events[this.uuid][type] = []; + + events[this.uuid][type] = + events[this.uuid][type].filter(function(f){ + return f != fn; + }); + }; + + window.dispatchEvent = function(event){ + if ( event.type ) { + if ( this.uuid && events[this.uuid][event.type] ) { + var self = this; + + events[this.uuid][event.type].forEach(function(fn){ + fn.call( self, event ); + }); + } + + if ( this["on" + event.type] ) + this["on" + event.type].call( self, event ); + } + }; // DOM Document @@ -117,8 +174,9 @@ var window = this; get ownerDocument(){ return null; }, - addEventListener: function(){}, - removeEventListener: function(){}, + addEventListener: window.addEventListener, + removeEventListener: window.removeEventListener, + dispatchEvent: window.dispatchEvent, get nodeName() { return "#document"; }, @@ -148,6 +206,15 @@ var window = this; }; } }; + }, + + createEvent: function(){ + return { + type: "", + initEvent: function(type){ + this.type = type; + } + }; } }; @@ -407,12 +474,31 @@ var window = this; }, getElementsByTagName: DOMDocument.prototype.getElementsByTagName, - addEventListener: function(){}, - removeEventListener: function(){}, - click: function(){}, - submit: function(){}, - focus: function(){}, - blur: function(){}, + + addEventListener: window.addEventListener, + removeEventListener: window.removeEventListener, + dispatchEvent: window.dispatchEvent, + + click: function(){ + var event = document.createEvent(); + event.initEvent("click"); + this.dispatchEvent(event); + }, + submit: function(){ + var event = document.createEvent(); + event.initEvent("submit"); + this.dispatchEvent(event); + }, + focus: function(){ + var event = document.createEvent(); + event.initEvent("focus"); + this.dispatchEvent(event); + }, + blur: function(){ + var event = document.createEvent(); + event.initEvent("blur"); + this.dispatchEvent(event); + }, get elements(){ return this.getElementsByTagName("*"); }, @@ -469,82 +555,110 @@ var window = this; } // XMLHttpRequest + // Originally implemented by Yehuda Katz window.XMLHttpRequest = function(){ - this.headers = {}; - this.responseHeaders = {}; + this.headers = {}; + this.responseHeaders = {}; }; XMLHttpRequest.prototype = { open: function(method, url, async, user, password){ - this.readyState = 1; - if(async) this.async = true; - this.method = method || "GET"; - this.url = url; - this.onreadystatechange(); + this.readyState = 1; + if (async) + this.async = true; + this.method = method || "GET"; + this.url = url; + this.onreadystatechange(); }, setRequestHeader: function(header, value){ - this.headers[header] = value; + this.headers[header] = value; }, getResponseHeader: function(header){ }, send: function(data){ - var makeRequest = function() { - var url = new java.net.URL(this.url); - var connection = url.openConnection(); - // Add headers to Java connection - for(header in this.headers) connection.addRequestProperty(header, this.headers[header]); - connection.connect(); - // Stick the response headers into responseHeaders - for(i=0;;i++) { - headerName = connection.getHeaderFieldKey(i); - headerValue = connection.getHeaderField(i); - if(!headerName && !headerValue) break; - if(headerName) this.responseHeaders[headerName] = headerValue; - } - this.readyState = 4; - this.status = parseInt(connection.responseCode); - this.statusText = connection.responseMessage; - var stream = new java.io.InputStreamReader(connection.getInputStream()); - var buffer = new java.io.BufferedReader(stream); - var line; - while((line = buffer.readLine()) != null) this.responseText += line; - try { - this.responseXML = new DOMDocument(this.responseText); - } catch(e) { - this.responseXML = null; - } - this.onreadystatechange(); - }; - if(this.async) { - var requestThread = (new java.lang.Thread(new java.lang.Runnable({ - run: makeRequest - }))); - requestThread.start(); - } - else makeRequest(); - }, - abort: function(){ }, - onreadystatechange: function(){ }, - getResponseHeader: function(header) { - if(this.readyState < 3) throw new Error("INVALID_STATE_ERR"); - else { - var returnedHeaders = []; - for(rHeader in this.responseHeaders) { - if(rHeader.match(new Regexp(header, "i"))) returnedHeaders.push(this.responseHeaders[rHeader]); - } - if(returnedHeaders != []) return returnedHeaders.join(", "); - } - return null; - }, - getAllResponseHeaders: function(header) { - if(this.readyState < 3) throw new Error("INVALID_STATE_ERR"); - else { - returnedHeaders = []; - for(var header in this.responseHeaders) { - returnedHeaders += (header + ": " + this.responseHeaders[header]); - } - return returnedHeaders.join("\r\n"); - } + var self = this; + + function makeRequest(){ + var url = new java.net.URL(curLocation, self.url), + connection = url.openConnection(); + + // Add headers to Java connection + for (var header in self.headers) + connection.addRequestProperty(header, self.headers[header]); + + connection.connect(); + + // Stick the response headers into responseHeaders + for (var i=0; ; i++) { + var headerName = connection.getHeaderFieldKey(i); + var headerValue = connection.getHeaderField(i); + if (!headerName && !headerValue) break; + if (headerName) + self.responseHeaders[headerName] = headerValue; + } + + self.readyState = 4; + self.status = parseInt(connection.responseCode); + self.statusText = connection.responseMessage; + + var stream = new java.io.InputStreamReader( + connection.getInputStream()), + buffer = new java.io.BufferedReader(stream), + line; + + while ((line = buffer.readLine()) != null) + self.responseText += line; + + self.responseXML = null; + + if ( self.responseText.match(/^\s*