@@ -9,6 +9,12 @@ var zlib = require('zlib')
99
1010var compression = require ( '..' )
1111
12+ /**
13+ * @const
14+ * whether current node version has brotli support
15+ */
16+ var hasBrotliSupport = 'brotli' in process . versions
17+
1218describe ( 'compression()' , function ( ) {
1319 it ( 'should skip HEAD' , function ( done ) {
1420 var server = createServer ( { threshold : 0 } , function ( req , res ) {
@@ -465,6 +471,21 @@ describe('compression()', function () {
465471 } )
466472 } )
467473
474+ describe ( 'when "Accept-Encoding: br"' , function ( ) {
475+ var brotlit = hasBrotliSupport ? it : it . skip
476+ brotlit ( 'should respond with br' , function ( done ) {
477+ var server = createServer ( { threshold : 0 } , function ( req , res ) {
478+ res . setHeader ( 'Content-Type' , 'text/plain' )
479+ res . end ( 'hello, world' )
480+ } )
481+
482+ request ( server )
483+ . get ( '/' )
484+ . set ( 'Accept-Encoding' , 'br' )
485+ . expect ( 'Content-Encoding' , 'br' , done )
486+ } )
487+ } )
488+
468489 describe ( 'when "Accept-Encoding: gzip, deflate"' , function ( ) {
469490 it ( 'should respond with gzip' , function ( done ) {
470491 var server = createServer ( { threshold : 0 } , function ( req , res ) {
@@ -493,6 +514,21 @@ describe('compression()', function () {
493514 } )
494515 } )
495516
517+ describe ( 'when "Accept-Encoding: deflate, br"' , function ( ) {
518+ var brotlit = hasBrotliSupport ? it : it . skip
519+ brotlit ( 'should respond with br' , function ( done ) {
520+ var server = createServer ( { threshold : 0 } , function ( req , res ) {
521+ res . setHeader ( 'Content-Type' , 'text/plain' )
522+ res . end ( 'hello, world' )
523+ } )
524+
525+ request ( server )
526+ . get ( '/' )
527+ . set ( 'Accept-Encoding' , 'deflate, br' )
528+ . expect ( 'Content-Encoding' , 'br' , done )
529+ } )
530+ } )
531+
496532 describe ( 'when "Cache-Control: no-transform" response header' , function ( ) {
497533 it ( 'should not compress response' , function ( done ) {
498534 var server = createServer ( { threshold : 0 } , function ( req , res ) {
@@ -631,6 +667,33 @@ describe('compression()', function () {
631667 . end ( )
632668 } )
633669
670+ var brotlit = hasBrotliSupport ? it : it . skip
671+ brotlit ( 'should flush small chunks for brotli' , function ( done ) {
672+ var chunks = 0
673+ var next
674+ var server = createServer ( { threshold : 0 } , function ( req , res ) {
675+ next = writeAndFlush ( res , 2 , Buffer . from ( '..' ) )
676+ res . setHeader ( 'Content-Type' , 'text/plain' )
677+ next ( )
678+ } )
679+
680+ function onchunk ( chunk ) {
681+ assert . ok ( chunks ++ < 20 )
682+ assert . strictEqual ( chunk . toString ( ) , '..' )
683+ next ( )
684+ }
685+
686+ request ( server )
687+ . get ( '/' )
688+ . set ( 'Accept-Encoding' , 'br' )
689+ . request ( )
690+ . on ( 'response' , unchunk ( 'br' , onchunk , function ( err ) {
691+ if ( err ) return done ( err )
692+ server . close ( done )
693+ } ) )
694+ . end ( )
695+ } )
696+
634697 it ( 'should flush small chunks for deflate' , function ( done ) {
635698 var chunks = 0
636699 var next
@@ -710,6 +773,9 @@ function unchunk (encoding, onchunk, onend) {
710773 case 'gzip' :
711774 stream = res . pipe ( zlib . createGunzip ( ) )
712775 break
776+ case 'br' :
777+ stream = res . pipe ( zlib . createBrotliDecompress ( ) )
778+ break
713779 }
714780
715781 stream . on ( 'data' , onchunk )
0 commit comments