@@ -1549,6 +1549,7 @@ describe('MatSlider', () => {
1549
1549
let fixture : ComponentFixture < SliderWithTickMarks > ;
1550
1550
let slider : MatSlider ;
1551
1551
let sliderEl : HTMLElement ;
1552
+ let input : MatSliderThumb ;
1552
1553
1553
1554
function getTickMarkEls ( ) {
1554
1555
const activeClass = '.mdc-slider__tick-mark--active' ;
@@ -1565,6 +1566,7 @@ describe('MatSlider', () => {
1565
1566
const sliderDebugElement = fixture . debugElement . query ( By . directive ( MatSlider ) ) ;
1566
1567
slider = sliderDebugElement . componentInstance ;
1567
1568
sliderEl = sliderDebugElement . nativeElement ;
1569
+ input = slider . _getInput ( _MatThumb . END ) as MatSliderThumb ;
1568
1570
} ) ) ;
1569
1571
1570
1572
it ( 'should have tick marks' , ( ) => {
@@ -1604,15 +1606,80 @@ describe('MatSlider', () => {
1604
1606
}
1605
1607
} ) ;
1606
1608
1607
- // TODO(wagnermaciel): Add this test once this is fixed.
1608
- // it('should render the correct number of active & inactive ticks', () => {});
1609
+ it ( 'should render the correct number of active & inactive ticks' , ( ) => {
1610
+ let tickEls = getTickMarkEls ( ) ;
1611
+ expect ( tickEls . active . length ) . toBe ( 1 ) ;
1612
+ expect ( tickEls . inactive . length ) . toBe ( 100 ) ;
1613
+
1614
+ input . value = 50 ;
1615
+ tickEls = getTickMarkEls ( ) ;
1616
+ expect ( tickEls . active . length ) . toBe ( 51 ) ;
1617
+ expect ( tickEls . inactive . length ) . toBe ( 50 ) ;
1618
+
1619
+ input . value = 100 ;
1620
+ tickEls = getTickMarkEls ( ) ;
1621
+ expect ( tickEls . active . length ) . toBe ( 101 ) ;
1622
+ expect ( tickEls . inactive . length ) . toBe ( 0 ) ;
1623
+ } ) ;
1609
1624
1610
1625
// TODO(wagnermaciel): Add this test once this is fixed.
1611
1626
// it('should position the tick marks correctly with a misaligned step', () => {});
1612
1627
1613
1628
// TODO(wagnermaciel): Add this test once this is fixed.
1614
1629
// it('should position the tick marks correctly with a misaligned step (rtl)', () => {});
1615
1630
} ) ;
1631
+
1632
+ describe ( 'range slider with tick marks' , ( ) => {
1633
+ let fixture : ComponentFixture < RangeSliderWithTickMarks > ;
1634
+ let slider : MatSlider ;
1635
+ let sliderEl : HTMLElement ;
1636
+ let endInput : MatSliderRangeThumb ;
1637
+ let startInput : MatSliderRangeThumb ;
1638
+
1639
+ function getTickMarkEls ( ) {
1640
+ const activeClass = '.mdc-slider__tick-mark--active' ;
1641
+ const inactiveClass = '.mdc-slider__tick-mark--inactive' ;
1642
+ const active = sliderEl . querySelectorAll ( activeClass ) ;
1643
+ const inactive = sliderEl . querySelectorAll ( inactiveClass ) ;
1644
+ const ticks = sliderEl . querySelectorAll ( `${ activeClass } ,${ inactiveClass } ` ) ;
1645
+ return { ticks, active, inactive} ;
1646
+ }
1647
+
1648
+ beforeEach ( waitForAsync ( ( ) => {
1649
+ fixture = createComponent ( RangeSliderWithTickMarks ) ;
1650
+ fixture . detectChanges ( ) ;
1651
+ const sliderDebugElement = fixture . debugElement . query ( By . directive ( MatSlider ) ) ;
1652
+ slider = sliderDebugElement . componentInstance ;
1653
+ sliderEl = sliderDebugElement . nativeElement ;
1654
+ endInput = slider . _getInput ( _MatThumb . END ) as MatSliderRangeThumb ;
1655
+ startInput = slider . _getInput ( _MatThumb . START ) as MatSliderRangeThumb ;
1656
+ } ) ) ;
1657
+
1658
+ it ( 'should render the correct number of active & inactive ticks' , ( ) => {
1659
+ startInput . value = 0 ;
1660
+ endInput . value = 100 ;
1661
+
1662
+ let tickEls = getTickMarkEls ( ) ;
1663
+ expect ( tickEls . active . length ) . toBe ( 101 ) ;
1664
+ expect ( tickEls . inactive . length ) . toBe ( 0 ) ;
1665
+
1666
+ startInput . value = 25 ;
1667
+ tickEls = getTickMarkEls ( ) ;
1668
+ expect ( tickEls . active . length ) . toBe ( 76 ) ;
1669
+ expect ( tickEls . inactive . length ) . toBe ( 25 ) ;
1670
+
1671
+ endInput . value = 75 ;
1672
+ tickEls = getTickMarkEls ( ) ;
1673
+ expect ( tickEls . active . length ) . toBe ( 51 ) ;
1674
+ expect ( tickEls . inactive . length ) . toBe ( 50 ) ;
1675
+
1676
+ startInput . value = 50 ;
1677
+ endInput . value = 50 ;
1678
+ tickEls = getTickMarkEls ( ) ;
1679
+ expect ( tickEls . active . length ) . toBe ( 1 ) ;
1680
+ expect ( tickEls . inactive . length ) . toBe ( 100 ) ;
1681
+ } ) ;
1682
+ } ) ;
1616
1683
} ) ;
1617
1684
1618
1685
const SLIDER_STYLES = [ '.mat-mdc-slider { width: 300px; }' ] ;
@@ -1917,6 +1984,20 @@ class SliderWithTickMarks {
1917
1984
@ViewChild ( MatSlider ) slider : MatSlider ;
1918
1985
}
1919
1986
1987
+ @Component ( {
1988
+ template : `
1989
+ <mat-slider [showTickMarks]="true">
1990
+ <input matSliderStartThumb>
1991
+ <input matSliderEndThumb>
1992
+ </mat-slider>
1993
+ ` ,
1994
+ styles : SLIDER_STYLES ,
1995
+ standalone : false ,
1996
+ } )
1997
+ class RangeSliderWithTickMarks {
1998
+ @ViewChild ( MatSlider ) slider : MatSlider ;
1999
+ }
2000
+
1920
2001
/** Clicks on the MatSlider at the coordinates corresponding to the given value. */
1921
2002
function setValueByClick (
1922
2003
slider : MatSlider ,
0 commit comments