Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Got some XHR tests to run, still some hanging threads (need to invest…
…igate). Started moving some Ajax tests away from using PHP (more portable this way). Fixed a number of XHR env bugs.
  • Loading branch information
jeresig committed Jul 9, 2007
1 parent de71a04 commit d776dc9
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 47 deletions.
43 changes: 27 additions & 16 deletions build/runtest/env.js
Expand Up @@ -17,17 +17,21 @@ var window = this;
}
};

var curLocation = (new java.io.File("./")).toURL();

window.__defineSetter__("location", function(url){
curLocation = new java.net.URL( curLocation, url );

window.document = new DOMDocument(
new Packages.org.xml.sax.InputSource(
new java.io.InputStreamReader(
new java.io.FileInputStream(url))));
new java.io.FileInputStream( url ))));
});

window.__defineGetter__("location", function(url){
return {
get protocol(){
return "file:";
return curLocation.getProtocol() + ":";
}
};
});
Expand Down Expand Up @@ -490,44 +494,51 @@ var window = this;
},
getResponseHeader: function(header){ },
send: function(data){
var self = this;

function makeRequest(){
var url = new java.net.URL(this.url),
var url = new java.net.URL(curLocation, self.url),
connection = url.openConnection();

// Add headers to Java connection
for (var header in this.headers)
connection.addRequestProperty(header, this.headers[header]);
for (var header in self.headers)
connection.addRequestProperty(header, self.headers[header]);

connection.connect();

// Stick the response headers into responseHeaders
for (i=0; ; i++) {
for (var i=0; ; i++) {
var headerName = connection.getHeaderFieldKey(i);
var headerValue = connection.getHeaderField(i);
if (!headerName && !headerValue) break;
if (headerName)
this.responseHeaders[headerName] = headerValue;
self.responseHeaders[headerName] = headerValue;
}

this.readyState = 4;
this.status = parseInt(connection.responseCode);
this.statusText = connection.responseMessage;
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)
this.responseText += line;
self.responseText += line;

self.responseXML = null;

try {
this.responseXML = new DOMDocument(this.responseText);
} catch(e) {
this.responseXML = null;
if ( self.responseText.match(/^\s*</) ) {
try {
self.responseXML = new DOMDocument(
new java.io.ByteArrayInputStream(
(new java.lang.String(
self.responseText)).getBytes("UTF8")));
} catch(e) {}
}

this.onreadystatechange();
self.onreadystatechange();
}

if (this.async)
Expand Down
1 change: 1 addition & 0 deletions build/runtest/test.js
Expand Up @@ -11,6 +11,7 @@ load(
"src/selector/selectorTest.js",
"src/event/eventTest.js",
"src/fx/fxTest.js"
//"src/ajax/ajaxTest.js"
);

// Display the results
Expand Down
13 changes: 13 additions & 0 deletions build/runtest/testrunner.js
Expand Up @@ -181,4 +181,17 @@ function triggerEvent( elem, type, event ) {
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);
}
1 change: 1 addition & 0 deletions build/test/data/json_obj.js
@@ -0,0 +1 @@
{ "data": {"lang": "en", "length": 25} }
1 change: 1 addition & 0 deletions build/test/data/name.html
@@ -0,0 +1 @@
ERROR <script type="text/javascript">ok( true, "name.html retrieved" );</script>
62 changes: 31 additions & 31 deletions src/ajax/ajaxTest.js
@@ -1,7 +1,5 @@
module("ajax");

if ( location.protocol != "file:" ) {

test("serialize()", function() {
expect(1);
var data = $(':input').not('button').serialize();
Expand All @@ -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" );
});

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() {
expect(7);
stop(true);
Expand All @@ -32,30 +55,19 @@ test("pass-through request object", function() {
if(count++ == 6)
start();
}
var target = "data/name.php";
var target = "data/name.html";
ok( $.get(url(target), success), "get" );
ok( $.getIfModified(url(target), success), "getIfModified" );
ok( $.post(url(target), success), "post" );
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" );
});

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() {
expect(2);
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' );
start();
});
Expand All @@ -64,9 +76,11 @@ test("load(String, Object, Function) - simple: inject text into DOM", function()
test("load(String, Object, Function) - inject without callback", function() {
expect(1);
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() {
expect(7);
stop();
Expand Down Expand Up @@ -365,20 +379,6 @@ test("ajaxSetup()", function() {
$.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() {
stop();
$.ajax({
Expand Down

0 comments on commit d776dc9

Please sign in to comment.