Files
phantomjs/test/webserver-spec.js
Zack Weinberg 7102e87bf4 Eliminate console spam during normal test execution.
Three tests were (potentially) dumping text to console.log during the
run, which they should never do.

Fixing that revealed that one of them, the test for interrupting a
long-running JS script, was not actually testing what it was supposed
to test. Fixing *that* revealed that the long-running-script hook is
broken and does not actually interrupt JS infinite loops; that test
has been temporarily disabled.

 #12230 (Test suite improvements).
2014-08-19 20:24:27 -07:00

193 lines
7.0 KiB
JavaScript

describe("WebServer constructor", function() {
it("should not exist in window", function() {
expect(window.hasOwnProperty('WebServer')).toBeFalsy();
});
it("should be a function", function() {
var WebServer = require('webserver').create;
expect(typeof WebServer).toEqual('function');
});
});
var expectedPostData = false, expectedBinaryData = false;
function checkRequest(request, response) {
expect(typeof request).toEqual('object');
expect(request.hasOwnProperty('url')).toBeTruthy();
expect(request.hasOwnProperty('method')).toBeTruthy();
expect(request.hasOwnProperty('httpVersion')).toBeTruthy();
expect(request.hasOwnProperty('headers')).toBeTruthy();
expect(typeof request.headers).toEqual('object');
expect(typeof response).toEqual('object');
expect(response.hasOwnProperty('statusCode')).toBeTruthy();
expect(response.hasOwnProperty('headers')).toBeTruthy();
expect(typeof response['setHeaders']).toEqual('function');
expect(typeof response['setHeader']).toEqual('function');
expect(typeof response['header']).toEqual('function');
expect(typeof response['write']).toEqual('function');
expect(typeof response['writeHead']).toEqual('function');
if (expectedPostData !== false) {
expect(request.method).toEqual("POST");
expect(request.hasOwnProperty('post')).toBeTruthy();
jasmine.log("request.post => " + JSON.stringify(request.post, null, 4));
jasmine.log("expectedPostData => " + JSON.stringify(expectedPostData, null, 4));
jasmine.log("request.headers => " + JSON.stringify(request.headers, null, 4));
if (request.headers["Content-Type"] && request.headers["Content-Type"] === "application/x-www-form-urlencoded") {
expect(typeof request.post).toEqual('object');
expect(request.post).toEqual(expectedPostData);
expect(request.hasOwnProperty('postRaw')).toBeTruthy();
expect(typeof request.postRaw).toEqual('string');
} else {
expect(typeof request.post).toEqual('string');
expect(request.post).toNotEqual(expectedPostData);
expect(request.hasOwnProperty('postRaw')).toBeFalsy();
}
expectedPostData = false;
}
if (expectedBinaryData !== false) {
response.setEncoding('binary');
response.write(expectedBinaryData);
expectedBinaryData = false;
} else {
response.write("request handled");
}
response.close();
}
describe("WebServer object", function() {
var server = require('webserver').create();
it("should be creatable", function() {
expect(typeof server).toEqual('object');
expect(server).toNotEqual(null);
});
it("should have objectName as 'WebServer'", function() {
expect(server.objectName).toEqual('WebServer');
});
expectHasProperty(server, 'port');
it("should have port as string", function() {
expect(typeof server.port).toEqual('string');
});
it("should not listen to any port by default", function() {
expect(server.port).toEqual("");
});
/* TODO:
expectHasProperty(page, 'settings');
it("should have non-empty settings", function() {
expect(page.settings).toNotEqual(null);
expect(page.settings).toNotEqual({});
});
*/
expectHasFunction(server, 'listenOnPort');
expectHasFunction(server, 'newRequest');
expectHasFunction(server, 'close');
it("should fail to listen to blocked ports", function() {
//NOTE: is this really blocked everywhere?
expect(server.listen(1, function(){})).toEqual(false);
expect(server.port).toEqual("");
});
it("should be able to listen to some port", function() {
//NOTE: this can fail if the port is already being listend on...
expect(server.listen("1337", checkRequest)).toEqual(true);
expect(server.port).toEqual("1337");
});
it("should handle requests", function() {
var page = require('webpage').create();
var url = "http://localhost:1337/foo/bar.php?asdf=true";
var handled = false;
runs(function() {
expect(handled).toEqual(false);
page.open(url, function (status) {
expect(status == 'success').toEqual(true);
expect(page.plainText).toEqual("request handled");
handled = true;
});
});
waits(50);
runs(function() {
expect(handled).toEqual(true);
});
});
it("should handle post requests ('Content-Type' = 'application/x-www-form-urlencoded')", function() {
var page = require('webpage').create();
var url = "http://localhost:1337/foo/bar.txt?asdf=true";
//note: sorted by key (map)
expectedPostData = {'answer' : "42", 'universe' : "expanding"};
var handled = false;
runs(function() {
expect(handled).toEqual(false);
page.open(url, 'post', "universe=expanding&answer=42", { "Content-Type" : "application/x-www-form-urlencoded" }, function (status) {
expect(status == 'success').toEqual(true);
expect(page.plainText).toEqual("request handled");
handled = true;
});
});
waits(50);
runs(function() {
expect(handled).toEqual(true);
});
});
it("should handle post requests ('Content-Type' = 'ANY')", function() {
var page = require('webpage').create();
var url = "http://localhost:1337/foo/bar.txt?asdf=true";
//note: sorted by key (map)
expectedPostData = {'answer' : "42", 'universe' : "expanding"};
var handled = false;
runs(function() {
expect(handled).toEqual(false);
page.open(url, 'post', "universe=expanding&answer=42", { "Content-Type" : "application/json;charset=UTF-8" }, function (status) {
expect(status == 'success').toEqual(true);
expect(page.plainText).toEqual("request handled");
handled = true;
});
});
waits(50);
runs(function() {
expect(handled).toEqual(true);
});
});
xit("should handle binary data", function() {
var page = require('webpage').create();
var url = "http://localhost:1337/";
var fs = require('fs');
expectedBinaryData = fs.read('phantomjs.png', 'b');
var handled = false;
runs(function() {
expect(handled).toEqual(false);
page.open(url, 'get', function(status) {
expect(status == 'success').toEqual(true);
function checkImg() {
var img = document.querySelector('img');
return (img) && (img.width == 200) && (img.height == 200);
}
expect(page.evaluate(checkImg)).toEqual(true);
handled = true;
});
});
waits(50);
runs(function() {
expect(handled).toEqual(true);
});
});
});