slider.spec.js 11 KB

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