blob: bbf70f9cfa57885dbec399b052683913ea059cf0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
(function(){
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var Client = rwt.client.Client;
var request;
var URL = "http://127.0.0.1/";
qx.Class.define( "org.eclipse.rwt.test.tests.RequestTest", {
extend : qx.core.Object,
members : {
testCreateNativeRequest : function() {
request.send();
assertEquals( 1, TestUtil.getXMLHttpRequests().length );
},
testCallOpen : function() {
request.send();
var open = findNativeCall( "open" );
assertEquals( "POST", open[ 0 ] );
assertTrue( open[ 1 ].indexOf( URL + "?nocache=" ) === 0 );
assertTrue( open[ 2 ] ); // async
},
testCallOpenSync : function() {
request.setAsynchronous( false );
request.send();
var open = findNativeCall( "open" );
assertFalse( open[ 2 ] );
},
testSetRequestHeader : function() {
request.send();
var contentType = "application/json; charset=UTF-8";
if( !Client.isWebkit() ) {
assertNotNull( findNativeCall( "setRequestHeader", [ "Referer", window.location.href ] ) );
}
assertNotNull( findNativeCall( "setRequestHeader", [ "Content-Type", contentType ] ) );
assertNotNull( findNativeCall( "setRequestHeader", [ "Pragma", "no-cache" ] ) );
assertNotNull( findNativeCall( "setRequestHeader", [ "Cache-Control", "no-cache" ] ) );
},
testCompleted : function() {
var log = createRequestLogger( request );
request.send();
recieve( getNative(), "" );
assertEquals( 2 , log.length );
assertEquals( "success" , log[ 0 ] );
assertEquals( 200 , log[ 1 ].status );
},
testSendData : function() {
request.setData( "foobar" );
request.send();
assertNotNull( findNativeCall( "send", [ "foobar" ] ) );
},
testRecieveData : function() {
request.send();
var log = createRequestLogger( request );
recieve( getNative(), "foobar" );
assertEquals( "foobar", log[ 1 ].responseText );
},
testDisposeWhileSending : function() {
request.send();
request.dispose();
assertNotNull( findNativeCall( "abort" ) );
},
testDisposeAfterComplete : function() {
request.send();
recieve( getNative(), "" );
assertTrue( TestUtil.hasNoObjects( request, true ) );
assertTrue( getNative().onreadystatechange == null );
},
testRequestError : function() {
request.send();
var log = createRequestLogger( request );
getNative().status = 404;
getNative().readyState = 4;
getNative().responseText = "foobar";
getNative().onreadystatechange();
assertEquals( "error", log[ 0 ] );
assertEquals( "foobar", log[ 1 ].responseText );
assertEquals( 404, log[ 1 ].status );
},
testResponseHeader : function() {
var log = createRequestLogger( request );
request.send();
recieve( getNative(), "", "mykey: myvalue" );
assertEquals( { "mykey" : "myvalue" } , log[ 1 ].responseHeaders );
},
testGetter : function() {
request.setAsynchronous( false );
request.setData( "foo" );
assertFalse( request.getAsynchronous() );
assertEquals( "foo", request.getData() );
},
setUp : function() {
org.eclipse.rwt.test.fixture.NativeRequestMock.useFakeServer = false;
org.eclipse.rwt.test.fixture.TestUtil.clearXMLHttpRequests();
request = new rwt.remote.Request( URL, "POST", "application/json" );
},
tearDown : function() {
org.eclipse.rwt.test.fixture.NativeRequestMock.useFakeServer = true;
request.dispose();
request = null;
}
}
} );
var getNative = function() {
return TestUtil.getXMLHttpRequests()[ 0 ];
};
var findNativeCall = function( method, targetArgs ) {
var log = getNative().getLog();
var result = null;
for( var i = 0; i < log.length && result == null; i++ ) {
if( log[ i ][ 0 ] === method ) {
var args = log[ i ][ 1 ];
if( targetArgs == null ) {
result = args;
} else if( targetArgs.length === args.length ){
var match = true;
for( var j = 0; j < args.length; j++ ) {
if( args[ j ] !== targetArgs[ j ] ) {
match = false;
}
}
if( match ) {
result = args;
}
}
}
}
return result;
};
var createRequestLogger = function( request ) {
var log = [];
request.setSuccessHandler( function() {
this.push( "success", arguments[ 0 ] );
}, log );
request.setErrorHandler( function() {
this.push( "error", arguments[ 0 ] );
}, log );
return log;
};
var recieve = function( nativeRequest, data, headers ) {
nativeRequest.readyState = 2;
nativeRequest.onreadystatechange();
nativeRequest.readyState = 3;
nativeRequest.onreadystatechange();
nativeRequest.status = 200;
nativeRequest.readyState = 4;
nativeRequest.responseText = data;
if( headers ) {
nativeRequest.getAllResponseHeaders = function() {
return headers;
};
}
nativeRequest.onreadystatechange();
};
}());