Skip to content

test: modernize test suite and remove obsolete tests #93

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 6 additions & 11 deletions test/support/sws.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
var stream = require('stream')
var util = require('util')
const { Writable } = require('node:stream')

module.exports = SlowWriteStream

function SlowWriteStream () {
stream.Writable.call(this)
class SlowWriteStream extends Writable {
_write (chunk, encoding, callback) {
setTimeout(callback, 1000)
}
}

util.inherits(SlowWriteStream, stream.Writable)

SlowWriteStream.prototype._write = function _write (chunk, encoding, callback) {
setTimeout(callback, 1000)
}
module.exports = SlowWriteStream
143 changes: 59 additions & 84 deletions test/support/utils.js
Original file line number Diff line number Diff line change
@@ -1,68 +1,53 @@
var assert = require('assert')
var finalhandler = require('../..')
var http = require('http')
var http2 = require('http2')
const finalhandler = require('../..')
const SlowWriteStream = require('./sws')

var request = require('supertest')
var SlowWriteStream = require('./sws')
const assert = require('node:assert')
const http = require('node:http')
const http2 = require('node:http2')
const supertest = require('supertest')

exports.assert = assert
exports.createError = createError
exports.createHTTPServer = createHTTPServer
exports.createHTTP2Server = createHTTP2Server
exports.createSlowWriteStream = createSlowWriteStream
exports.rawrequest = rawrequest
exports.rawrequestHTTP2 = rawrequestHTTP2
exports.request = request
exports.getTestHelpers = getTestHelpers
exports.SlowWriteStream = SlowWriteStream
exports.shouldHaveStatusMessage = shouldHaveStatusMessage
exports.shouldNotHaveBody = shouldNotHaveBody
exports.shouldNotHaveHeader = shouldNotHaveHeader

function createError (message, props) {
var err = new Error(message)
const err = new Error(message)

if (props) {
for (var prop in props) {
for (const prop in props) {
err[prop] = props[prop]
}
}

return err
}

function createHTTPServer (err, opts) {
return http.createServer(function (req, res) {
var done = finalhandler(req, res, opts)
function getTestHelpers (type) {
const { createServer } = type === 'http2' ? http2 : http

if (typeof err === 'function') {
err(req, res, done)
return
}

done(err)
})
}

function createHTTP2Server (err, opts) {
return http2.createServer(function (req, res) {
var done = finalhandler(req, res, opts)

if (typeof err === 'function') {
err(req, res, done)
return
}
return {
createServer: (err, opts) =>
createServer((req, res) => {
const done = finalhandler(req, res, opts)

done(err)
})
}
if (typeof err === 'function') {
err(req, res, done)
return
}

function createSlowWriteStream () {
return new SlowWriteStream()
done(err)
}),
request: (server, options) => supertest(server, { ...options, http2: type === 'http2' }),
rawrequest: type === 'http2' ? rawrequestHTTP2 : rawrequest
}
}

function rawrequest (server) {
var _headers = {}
var _path
const _headers = {}
let _path

function expect (status, body, callback) {
if (arguments.length === 2) {
Expand All @@ -71,25 +56,25 @@ function rawrequest (server) {
}

server.listen(function onlisten () {
var addr = this.address()
var port = addr.port
const addr = this.address()
const port = addr.port

var req = http.get({
const req = http.get({
host: '127.0.0.1',
path: _path,
port: port
})
req.on('error', callback)
req.on('response', function onresponse (res) {
var buf = ''
let buf = ''

res.setEncoding('utf8')
res.on('data', function ondata (s) { buf += s })
res.on('end', function onend () {
var err = null
res.on('data', (s) => { buf += s })
res.on('end', () => {
let err = null

try {
for (var key in _headers) {
for (const key in _headers) {
assert.strictEqual(res.headers[key], _headers[key])
}

Expand All @@ -111,22 +96,18 @@ function rawrequest (server) {
})
}

function get (path) {
_path = path
return {
get: (path) => {
_path = path

return {
expect: expect
return { expect }
}
}

return {
get: get
}
}

function rawrequestHTTP2 (server) {
var _headers = {}
var _path
const _headers = {}
let _path

function expect (status, body, callback) {
if (arguments.length === 2) {
Expand All @@ -135,26 +116,24 @@ function rawrequestHTTP2 (server) {
}

server.listen(function onlisten () {
var buf = ''
var resHeaders
var addr = this.address()
var port = addr.port
let buf = ''
let resHeaders
const addr = this.address()
const port = addr.port

var client = http2.connect('http://127.0.0.1:' + port)
var req = client.request({
const client = http2.connect('http://127.0.0.1:' + port)
const req = client.request({
':method': 'GET',
':path': _path.replace(/http:\/\/localhost/, '')
})
req.on('error', callback)
req.on('response', function onresponse (responseHeaders) {
resHeaders = responseHeaders
})
req.on('data', function ondata (s) { buf += s })
req.on('end', function onend () {
var err = null
req.on('response', (responseHeaders) => { resHeaders = responseHeaders })
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer that we keep the regular function, it's easier to debug when you know the function name rather than when it's an anonymous function

req.on('data', (s) => { buf += s })
req.on('end', () => {
let err = null

try {
for (var key in _headers) {
for (const key in _headers) {
assert.strictEqual(resHeaders[key], _headers[key])
}

Expand All @@ -177,33 +156,29 @@ function rawrequestHTTP2 (server) {
})
}

function get (path) {
_path = path
return {
get: (path) => {
_path = path

return {
expect: expect
return { expect }
}
}

return {
get: get
}
}

function shouldHaveStatusMessage (statusMessage) {
return function (test) {
return (test) => {
assert.strictEqual(test.res.statusMessage, statusMessage, 'should have statusMessage "' + statusMessage + '"')
}
}

function shouldNotHaveBody () {
return function (res) {
return (res) => {
assert.ok(res.text === '' || res.text === undefined)
}
}

function shouldNotHaveHeader (header) {
return function (test) {
return (test) => {
assert.ok(test.res.headers[header] === undefined, 'response does not have header "' + header + '"')
}
}
Loading