Commit d776dc9d authored by John Resig's avatar John Resig

Got some XHR tests to run, still some hanging threads (need to investigate)....

Got some XHR tests to run, still some hanging threads (need to investigate). Started moving some Ajax tests away from using PHP (more portable this way). Fixed a number of XHR env bugs.
parent de71a046
...@@ -17,17 +17,21 @@ var window = this; ...@@ -17,17 +17,21 @@ var window = this;
} }
}; };
var curLocation = (new java.io.File("./")).toURL();
window.__defineSetter__("location", function(url){ window.__defineSetter__("location", function(url){
curLocation = new java.net.URL( curLocation, url );
window.document = new DOMDocument( window.document = new DOMDocument(
new Packages.org.xml.sax.InputSource( new Packages.org.xml.sax.InputSource(
new java.io.InputStreamReader( new java.io.InputStreamReader(
new java.io.FileInputStream(url)))); new java.io.FileInputStream( url ))));
}); });
window.__defineGetter__("location", function(url){ window.__defineGetter__("location", function(url){
return { return {
get protocol(){ get protocol(){
return "file:"; return curLocation.getProtocol() + ":";
} }
}; };
}); });
...@@ -490,28 +494,30 @@ var window = this; ...@@ -490,28 +494,30 @@ var window = this;
}, },
getResponseHeader: function(header){ }, getResponseHeader: function(header){ },
send: function(data){ send: function(data){
var self = this;
function makeRequest(){ function makeRequest(){
var url = new java.net.URL(this.url), var url = new java.net.URL(curLocation, self.url),
connection = url.openConnection(); connection = url.openConnection();
// Add headers to Java connection // Add headers to Java connection
for (var header in this.headers) for (var header in self.headers)
connection.addRequestProperty(header, this.headers[header]); connection.addRequestProperty(header, self.headers[header]);
connection.connect(); connection.connect();
// Stick the response headers into responseHeaders // Stick the response headers into responseHeaders
for (i=0; ; i++) { for (var i=0; ; i++) {
var headerName = connection.getHeaderFieldKey(i); var headerName = connection.getHeaderFieldKey(i);
var headerValue = connection.getHeaderField(i); var headerValue = connection.getHeaderField(i);
if (!headerName && !headerValue) break; if (!headerName && !headerValue) break;
if (headerName) if (headerName)
this.responseHeaders[headerName] = headerValue; self.responseHeaders[headerName] = headerValue;
} }
this.readyState = 4; self.readyState = 4;
this.status = parseInt(connection.responseCode); self.status = parseInt(connection.responseCode);
this.statusText = connection.responseMessage; self.statusText = connection.responseMessage;
var stream = new java.io.InputStreamReader( var stream = new java.io.InputStreamReader(
connection.getInputStream()), connection.getInputStream()),
...@@ -519,15 +525,20 @@ var window = this; ...@@ -519,15 +525,20 @@ var window = this;
line; line;
while ((line = buffer.readLine()) != null) while ((line = buffer.readLine()) != null)
this.responseText += line; self.responseText += line;
self.responseXML = null;
try { if ( self.responseText.match(/^\s*</) ) {
this.responseXML = new DOMDocument(this.responseText); try {
} catch(e) { self.responseXML = new DOMDocument(
this.responseXML = null; new java.io.ByteArrayInputStream(
(new java.lang.String(
self.responseText)).getBytes("UTF8")));
} catch(e) {}
} }
this.onreadystatechange(); self.onreadystatechange();
} }
if (this.async) if (this.async)
......
...@@ -11,6 +11,7 @@ load( ...@@ -11,6 +11,7 @@ load(
"src/selector/selectorTest.js", "src/selector/selectorTest.js",
"src/event/eventTest.js", "src/event/eventTest.js",
"src/fx/fxTest.js" "src/fx/fxTest.js"
//"src/ajax/ajaxTest.js"
); );
// Display the results // Display the results
......
...@@ -181,4 +181,17 @@ function triggerEvent( elem, type, event ) { ...@@ -181,4 +181,17 @@ function triggerEvent( elem, type, event ) {
elem.fireEvent("on"+type); elem.fireEvent("on"+type);
} }
*/ */
}
/**
* Add random number to url to stop IE from caching
*
* @example url("data/test.html")
* @result "data/test.html?10538358428943"
*
* @example url("data/test.php?foo=bar")
* @result "data/test.php?foo=bar&10538358345554"
*/
function url(value) {
return value + (/\?/.test(value) ? "&" : "?") + new Date().getTime() + "" + parseInt(Math.random()*100000);
} }
\ No newline at end of file
{ "data": {"lang": "en", "length": 25} }
ERROR <script type="text/javascript">ok( true, "name.html retrieved" );</script>
module("ajax"); module("ajax");
if ( location.protocol != "file:" ) {
test("serialize()", function() { test("serialize()", function() {
expect(1); expect(1);
var data = $(':input').not('button').serialize(); var data = $(':input').not('button').serialize();
...@@ -24,6 +22,31 @@ test("param", function() { ...@@ -24,6 +22,31 @@ test("param", function() {
ok( $.param(params) == "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All%20your%20base%20are%20belong%20to%20us", "even more arrays" ); ok( $.param(params) == "foo%5Bbar%5D=baz&foo%5Bbeep%5D=42&foo%5Bquux%5D=All%20your%20base%20are%20belong%20to%20us", "even more arrays" );
}); });
test("evalScripts() with no script elements", function() {
expect(2);
var data = "this is just some bogus text";
$('#foo').html(data);
ok ( true, 'before evalScripts()');
try {
$('#foo').evalScripts();
} catch(e) {
ok (false, 'exception evaluating scripts: ' + e.message);
}
ok ( true, 'after evalScripts()');
});
test("synchronous request", function() {
ok( /^{ "data"/.test( $.ajax({url: url("data/json_obj.js"), async: false}).responseText ), "check returned text" );
});
test("synchronous request with callbacks", function() {
expect(2);
var result;
$.ajax({url: url("data/json_obj.js"), async: false, success: function(data) { ok(true, "sucess callback executed"); result = data; } });
ok( /^{ "data"/.test( result ), "check returned text" );
});
test("pass-through request object", function() { test("pass-through request object", function() {
expect(7); expect(7);
stop(true); stop(true);
...@@ -32,30 +55,19 @@ test("pass-through request object", function() { ...@@ -32,30 +55,19 @@ test("pass-through request object", function() {
if(count++ == 6) if(count++ == 6)
start(); start();
} }
var target = "data/name.php"; var target = "data/name.html";
ok( $.get(url(target), success), "get" ); ok( $.get(url(target), success), "get" );
ok( $.getIfModified(url(target), success), "getIfModified" ); ok( $.getIfModified(url(target), success), "getIfModified" );
ok( $.post(url(target), success), "post" ); ok( $.post(url(target), success), "post" );
ok( $.getScript(url("data/test.js"), success), "script" ); ok( $.getScript(url("data/test.js"), success), "script" );
ok( $.getJSON(url("data/json.php"), success), "json" ); ok( $.getJSON(url("data/json_obj.js"), success), "json" );
ok( $.ajax({url: url(target), success: success}), "generic" ); ok( $.ajax({url: url(target), success: success}), "generic" );
}); });
test("synchronous request", function() {
ok( /^{ "data"/.test( $.ajax({url: url("data/json.php"), async: false}).responseText ), "check returned text" );
});
test("synchronous request with callbacks", function() {
expect(2);
var result;
$.ajax({url: url("data/json.php"), async: false, success: function(data) { ok(true, "sucess callback executed"); result = data; } });
ok( /^{ "data"/.test( result ), "check returned text" );
});
test("load(String, Object, Function) - simple: inject text into DOM", function() { test("load(String, Object, Function) - simple: inject text into DOM", function() {
expect(2); expect(2);
stop(); stop();
$('#first').load(url("data/name.php"), function() { $('#first').load(url("data/name.html"), function() {
ok( /^ERROR/.test($('#first').text()), 'Check if content was injected into the DOM' ); ok( /^ERROR/.test($('#first').text()), 'Check if content was injected into the DOM' );
start(); start();
}); });
...@@ -64,9 +76,11 @@ test("load(String, Object, Function) - simple: inject text into DOM", function() ...@@ -64,9 +76,11 @@ test("load(String, Object, Function) - simple: inject text into DOM", function()
test("load(String, Object, Function) - inject without callback", function() { test("load(String, Object, Function) - inject without callback", function() {
expect(1); expect(1);
stop(true); // check if load can be called with only url stop(true); // check if load can be called with only url
$('#first').load("data/name.php"); $('#first').load("data/name.html");
}); });
if ( location.protocol != "file:" ) {
test("load(String, Object, Function) - check scripts", function() { test("load(String, Object, Function) - check scripts", function() {
expect(7); expect(7);
stop(); stop();
...@@ -365,20 +379,6 @@ test("ajaxSetup()", function() { ...@@ -365,20 +379,6 @@ test("ajaxSetup()", function() {
$.ajax(); $.ajax();
}); });
test("evalScripts() with no script elements", function() {
expect(2);
var data = "this is just some bogus text";
$('#foo').html(data);
ok ( true, 'before evalScripts()');
try {
$('#foo').evalScripts();
} catch(e) {
ok (false, 'exception evaluating scripts: ' + e.message);
}
ok ( true, 'after evalScripts()');
});
test("custom timeout does not set error message when timeout occurs, see #970", function() { test("custom timeout does not set error message when timeout occurs, see #970", function() {
stop(); stop();
$.ajax({ $.ajax({
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment