@@ -18,6 +18,11 @@ class ExtendedModifier extends Modifier {
1818        return  otherModifier  instanceof  ExtendedModifier  &&  this . value  ===  otherModifier . value ; 
1919    } 
2020} 
21+ class  SameUndefinedModifier  extends  Modifier  { 
22+     isSameAs ( otherModifier : Modifier ) : boolean  { 
23+         return  otherModifier  instanceof  Modifier  ||  typeof  otherModifier  ===  'undefined' ; 
24+     } 
25+ } 
2126describe ( 'core' ,  ( )  =>  { 
2227    describe ( 'Modifiers' ,  ( )  =>  { 
2328        describe ( 'constructor()' ,  ( )  =>  { 
@@ -505,6 +510,56 @@ describe('core', () => {
505510                expect ( modifiersMap [ 1 ]  instanceof  ExtendedModifier ) . to . be . true ; 
506511            } ) ; 
507512        } ) ; 
513+         describe ( 'contains()' ,  ( )  =>  { 
514+             it ( 'should contain itself favorably' ,  ( )  =>  { 
515+                 const  m1  =  new  Modifier ( ) ; 
516+                 const  m2  =  new  Modifier ( ) ; 
517+                 const  modifiers1  =  new  Modifiers ( m1 ,  m2 ) ; 
518+                 expect ( modifiers1 . contains ( modifiers1 ) ) . to . be . true ; 
519+             } ) ; 
520+             it ( 'should contain a modifier that has the same favorably' ,  ( )  =>  { 
521+                 const  m1  =  new  ExtendedModifier ( 1 ) ; 
522+                 const  m2  =  new  ExtendedModifier ( 2 ) ; 
523+                 const  modifiers1  =  new  Modifiers ( m1 ,  m2 ) ; 
524+                 const  m1bis  =  new  ExtendedModifier ( 1 ) ; 
525+                 const  m2bis  =  new  ExtendedModifier ( 2 ) ; 
526+                 const  modifiers2  =  new  Modifiers ( m1bis ) ; 
527+                 const  modifiers3  =  new  Modifiers ( m2bis ) ; 
528+                 const  modifiers4  =  new  Modifiers ( m1bis ,  m2bis ) ; 
529+                 expect ( modifiers1 . contains ( modifiers2 ) ) . to . be . true ; 
530+                 expect ( modifiers1 . contains ( modifiers3 ) ) . to . be . true ; 
531+                 expect ( modifiers1 . contains ( modifiers4 ) ) . to . be . true ; 
532+             } ) ; 
533+             it ( 'should contain a modifier that has the same favorably even if their order is different' ,  ( )  =>  { 
534+                 const  m1  =  new  ExtendedModifier ( 1 ) ; 
535+                 const  m2  =  new  ExtendedModifier ( 2 ) ; 
536+                 const  modifiers1  =  new  Modifiers ( m1 ,  m2 ) ; 
537+                 const  modifiers2  =  new  Modifiers ( m2 ,  m1 ) ; 
538+                 expect ( modifiers1 . contains ( modifiers2 ) ) . to . be . true ; 
539+             } ) ; 
540+             it ( 'should contain a modifier that has the same favorably even if their order and instances are different' ,  ( )  =>  { 
541+                 const  m1  =  new  ExtendedModifier ( 1 ) ; 
542+                 const  m2  =  new  ExtendedModifier ( 2 ) ; 
543+                 const  modifiers1  =  new  Modifiers ( m1 ,  m2 ) ; 
544+                 const  m1bis  =  new  ExtendedModifier ( 1 ) ; 
545+                 const  m2bis  =  new  ExtendedModifier ( 2 ) ; 
546+                 const  modifiers2  =  new  Modifiers ( m2bis ,  m1bis ) ; 
547+                 expect ( modifiers1 . contains ( modifiers2 ) ) . to . be . true ; 
548+             } ) ; 
549+             it ( 'should match with modifiers that are the same with undefined' ,  ( )  =>  { 
550+                 const  m1  =  new  SameUndefinedModifier ( ) ; 
551+                 const  modifiers1  =  new  Modifiers ( ) ; 
552+                 const  modifiers2  =  new  Modifiers ( m1 ) ; 
553+                 expect ( modifiers1 . contains ( modifiers2 ) ) . to . be . true ; 
554+             } ) ; 
555+             it ( 'should not contain the other modifiers' ,  ( )  =>  { 
556+                 const  m1  =  new  ExtendedModifier ( 1 ) ; 
557+                 const  modifiers1  =  new  Modifiers ( m1 ) ; 
558+                 const  m2  =  new  ExtendedModifier ( 0 ) ; 
559+                 const  modifiers2  =  new  Modifiers ( m2 ) ; 
560+                 expect ( modifiers1 . contains ( modifiers2 ) ) . to . be . false ; 
561+             } ) ; 
562+         } ) ; 
508563        describe ( 'areSameAs()' ,  ( )  =>  { 
509564            it ( 'should know that an instance of Modifiers is the same as itself' ,  ( )  =>  { 
510565                const  m1  =  new  Modifier ( ) ; 
0 commit comments