@@ -18,6 +18,11 @@ class ExtendedModifier extends Modifier {
18
18
return otherModifier instanceof ExtendedModifier && this . value === otherModifier . value ;
19
19
}
20
20
}
21
+ class SameUndefinedModifier extends Modifier {
22
+ isSameAs ( otherModifier : Modifier ) : boolean {
23
+ return otherModifier instanceof Modifier || typeof otherModifier === 'undefined' ;
24
+ }
25
+ }
21
26
describe ( 'core' , ( ) => {
22
27
describe ( 'Modifiers' , ( ) => {
23
28
describe ( 'constructor()' , ( ) => {
@@ -505,6 +510,56 @@ describe('core', () => {
505
510
expect ( modifiersMap [ 1 ] instanceof ExtendedModifier ) . to . be . true ;
506
511
} ) ;
507
512
} ) ;
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
+ } ) ;
508
563
describe ( 'areSameAs()' , ( ) => {
509
564
it ( 'should know that an instance of Modifiers is the same as itself' , ( ) => {
510
565
const m1 = new Modifier ( ) ;
0 commit comments