http-browserify.js 4.03 KB
Newer Older
qianyuheng committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
// These tests are taken from http-browserify to ensure compatibility with
// that module
var test = require('tape')
var url = require('url')

var location = 'http://localhost:8081/foo/123'

var noop = function() {}
global.location = url.parse(location)
global.XMLHttpRequest = function() {
	this.open = noop
	this.send = noop
	this.withCredentials = false
}

var moduleName = require.resolve('../../')
delete require.cache[moduleName]
var http = require('../../')

test('Make sure http object has correct properties', function (t) {
	t.ok(http.Agent, 'Agent defined')
	t.ok(http.ClientRequest, 'ClientRequest defined')
	t.ok(http.ClientRequest.prototype, 'ClientRequest.prototype defined')
	t.ok(http.IncomingMessage, 'IncomingMessage defined')
	t.ok(http.IncomingMessage.prototype, 'IncomingMessage.prototype defined')
	t.ok(http.METHODS, 'METHODS defined')
	t.ok(http.STATUS_CODES, 'STATUS_CODES defined')
	t.ok(http.get, 'get defined')
	t.ok(http.globalAgent, 'globalAgent defined')
	t.ok(http.request, 'request defined')
	t.end()
})

test('Test simple url string', function(t) {
	var testUrl = { path: '/api/foo' }
	var request = http.get(testUrl, noop)

	var resolved = url.resolve(location, request._opts.url)
	t.equal(resolved, 'http://localhost:8081/api/foo', 'Url should be correct')
	t.end()

})

test('Test full url object', function(t) {
	var testUrl = {
		host: "localhost:8081",
		hostname: "localhost",
		href: "http://localhost:8081/api/foo?bar=baz",
		method: "GET",
		path: "/api/foo?bar=baz",
		pathname: "/api/foo",
		port: "8081",
		protocol: "http:",
		query: "bar=baz",
		search: "?bar=baz",
		slashes: true
	}

	var request = http.get(testUrl, noop)

	var resolved = url.resolve(location, request._opts.url)
	t.equal(resolved, 'http://localhost:8081/api/foo?bar=baz', 'Url should be correct')
	t.end()
})

test('Test alt protocol', function(t) {
	var params = {
		protocol: "foo:",
		hostname: "localhost",
		port: "3000",
		path: "/bar"
	}

	var request = http.get(params, noop)

	var resolved = url.resolve(location, request._opts.url)
	t.equal(resolved, 'foo://localhost:3000/bar', 'Url should be correct')
	t.end()
})

test('Test page with \'file:\' protocol', function (t) {
	var params = {
		hostname: 'localhost',
		port: 3000,
		path: '/bar'
	}

	var fileLocation = 'file:///home/me/stuff/index.html'

	var normalLocation = global.location
	global.location = url.parse(fileLocation) // Temporarily change the location
	var request = http.get(params, noop)
	global.location = normalLocation // Reset the location

	var resolved = url.resolve(fileLocation, request._opts.url)
	t.equal(resolved, 'http://localhost:3000/bar', 'Url should be correct')
	t.end()
})

test('Test string as parameters', function(t) {
	var testUrl = '/api/foo'
	var request = http.get(testUrl, noop)

	var resolved = url.resolve(location, request._opts.url)
	t.equal(resolved, 'http://localhost:8081/api/foo', 'Url should be correct')
	t.end()
})

test('Test withCredentials param', function(t) {
	var url = '/api/foo'

	var request = http.get({ url: url, withCredentials: false }, noop)
	t.equal(request._xhr.withCredentials, false, 'xhr.withCredentials should be false')

	var request = http.get({ url: url, withCredentials: true }, noop)
	t.equal(request._xhr.withCredentials, true, 'xhr.withCredentials should be true')

	var request = http.get({ url: url }, noop)
	t.equal(request._xhr.withCredentials, false, 'xhr.withCredentials should be false')

	t.end()
})

test('Test ipv6 address', function(t) {
	var testUrl = 'http://[::1]:80/foo'
	var request = http.get(testUrl, noop)

	var resolved = url.resolve(location, request._opts.url)
	t.equal(resolved, 'http://[::1]:80/foo', 'Url should be correct')
	t.end()
})

test('Test relative path in url', function(t) {
	var params = { path: './bar' }
	var request = http.get(params, noop)

	var resolved = url.resolve(location, request._opts.url)
	t.equal(resolved, 'http://localhost:8081/foo/bar', 'Url should be correct')
	t.end()
})

test('Cleanup', function (t) {
	delete global.location
	delete global.XMLHttpRequest
	delete require.cache[moduleName]
	t.end()
})