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.

This commit is contained in:
John Resig 2007-07-09 03:08:20 +00:00
parent de71a046e6
commit d776dc9d5c
6 changed files with 74 additions and 47 deletions

View file

@ -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;
}, },
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;
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)

View file

@ -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

View file

@ -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);
} }

View file

@ -0,0 +1 @@
{ "data": {"lang": "en", "length": 25} }

View file

@ -0,0 +1 @@
ERROR <script type="text/javascript">ok( true, "name.html retrieved" );</script>

View file

@ -1,7 +1,5 @@
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() {
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() {
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()
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() {
$.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({