@@ -4,6 +4,9 @@ var http = require('http')
4
4
var onHeaders = require ( '..' )
5
5
var request = require ( 'supertest' )
6
6
7
+ // older node versions don't have appendHeader
8
+ var isAppendHeaderSupported = typeof http . ServerResponse . prototype . appendHeader === 'function'
9
+
7
10
describe ( 'onHeaders(res, listener)' , function ( ) {
8
11
it ( 'should fire after setHeader' , function ( done ) {
9
12
var server = createServer ( echoListener )
@@ -336,6 +339,66 @@ describe('onHeaders(res, listener)', function () {
336
339
. expect ( 500 , done )
337
340
} )
338
341
} )
342
+
343
+ describe ( 'writeHead(status, duplicate headers)' , function ( ) {
344
+ it ( 'should be respected' , function ( done ) {
345
+ var server = createServer ( listener , handler )
346
+
347
+ function handler ( req , res ) {
348
+ res . writeHead ( 201 , [ 'express' , 'is good' , 'express' , 'is great' ] )
349
+ }
350
+
351
+ function listener ( req , res ) {
352
+ // no need to duplicate existing listener tests further... right?
353
+ }
354
+
355
+ var response = request ( server ) . get ( '/' )
356
+
357
+ if ( isAppendHeaderSupported ) {
358
+ response
359
+ . expect ( 'express' , 'is good, is great' )
360
+ } else {
361
+ response
362
+ . expect ( 'express' , 'is great' )
363
+ }
364
+
365
+ response
366
+ . expect ( 201 )
367
+ . end ( function ( err , res ) {
368
+ if ( err ) throw err
369
+
370
+ var expressIsGood = false
371
+ var expressIsGreat = false
372
+
373
+ // very old node versions do not have the `rawHeaders` prop
374
+ var headers = res . res . rawHeaders || res . res . headers
375
+
376
+ if ( headers . length ) {
377
+ for ( var i = 0 ; i < headers . length ; i ++ ) {
378
+ const header = headers [ i ]
379
+
380
+ if ( header === 'express' ) {
381
+ if ( headers [ i + 1 ] === 'is good' ) {
382
+ expressIsGood = true
383
+ } else if ( headers [ i + 1 ] === 'is great' ) {
384
+ expressIsGreat = true
385
+ }
386
+ }
387
+ }
388
+ } else {
389
+ expressIsGreat = headers . express === 'is great'
390
+ }
391
+
392
+ if ( isAppendHeaderSupported ) {
393
+ assert . ok ( expressIsGood )
394
+ }
395
+
396
+ assert . ok ( expressIsGreat )
397
+
398
+ done ( )
399
+ } )
400
+ } )
401
+ } )
339
402
} )
340
403
341
404
function createServer ( listener , handler ) {
0 commit comments