@@ -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' , ( ) => {
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 is the same' , ( ) => {
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 is the same 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 is the same 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