@@ -553,6 +553,232 @@ describe('md-slider', function() {
553
553
} ) ) ;
554
554
555
555
} ) ;
556
+
557
+ describe ( 'invert' , function ( ) {
558
+ it ( 'should set model on press' , function ( ) {
559
+ var slider = setup ( 'md-vertical md-invert ng-model="value" min="0" max="100"' ) ;
560
+ pageScope . $apply ( 'value = 50' ) ;
561
+
562
+ var wrapper = getWrapper ( slider ) ;
563
+
564
+ wrapper . triggerHandler ( { type : '$md.pressdown' , pointer : { y : 70 } } ) ;
565
+ wrapper . triggerHandler ( { type : '$md.dragstart' , pointer : { y : 70 } } ) ;
566
+ $timeout . flush ( ) ;
567
+ expect ( pageScope . value ) . toBe ( 70 ) ;
568
+
569
+ // When going past max, it should clamp to max.
570
+ wrapper . triggerHandler ( { type : '$md.drag' , pointer : { y : 0 } } ) ;
571
+ $timeout . flush ( ) ;
572
+ expect ( pageScope . value ) . toBe ( 0 ) ;
573
+
574
+ wrapper . triggerHandler ( { type : '$md.drag' , pointer : { y : 50 } } ) ;
575
+ $timeout . flush ( ) ;
576
+ expect ( pageScope . value ) . toBe ( 50 ) ;
577
+ } ) ;
578
+
579
+ it ( 'should decrement model on up arrow' , function ( ) {
580
+ var slider = setup ( 'md-vertical md-invert min="100" max="104" step="2" ng-model="model"' ) ;
581
+ pageScope . $apply ( 'model = 104' ) ;
582
+
583
+ var wrapper = getWrapper ( slider ) ;
584
+
585
+ wrapper . triggerHandler ( {
586
+ type : 'keydown' ,
587
+ keyCode : $mdConstant . KEY_CODE . UP_ARROW
588
+ } ) ;
589
+ $timeout . flush ( ) ;
590
+ expect ( pageScope . model ) . toBe ( 102 ) ;
591
+
592
+ wrapper . triggerHandler ( {
593
+ type : 'keydown' ,
594
+ keyCode : $mdConstant . KEY_CODE . UP_ARROW
595
+ } ) ;
596
+ $timeout . flush ( ) ;
597
+ expect ( pageScope . model ) . toBe ( 100 ) ;
598
+
599
+ // Stays at min.
600
+ wrapper . triggerHandler ( {
601
+ type : 'keydown' ,
602
+ keyCode : $mdConstant . KEY_CODE . UP_ARROW
603
+ } ) ;
604
+ $timeout . flush ( ) ;
605
+ expect ( pageScope . model ) . toBe ( 100 ) ;
606
+
607
+ } ) ;
608
+
609
+ it ( 'should increment model on down arrow' , function ( ) {
610
+ var slider = setup ( 'md-vertical md-invert min="100" max="104" step="2" ng-model="model"' ) ;
611
+ pageScope . $apply ( 'model = 100' ) ;
612
+
613
+ var wrapper = getWrapper ( slider ) ;
614
+
615
+ wrapper . triggerHandler ( {
616
+ type : 'keydown' ,
617
+ keyCode : $mdConstant . KEY_CODE . DOWN_ARROW
618
+ } ) ;
619
+ $timeout . flush ( ) ;
620
+ expect ( pageScope . model ) . toBe ( 102 ) ;
621
+
622
+ wrapper . triggerHandler ( {
623
+ type : 'keydown' ,
624
+ keyCode : $mdConstant . KEY_CODE . DOWN_ARROW
625
+ } ) ;
626
+ $timeout . flush ( ) ;
627
+ expect ( pageScope . model ) . toBe ( 104 ) ;
628
+
629
+ // Stays at max.
630
+ wrapper . triggerHandler ( {
631
+ type : 'keydown' ,
632
+ keyCode : $mdConstant . KEY_CODE . DOWN_ARROW
633
+ } ) ;
634
+ $timeout . flush ( ) ;
635
+ expect ( pageScope . model ) . toBe ( 104 ) ;
636
+ } ) ;
637
+
638
+ it ( 'should update the thumb text' , function ( ) {
639
+ var slider = setup ( 'md-vertical md-invert ng-model="value" md-discrete min="0" max="100" step="1"' ) ;
640
+ var wrapper = getWrapper ( slider ) ;
641
+
642
+ pageScope . $apply ( 'value = 30' ) ;
643
+ expect ( slider [ 0 ] . querySelector ( '._md-thumb-text' ) . textContent ) . toBe ( '30' ) ;
644
+
645
+ wrapper . triggerHandler ( {
646
+ type : 'keydown' ,
647
+ keyCode : $mdConstant . KEY_CODE . DOWN_ARROW
648
+ } ) ;
649
+ $timeout . flush ( ) ;
650
+ expect ( slider [ 0 ] . querySelector ( '._md-thumb-text' ) . textContent ) . toBe ( '31' ) ;
651
+
652
+ wrapper . triggerHandler ( { type : '$md.pressdown' , pointer : { y : 70 } } ) ;
653
+ expect ( slider [ 0 ] . querySelector ( '._md-thumb-text' ) . textContent ) . toBe ( '70' ) ;
654
+
655
+ wrapper . triggerHandler ( { type : '$md.dragstart' , pointer : { y : 93 } } ) ;
656
+ wrapper . triggerHandler ( { type : '$md.drag' , pointer : { y : 93 } } ) ;
657
+ expect ( slider [ 0 ] . querySelector ( '._md-thumb-text' ) . textContent ) . toBe ( '93' ) ;
658
+ } ) ;
659
+
660
+ it ( 'should add _md-min class only when at min value' , function ( ) {
661
+ var slider = setup ( 'md-vertical md-invert ng-model="model" min="0" max="30"' ) ;
662
+ var wrapper = getWrapper ( slider ) ;
663
+
664
+ pageScope . $apply ( 'model = 0' ) ;
665
+ expect ( slider ) . toHaveClass ( '_md-min' ) ;
666
+
667
+ wrapper . triggerHandler ( { type : '$md.dragstart' , pointer : { y : 0 } } ) ;
668
+ wrapper . triggerHandler ( { type : '$md.drag' , pointer : { y : 10 } } ) ;
669
+ $timeout . flush ( ) ;
670
+ expect ( slider ) . not . toHaveClass ( '_md-min' ) ;
671
+ } ) ;
672
+
673
+ it ( 'should add _md-max class only when at max value' , function ( ) {
674
+ var slider = setup ( 'md-vertical md-invert ng-model="model" min="0" max="30"' ) ;
675
+ var wrapper = getWrapper ( slider ) ;
676
+
677
+ pageScope . $apply ( 'model = 30' ) ;
678
+ expect ( slider ) . toHaveClass ( '_md-max' ) ;
679
+
680
+ wrapper . triggerHandler ( { type : '$md.dragstart' , pointer : { y : 30 } } ) ;
681
+ wrapper . triggerHandler ( { type : '$md.drag' , pointer : { y : 10 } } ) ;
682
+ $timeout . flush ( ) ;
683
+ expect ( slider ) . not . toHaveClass ( '_md-max' ) ;
684
+ } ) ;
685
+
686
+ it ( 'should increment at a predictable step' , function ( ) {
687
+
688
+ buildSlider ( 0.1 , 0 , 1 ) . drag ( { y :30 } ) ;
689
+ expect ( pageScope . value ) . toBe ( 0.3 ) ;
690
+
691
+ buildSlider ( 0.25 , 0 , 1 ) . drag ( { y :45 } ) ;
692
+ expect ( pageScope . value ) . toBe ( 0.5 ) ;
693
+
694
+ buildSlider ( 0.25 , 0 , 1 ) . drag ( { y :75 } ) ;
695
+ expect ( pageScope . value ) . toBe ( 0.75 ) ;
696
+
697
+ buildSlider ( 1 , 0 , 100 ) . drag ( { y :10 } ) ;
698
+ expect ( pageScope . value ) . toBe ( 10 ) ;
699
+
700
+ buildSlider ( 20 , 5 , 45 ) . drag ( { y :50 } ) ;
701
+ expect ( pageScope . value ) . toBe ( 25 ) ;
702
+
703
+ function buildSlider ( step , min , max ) {
704
+ var slider = setup ( 'md-vertical md-invert ng-model="value" min="' + min + '" max="' + max + '" step="' + step + '"' ) ;
705
+ pageScope . $apply ( 'value = 0.5' ) ;
706
+
707
+ var wrapper = getWrapper ( slider ) ;
708
+
709
+ return {
710
+ drag : function simulateDrag ( drag ) {
711
+
712
+ wrapper . triggerHandler ( { type : '$md.pressdown' , pointer : drag } ) ;
713
+ wrapper . triggerHandler ( { type : '$md.dragstart' , pointer : drag } ) ;
714
+
715
+ $timeout . flush ( ) ;
716
+ }
717
+ } ;
718
+ }
719
+
720
+ } ) ;
721
+
722
+ it ( 'should increment model on left arrow' , function ( ) {
723
+ var slider = setup ( 'md-invert min="100" max="104" step="2" ng-model="model"' ) ;
724
+ pageScope . $apply ( 'model = 100' ) ;
725
+
726
+ var wrapper = getWrapper ( slider ) ;
727
+
728
+ wrapper . triggerHandler ( {
729
+ type : 'keydown' ,
730
+ keyCode : $mdConstant . KEY_CODE . LEFT_ARROW
731
+ } ) ;
732
+ $timeout . flush ( ) ;
733
+ expect ( pageScope . model ) . toBe ( 102 ) ;
734
+
735
+ wrapper . triggerHandler ( {
736
+ type : 'keydown' ,
737
+ keyCode : $mdConstant . KEY_CODE . LEFT_ARROW
738
+ } ) ;
739
+ $timeout . flush ( ) ;
740
+ expect ( pageScope . model ) . toBe ( 104 ) ;
741
+
742
+ // Stays at max.
743
+ wrapper . triggerHandler ( {
744
+ type : 'keydown' ,
745
+ keyCode : $mdConstant . KEY_CODE . LEFT_ARROW
746
+ } ) ;
747
+ $timeout . flush ( ) ;
748
+ expect ( pageScope . model ) . toBe ( 104 ) ;
749
+ } ) ;
750
+
751
+ it ( 'should decrement model on right arrow' , function ( ) {
752
+ var slider = setup ( 'md-invert min="100" max="104" step="2" ng-model="model"' ) ;
753
+ pageScope . $apply ( 'model = 104' ) ;
754
+
755
+ var wrapper = getWrapper ( slider ) ;
756
+
757
+ wrapper . triggerHandler ( {
758
+ type : 'keydown' ,
759
+ keyCode : $mdConstant . KEY_CODE . RIGHT_ARROW
760
+ } ) ;
761
+ $timeout . flush ( ) ;
762
+ expect ( pageScope . model ) . toBe ( 102 ) ;
763
+
764
+ wrapper . triggerHandler ( {
765
+ type : 'keydown' ,
766
+ keyCode : $mdConstant . KEY_CODE . RIGHT_ARROW
767
+ } ) ;
768
+ $timeout . flush ( ) ;
769
+ expect ( pageScope . model ) . toBe ( 100 ) ;
770
+
771
+ // Stays at min.
772
+ wrapper . triggerHandler ( {
773
+ type : 'keydown' ,
774
+ keyCode : $mdConstant . KEY_CODE . RIGHT_ARROW
775
+ } ) ;
776
+ $timeout . flush ( ) ;
777
+ expect ( pageScope . model ) . toBe ( 100 ) ;
778
+ } ) ;
779
+
780
+ } ) ;
781
+
556
782
557
783
it ( 'should set a default tabindex' , function ( ) {
558
784
var slider = setup ( ) ;
0 commit comments