22var assert = require ( 'assert' )
33var Negotiator = require ( '..' )
44
5+ var clientPreference = { sortPreference : 'client' }
6+ var serverPreference = { sortPreference : 'server' }
7+ var clientThenServerPreference = { sortPreference : 'clientThenServer' }
8+
59describe ( 'negotiator.encoding()' , function ( ) {
610 whenAcceptEncoding ( undefined , function ( ) {
711 it ( 'should return identity' , function ( ) {
@@ -112,6 +116,12 @@ describe('negotiator.encoding(array)', function () {
112116 assert . strictEqual ( this . negotiator . encoding ( [ 'gzip' ] ) , 'gzip' )
113117 assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'gzip' ] ) , 'gzip' )
114118 } )
119+
120+ it ( 'clientThenServerPreference: should return server-preferred encoding' , function ( ) {
121+ assert . strictEqual ( this . negotiator . encoding ( [ 'identity' ] , clientThenServerPreference ) , 'identity' )
122+ assert . strictEqual ( this . negotiator . encoding ( [ 'gzip' ] , clientThenServerPreference ) , 'gzip' )
123+ assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'gzip' ] , clientThenServerPreference ) , 'compress' )
124+ } )
115125 } )
116126
117127 whenAcceptEncoding ( '*, gzip;q=0' , function ( ) {
@@ -206,6 +216,23 @@ describe('negotiator.encoding(array)', function () {
206216 assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'identity' ] ) , 'identity' )
207217 } )
208218 } )
219+
220+ whenAcceptEncoding ( 'gzip;q=0.9, sdhc, br;q=0.9' , function ( ) {
221+ it ( 'should return best server-preferred encoding of equal client-preferred encodings' , function ( ) {
222+ assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'br' , 'gzip' ] ) , 'gzip' )
223+ assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'gzip' , 'br' ] ) , 'gzip' )
224+ } )
225+
226+ it ( 'should return best server-preferred encoding of equal client-preferred encodings' , function ( ) {
227+ assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'br' , 'gzip' ] , clientThenServerPreference ) , 'br' )
228+ assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'gzip' , 'br' ] , clientThenServerPreference ) , 'gzip' )
229+ } )
230+
231+ it ( 'should return best server-preferred encoding of equal client-preferred encodings' , function ( ) {
232+ assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'br' , 'gzip' ] , serverPreference ) , 'br' )
233+ assert . strictEqual ( this . negotiator . encoding ( [ 'compress' , 'gzip' , 'br' ] , serverPreference ) , 'gzip' )
234+ } )
235+ } )
209236} )
210237
211238describe ( 'negotiator.encodings()' , function ( ) {
@@ -316,7 +343,13 @@ describe('negotiator.encodings(array)', function () {
316343 it ( 'should prefer gzip' , function ( ) {
317344 assert . deepEqual ( this . negotiator . encodings ( [ 'identity' ] ) , [ 'identity' ] )
318345 assert . deepEqual ( this . negotiator . encodings ( [ 'gzip' ] ) , [ 'gzip' ] )
319- assert . deepEqual ( this . negotiator . encodings ( [ 'compress' , 'gzip' ] ) , [ 'gzip' , 'compress' ] )
346+ assert . deepEqual ( this . negotiator . encodings ( [ 'compress' , 'deflate' , 'gzip' ] ) , [ 'gzip' , 'compress' , 'deflate' ] )
347+ } )
348+
349+ it ( 'clientThenServerPreference: should return server preferred encodings' , function ( ) {
350+ assert . deepEqual ( this . negotiator . encodings ( [ 'identity' ] , clientThenServerPreference ) , [ 'identity' ] )
351+ assert . deepEqual ( this . negotiator . encodings ( [ 'gzip' ] , clientThenServerPreference ) , [ 'gzip' ] )
352+ assert . deepEqual ( this . negotiator . encodings ( [ 'compress' , 'deflate' , 'gzip' ] , clientThenServerPreference ) , [ 'compress' , 'deflate' , 'gzip' ] )
320353 } )
321354 } )
322355
@@ -403,6 +436,11 @@ describe('negotiator.encodings(array)', function () {
403436 assert . deepEqual ( this . negotiator . encodings ( [ 'deflate' ] ) , [ 'deflate' ] )
404437 assert . deepEqual ( this . negotiator . encodings ( [ 'deflate' , 'gzip' ] ) , [ 'deflate' , 'gzip' ] )
405438 } )
439+
440+ it ( 'serverPreference: should ignore client quality levels' , function ( ) {
441+ assert . deepEqual ( this . negotiator . encodings ( [ 'deflate' , 'gzip' ] , serverPreference ) , [ 'deflate' , 'gzip' ] )
442+ assert . deepEqual ( this . negotiator . encodings ( [ 'gzip' , 'deflate' ] , serverPreference ) , [ 'gzip' , 'deflate' ] )
443+ } )
406444 } )
407445
408446 whenAcceptEncoding ( 'gzip;q=0.8, identity;q=0.5, *;q=0.3' , function ( ) {
@@ -411,6 +449,87 @@ describe('negotiator.encodings(array)', function () {
411449 assert . deepEqual ( this . negotiator . encodings ( [ 'identity' , 'gzip' , 'compress' ] ) , [ 'gzip' , 'identity' , 'compress' ] )
412450 } )
413451 } )
452+
453+ whenAcceptEncoding ( 'not;q=0, med1;q=0.9, med2;q=0.9, high, *;q=0.8' , function ( ) {
454+ it ( 'clientPreference' , function ( ) {
455+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med2' , 'other' , 'med1' ] , clientPreference ) , [ 'high' , 'med1' , 'med2' , 'other' ] )
456+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med1' , 'other' , 'med2' ] , clientPreference ) , [ 'high' , 'med1' , 'med2' , 'other' ] )
457+ } )
458+
459+ it ( 'clientThenServerPreference' , function ( ) {
460+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med2' , 'other' , 'med1' ] , clientThenServerPreference ) , [ 'high' , 'med2' , 'med1' , 'other' ] )
461+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med1' , 'other' , 'med2' ] , clientThenServerPreference ) , [ 'high' , 'med1' , 'med2' , 'other' ] )
462+ } )
463+
464+ it ( 'serverPreference' , function ( ) {
465+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med2' , 'other' , 'med1' ] , serverPreference ) , [ 'high' , 'med2' , 'other' , 'med1' ] )
466+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med1' , 'other' , 'med2' ] , serverPreference ) , [ 'high' , 'med1' , 'other' , 'med2' ] )
467+ } )
468+ } )
469+
470+ whenAcceptEncoding ( 'not;q=0, med1;q=0.9, med2;q=0.9, high, identity;q=0.9' , function ( ) {
471+ it ( 'clientPreference' , function ( ) {
472+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med2' , 'other' , 'med1' , 'identity' ] , clientPreference ) , [ 'high' , 'med1' , 'med2' , 'identity' ] )
473+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med1' , 'other' , 'med2' , 'identity' ] , clientPreference ) , [ 'high' , 'med1' , 'med2' , 'identity' ] )
474+ } )
475+
476+ it ( 'clientThenServerPreference' , function ( ) {
477+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med2' , 'other' , 'med1' , 'identity' ] , clientThenServerPreference ) , [ 'high' , 'med2' , 'med1' , 'identity' ] )
478+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med1' , 'other' , 'med2' , 'identity' ] , clientThenServerPreference ) , [ 'high' , 'med1' , 'med2' , 'identity' ] )
479+ } )
480+
481+ it ( 'serverPreference' , function ( ) {
482+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med2' , 'other' , 'med1' , 'identity' ] , serverPreference ) , [ 'high' , 'med2' , 'med1' , 'identity' ] )
483+ assert . deepEqual ( this . negotiator . encodings ( [ 'high' , 'not' , 'med1' , 'other' , 'med2' , 'identity' ] , serverPreference ) , [ 'high' , 'med1' , 'med2' , 'identity' ] )
484+ } )
485+ } )
486+
487+ whenAcceptEncoding ( 'c;q=0.9, b;q=0.89, a;q=0.9, d;q=0.91, e;q=0.9' , function ( ) {
488+ it ( 'clientPreference' , function ( ) {
489+ assert . deepEqual ( this . negotiator . encodings ( [ 'b' , 'c' , 'd' , 'e' ] , clientPreference ) , [ 'd' , 'c' , 'e' , 'b' ] ) ;
490+ assert . deepEqual ( this . negotiator . encodings ( [ 'c' , 'd' , 'e' , 'b' ] , clientPreference ) , [ 'd' , 'c' , 'e' , 'b' ] ) ;
491+ assert . deepEqual ( this . negotiator . encodings ( [ 'd' , 'e' , 'b' , 'c' ] , clientPreference ) , [ 'd' , 'c' , 'e' , 'b' ] ) ;
492+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'b' , 'c' , 'd' ] , clientPreference ) , [ 'd' , 'c' , 'e' , 'b' ] ) ;
493+
494+ assert . deepEqual ( this . negotiator . encodings ( [ 'a' , 'c' , 'e' ] , clientPreference ) , [ 'c' , 'a' , 'e' ] ) ;
495+ assert . deepEqual ( this . negotiator . encodings ( [ 'c' , 'e' , 'a' ] , clientPreference ) , [ 'c' , 'a' , 'e' ] ) ;
496+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'a' , 'c' ] , clientPreference ) , [ 'c' , 'a' , 'e' ] ) ;
497+
498+ assert . deepEqual ( this . negotiator . encodings ( [ 'identity' , 'e' , 'f' ] , clientPreference ) , [ 'e' , 'identity' ] ) ;
499+ assert . deepEqual ( this . negotiator . encodings ( [ 'f' , 'identity' , 'e' ] , clientPreference ) , [ 'e' , 'identity' ] ) ;
500+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'f' , 'identity' ] , clientPreference ) , [ 'e' , 'identity' ] ) ;
501+ } )
502+
503+ it ( 'clientThenServerPreference' , function ( ) {
504+ assert . deepEqual ( this . negotiator . encodings ( [ 'b' , 'c' , 'd' , 'e' ] , clientThenServerPreference ) , [ 'd' , 'c' , 'e' , 'b' ] ) ;
505+ assert . deepEqual ( this . negotiator . encodings ( [ 'c' , 'd' , 'e' , 'b' ] , clientThenServerPreference ) , [ 'd' , 'c' , 'e' , 'b' ] ) ;
506+ assert . deepEqual ( this . negotiator . encodings ( [ 'd' , 'e' , 'b' , 'c' ] , clientThenServerPreference ) , [ 'd' , 'e' , 'c' , 'b' ] ) ;
507+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'b' , 'c' , 'd' ] , clientThenServerPreference ) , [ 'd' , 'e' , 'c' , 'b' ] ) ;
508+
509+ assert . deepEqual ( this . negotiator . encodings ( [ 'a' , 'c' , 'e' ] , clientThenServerPreference ) , [ 'a' , 'c' , 'e' ] ) ;
510+ assert . deepEqual ( this . negotiator . encodings ( [ 'c' , 'e' , 'a' ] , clientThenServerPreference ) , [ 'c' , 'e' , 'a' ] ) ;
511+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'a' , 'c' ] , clientThenServerPreference ) , [ 'e' , 'a' , 'c' ] ) ;
512+
513+ assert . deepEqual ( this . negotiator . encodings ( [ 'identity' , 'e' , 'f' ] , clientThenServerPreference ) , [ 'e' , 'identity' ] ) ;
514+ assert . deepEqual ( this . negotiator . encodings ( [ 'f' , 'identity' , 'e' ] , clientThenServerPreference ) , [ 'e' , 'identity' ] ) ;
515+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'f' , 'identity' ] , clientThenServerPreference ) , [ 'e' , 'identity' ] ) ;
516+ } )
517+
518+ it ( 'serverPreference' , function ( ) {
519+ assert . deepEqual ( this . negotiator . encodings ( [ 'b' , 'c' , 'd' , 'e' ] , serverPreference ) , [ 'b' , 'c' , 'd' , 'e' ] ) ;
520+ assert . deepEqual ( this . negotiator . encodings ( [ 'c' , 'd' , 'e' , 'b' ] , serverPreference ) , [ 'c' , 'd' , 'e' , 'b' ] ) ;
521+ assert . deepEqual ( this . negotiator . encodings ( [ 'd' , 'e' , 'b' , 'c' ] , serverPreference ) , [ 'd' , 'e' , 'b' , 'c' ] ) ;
522+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'b' , 'c' , 'd' ] , serverPreference ) , [ 'e' , 'b' , 'c' , 'd' ] ) ;
523+
524+ assert . deepEqual ( this . negotiator . encodings ( [ 'a' , 'c' , 'e' ] , serverPreference ) , [ 'a' , 'c' , 'e' ] ) ;
525+ assert . deepEqual ( this . negotiator . encodings ( [ 'c' , 'e' , 'a' ] , serverPreference ) , [ 'c' , 'e' , 'a' ] ) ;
526+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'a' , 'c' ] , serverPreference ) , [ 'e' , 'a' , 'c' ] ) ;
527+
528+ assert . deepEqual ( this . negotiator . encodings ( [ 'identity' , 'e' , 'f' ] , serverPreference ) , [ 'identity' , 'e' ] ) ;
529+ assert . deepEqual ( this . negotiator . encodings ( [ 'f' , 'identity' , 'e' ] , serverPreference ) , [ 'identity' , 'e' ] ) ;
530+ assert . deepEqual ( this . negotiator . encodings ( [ 'e' , 'f' , 'identity' ] , serverPreference ) , [ 'e' , 'identity' ] ) ;
531+ } )
532+ } )
414533} )
415534
416535function createRequest ( headers ) {
0 commit comments