define([
'../util',
'intern/dojo/node!querystring'
], function (util, qs) {
function xml() {
return {
status: 200,
headers: {
'Content-Type': 'text/xml'
},
body: [
'\n',
'\n',
'\n',
'FOO\n',
'BAR\n',
'BAZ\n',
'BAT\n',
'\n',
'bar){ /* whatever */ }\n',
'}\n',
'}\n',
']]>\n',
'something else\n',
''
]
};
}
function html(data) {
return {
status: 200,
headers: {
'Content-Type': 'text/html'
},
body: [
'',
'
',
'',
data,
'',
''
]
};
}
function textarea(data) {
return '';
}
return function (request) {
var promise = new util.Promise(function (resolve) {
function respond(data) {
if (request.query.type === 'html') {
data = 'SUCCESSFUL HTML response
';
}
else {
if (request.query.type === 'json') {
data = JSON.stringify({
method: request.method,
query: request.query,
payload: data
});
}
else if (request.query.type === 'javascript') {
data = 'window.iframeTestingFunction = function(){ return 42; };';
}
else if (request.query.text) {
data = request.query.text;
}
else {
data = 'iframe succeeded';
}
data = textarea(data);
}
resolve(html(data));
}
if (request.query.type === 'xml') {
resolve(xml());
return;
}
if (request.data) {
request.data.then(respond);
return;
}
if (request.method !== 'GET') {
request.body.join().then(function (data) {
data = qs.parse(data);
respond(data);
});
return;
}
respond();
});
var milliseconds = request.query.delay;
if (milliseconds) {
milliseconds = parseInt(milliseconds, 10);
promise = util.delay(promise, milliseconds);
}
return promise;
};
});