slider.spec.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. describe('slider', () => {
  2. let cyWin;
  3. before(() => {
  4. cy.visit('http://127.0.0.1:6006/iframe.html?id=slider--controlled-slider-demo&args=&viewMode=story', {
  5. onBeforeLoad(win) {
  6. cyWin = win;
  7. },
  8. });
  9. });
  10. beforeEach(() => {
  11. cy.stub(cyWin.console, 'log').as('consoleLog');
  12. });
  13. // afterEach(() => {
  14. // cy.reload();
  15. // });
  16. it('controlled slider', () => {
  17. const parentSelector = '[data-cy=horizontalNoChangeSlider]';
  18. const sliderTrackSelector = `${parentSelector} .semi-slider-rail`;
  19. const sliderHandleSelector = `${parentSelector} .semi-slider-handle`;
  20. // test track click
  21. let handleInitialPos;
  22. cy.get(sliderHandleSelector).then(($handle) => {
  23. handleInitialPos = $handle.position();
  24. });
  25. cy.get(sliderTrackSelector).trigger('click', 'right');
  26. cy.get('@consoleLog').should('be.calledWith', 'value改变了100');
  27. cy.get(sliderHandleSelector).should(($button) => {
  28. expect($button.position()).deep.equal(handleInitialPos);
  29. });
  30. // test knob slide
  31. cy.get(sliderHandleSelector)
  32. .trigger('mousedown')
  33. .trigger('mousemove', { pageX: 600, pageY:0 })
  34. .trigger('mouseup', { force: true });
  35. cy.get(sliderHandleSelector).should(($button) => {
  36. expect($button.position()).deep.equal(handleInitialPos);
  37. });
  38. });
  39. it('controlled slider with onChange', () => {
  40. const parentSelector = `[data-cy=horizontalOnChangeSlider]`;
  41. const sliderTrackSelector = `${parentSelector} .semi-slider-rail`;
  42. const sliderHandleSelector = `${parentSelector} .semi-slider-handle`;
  43. // test track click
  44. cy.get(sliderTrackSelector).trigger('click', 'right');
  45. cy.get('@consoleLog').should('be.calledWith', 'value改变了100');
  46. cy.get(sliderHandleSelector).should('have.css', 'left', '774px');
  47. // test knob slide (pageX 300 = 32%)
  48. cy.get(sliderHandleSelector)
  49. .trigger('mousedown')
  50. .trigger('mousemove', { pageX: 300, pageY:0 })
  51. .trigger('mouseup', { force: true });
  52. // left 32% = 247.68px;
  53. // cy.get(sliderHandleSelector).should('have.css', 'left', '247.68px');
  54. cy.window().then(window => {
  55. const style = window.getComputedStyle(window.document.querySelector(sliderHandleSelector));
  56. expect(Math.ceil(parseFloat(style.left))).eq(248);
  57. });
  58. });
  59. it('controlled range slider', () => {
  60. const parentSelector = `[data-cy=horizontalNoChangeRangeSlider]`;
  61. const sliderTrackSelector = `${parentSelector} .semi-slider-rail`;
  62. const sliderHandleSelector = `${parentSelector} .semi-slider-handle`;
  63. let leftKnobPos, rightKnobPos;
  64. cy.get(sliderHandleSelector).then((handles) => {
  65. leftKnobPos = handles.eq(0).position();
  66. rightKnobPos = handles.eq(1).position();
  67. });
  68. // test track right click
  69. cy.get(sliderTrackSelector).trigger('click', 'right');
  70. cy.get('@consoleLog').should('be.calledWith', 'value改变了10,100');
  71. // test track left click
  72. cy.get(sliderTrackSelector).trigger('click', 'left');
  73. cy.get('@consoleLog').should('be.calledWith', 'value改变了0,30');
  74. // check final knob position
  75. cy.get(sliderHandleSelector).should((handles) => {
  76. expect(handles.eq(0).position()).deep.equal(leftKnobPos);
  77. expect(handles.eq(1).position()).deep.equal(rightKnobPos);
  78. });
  79. // test left knob slide
  80. cy.get(sliderHandleSelector).eq(0)
  81. .trigger('mousedown')
  82. .trigger('mousemove', { pageX: 100, pageY:0 })
  83. .trigger('mouseup', { force: true });
  84. // test right knob slide
  85. cy.get(sliderHandleSelector).eq(1)
  86. .trigger('mousedown')
  87. .trigger('mousemove', { pageX: 600, pageY:0 })
  88. .trigger('mouseup', { force: true });
  89. cy.get(sliderHandleSelector).should((handles) => {
  90. expect(handles.eq(0).position()).deep.equal(leftKnobPos);
  91. expect(handles.eq(1).position()).deep.equal(rightKnobPos);
  92. });
  93. });
  94. it('controlled vertical slider', () => {
  95. const parentSelector = '[data-cy=horizontalNoChangeVerticalSlider]';
  96. const sliderTrackSelector = `${parentSelector} .semi-slider-rail`;
  97. const sliderHandleSelector = `${parentSelector} .semi-slider-handle`;
  98. let handleInitialPos;
  99. cy.get(sliderHandleSelector).then(($handle) => {
  100. handleInitialPos = $handle.position();
  101. });
  102. // test track click
  103. cy.get(sliderTrackSelector).trigger('click', 'bottom');
  104. cy.get('@consoleLog').should('be.calledWith', 'value改变了100');
  105. cy.get(sliderHandleSelector).should(($button) => {
  106. expect($button.position()).deep.equal(handleInitialPos);
  107. });
  108. // test knob slide
  109. cy.get(sliderHandleSelector)
  110. .trigger('mousedown')
  111. .trigger('mousemove', { pageX: 0, pageY:600 })
  112. .trigger('mouseup', { force: true });
  113. cy.get(sliderHandleSelector).should(($button) => {
  114. expect($button.position()).deep.equal(handleInitialPos);
  115. });
  116. });
  117. it('keyboard', () => {
  118. cy.visit('http://127.0.0.1:6006/iframe.html?id=slider--horizontal-slider&args=&viewMode=story');
  119. cy.get('.semi-slider-handle').eq(0).click();
  120. // test keyboard event: upArrow
  121. cy.get('.semi-slider-handle').eq(0).type('{upArrow}');
  122. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '1');
  123. // test keyboard event: rightArrow
  124. cy.get('.semi-slider-handle').eq(0).type('{rightArrow}');
  125. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '2');
  126. // test keyboard event: downArrow
  127. cy.get('.semi-slider-handle').eq(0).type('{downArrow}');
  128. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '1');
  129. // test keyboard event: leftArrow
  130. cy.get('.semi-slider-handle').eq(0).type('{leftArrow}');
  131. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '0');
  132. // test keyboard event: pageup
  133. cy.get('.semi-slider-handle').eq(0).type('{pageup}');
  134. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '10');
  135. // test keyboard event: pagedown
  136. cy.get('.semi-slider-handle').eq(0).type('{pagedown}');
  137. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '0');
  138. // test keyboard event: End
  139. cy.get('.semi-slider-handle').eq(0).type('{end}');
  140. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '100');
  141. // test keyboard event: Home
  142. cy.get('.semi-slider-handle').eq(0).type('{home}');
  143. cy.get('.semi-slider-handle').eq(0).should('have.attr', 'aria-valuenow', '0');
  144. // test keyboard event: tab
  145. cy.get('.semi-slider-handle').eq(0).tab();
  146. cy.get('.semi-slider-handle').eq(1).should('be.focused');
  147. });
  148. it('range', () => {
  149. cy.visit('http://127.0.0.1:6006/iframe.html?id=slider--horizontal-slider&args=&viewMode=story');
  150. // click range slider right dot
  151. cy.get('.semi-slider-handle').eq(2).click();
  152. cy.get('.semi-slider-handle').eq(2).type('{pageup}').type('{pageup}').type('{pageup}').type('{pageup}');
  153. cy.get('.semi-slider-handle').eq(2).should('have.attr', 'aria-valuenow', '60');
  154. // The value of the left slider cannot exceed the value of the right slider
  155. cy.get('.semi-slider-handle').eq(2).type('{pageup}');
  156. cy.get('.semi-slider-handle').eq(2).should('have.attr', 'aria-valuenow', '60');
  157. cy.get('.semi-slider-handle').eq(2).type('{rightArrow}');
  158. cy.get('.semi-slider-handle').eq(2).should('have.attr', 'aria-valuenow', '60');
  159. cy.get('.semi-slider-handle').eq(2).type('{End}');
  160. cy.get('.semi-slider-handle').eq(2).should('have.attr', 'aria-valuenow', '60');
  161. // The value of the right slider cannot be lower than the value of the left slider
  162. cy.get('.semi-slider-handle').eq(2).tab();
  163. cy.get('.semi-slider-handle').eq(3).type('{pagedown}');
  164. cy.get('.semi-slider-handle').eq(3).should('have.attr', 'aria-valuenow', '60');
  165. cy.get('.semi-slider-handle').eq(3).type('{leftArrow}');
  166. cy.get('.semi-slider-handle').eq(3).should('have.attr', 'aria-valuenow', '60');
  167. cy.get('.semi-slider-handle').eq(3).type('{Home}');
  168. cy.get('.semi-slider-handle').eq(3).should('have.attr', 'aria-valuenow', '60');
  169. cy.get('.semi-slider-handle').eq(3).type('{pageup}');
  170. cy.get('.semi-slider-handle').eq(3).should('have.attr', 'aria-valuenow', '70');
  171. cy.get('.semi-slider-handle').eq(3).type('{End}');
  172. cy.get('.semi-slider-handle').eq(3).should('have.attr', 'aria-valuenow', '100');
  173. cy.get('.semi-slider-handle').eq(2).click();
  174. cy.get('.semi-slider-handle').eq(2).type('{pagedown}');
  175. cy.get('.semi-slider-handle').eq(2).should('have.attr', 'aria-valuenow', '50');
  176. cy.get('.semi-slider-handle').eq(2).type('{Home}');
  177. cy.get('.semi-slider-handle').eq(2).should('have.attr', 'aria-valuenow', '0');
  178. });
  179. });