slider.spec.js 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. import { createTest, createVue, triggerEvent, destroyVM } from '../util';
  2. import Slider from 'packages/slider';
  3. describe('Slider', () => {
  4. let vm;
  5. afterEach(() => {
  6. destroyVM(vm);
  7. });
  8. it('create', () => {
  9. vm = createTest(Slider);
  10. expect(vm.value).to.equal(0);
  11. });
  12. it('should not exceed min and max', done => {
  13. vm = createVue({
  14. template: `
  15. <div>
  16. <el-slider v-model="value" :min="50">
  17. </el-slider>
  18. </div>
  19. `,
  20. data() {
  21. return {
  22. value: 50
  23. };
  24. }
  25. }, true);
  26. setTimeout(() => {
  27. vm.value = 40;
  28. vm.$nextTick(() => {
  29. expect(vm.value).to.equal(50);
  30. vm.value = 120;
  31. vm.$nextTick(() => {
  32. expect(vm.value).to.equal(100);
  33. done();
  34. });
  35. });
  36. }, 10);
  37. });
  38. it('show tooltip', () => {
  39. vm = createVue({
  40. template: `
  41. <div>
  42. <el-slider v-model="value">
  43. </el-slider>
  44. </div>
  45. `,
  46. data() {
  47. return {
  48. value: 0
  49. };
  50. }
  51. }, true);
  52. const slider = vm.$children[0].$children[0];
  53. slider.handleMouseEnter();
  54. expect(slider.$refs.tooltip.showPopper).to.true;
  55. slider.handleMouseLeave();
  56. expect(slider.$refs.tooltip.showPopper).to.false;
  57. });
  58. it('hide tooltip', () => {
  59. vm = createVue({
  60. template: `
  61. <div>
  62. <el-slider v-model="value" :show-tooltip="false">
  63. </el-slider>
  64. </div>
  65. `,
  66. data() {
  67. return {
  68. value: 0
  69. };
  70. }
  71. }, true);
  72. const slider = vm.$children[0].$children[0];
  73. expect(slider.$refs.tooltip.disabled).to.true;
  74. });
  75. it('format tooltip', () => {
  76. vm = createVue({
  77. template: `
  78. <div>
  79. <el-slider v-model="value" :format-tooltip="formatTooltip">
  80. </el-slider>
  81. </div>
  82. `,
  83. data() {
  84. return {
  85. value: 0
  86. };
  87. },
  88. methods: {
  89. formatTooltip(val) {
  90. return '$' + val;
  91. }
  92. }
  93. }, true);
  94. const slider = vm.$children[0].$children[0];
  95. expect(slider.formatTooltip).to.function;
  96. vm.$nextTick(() => {
  97. expect(slider.formatValue).to.equal('$0');
  98. });
  99. });
  100. it('drag', done => {
  101. vm = createVue({
  102. template: `
  103. <div>
  104. <el-slider v-model="value" :vertical="vertical"></el-slider>
  105. </div>
  106. `,
  107. data() {
  108. return {
  109. vertical: false,
  110. value: 0
  111. };
  112. }
  113. }, true);
  114. const slider = vm.$children[0].$children[0];
  115. slider.onButtonDown({ clientX: 0, preventDefault() {} });
  116. slider.onDragging({ clientX: 100 });
  117. slider.onDragEnd();
  118. setTimeout(() => {
  119. expect(vm.value > 0).to.true;
  120. vm.vertical = true;
  121. vm.value = 0;
  122. vm.$nextTick(() => {
  123. expect(vm.value === 0).to.true;
  124. slider.onButtonDown({ clientY: 0, preventDefault() {} });
  125. slider.onDragging({ clientY: -100 });
  126. slider.onDragEnd();
  127. setTimeout(() => {
  128. expect(vm.value > 0).to.true;
  129. done();
  130. }, 10);
  131. });
  132. }, 10);
  133. });
  134. it('accessibility', done => {
  135. vm = createVue({
  136. template: `
  137. <div>
  138. <el-slider v-model="value"></el-slider>
  139. </div>
  140. `,
  141. data() {
  142. return {
  143. value: 0.1
  144. };
  145. }
  146. }, true);
  147. const slider = vm.$children[0].$children[0];
  148. slider.onRightKeyDown();
  149. setTimeout(() => {
  150. expect(vm.value).to.equal(1);
  151. slider.onLeftKeyDown();
  152. setTimeout(() => {
  153. expect(vm.value).to.equal(0);
  154. done();
  155. }, 10);
  156. }, 10);
  157. });
  158. it('step', done => {
  159. vm = createVue({
  160. template: `
  161. <div style="width: 200px;">
  162. <el-slider v-model="value" :min="0" :max="1" :step="0.1"></el-slider>
  163. </div>
  164. `,
  165. data() {
  166. return {
  167. value: 0
  168. };
  169. }
  170. }, true);
  171. const slider = vm.$children[0].$children[0];
  172. slider.onButtonDown({ clientX: 0, preventDefault() {} });
  173. slider.onDragging({ clientX: 100 });
  174. slider.onDragEnd();
  175. setTimeout(() => {
  176. expect(vm.value > 0.4 && vm.value < 0.6).to.true;
  177. done();
  178. }, 10);
  179. });
  180. it('click', done => {
  181. vm = createVue({
  182. template: `
  183. <div>
  184. <el-slider v-model="value"></el-slider>
  185. </div>
  186. `,
  187. data() {
  188. return {
  189. value: 0
  190. };
  191. }
  192. }, true);
  193. const slider = vm.$children[0];
  194. setTimeout(() => {
  195. slider.onSliderClick({ clientX: 100 });
  196. setTimeout(() => {
  197. expect(vm.value > 0).to.true;
  198. done();
  199. }, 10);
  200. }, 10);
  201. });
  202. it('change event', done => {
  203. vm = createVue({
  204. template: `
  205. <div>
  206. <el-slider v-model="value" @change="onChange">
  207. </el-slider>
  208. </div>
  209. `,
  210. data() {
  211. return {
  212. data: 0,
  213. value: 0
  214. };
  215. },
  216. methods: {
  217. onChange(val) {
  218. this.data = val;
  219. }
  220. }
  221. }, true);
  222. const slider = vm.$children[0];
  223. vm.value = 10;
  224. setTimeout(() => {
  225. expect(vm.data).to.equal(0);
  226. slider.onSliderClick({ clientX: 100 });
  227. setTimeout(() => {
  228. expect(vm.data > 0).to.true;
  229. done();
  230. }, 10);
  231. }, 10);
  232. });
  233. it('disabled', done => {
  234. vm = createVue({
  235. template: `
  236. <div>
  237. <el-slider v-model="value" disabled></el-slider>
  238. </div>
  239. `,
  240. data() {
  241. return {
  242. value: 0
  243. };
  244. }
  245. }, true);
  246. const slider = vm.$children[0].$children[0];
  247. slider.onButtonDown({ clientX: 0 });
  248. slider.onDragging({ clientX: 100 });
  249. slider.onDragEnd();
  250. setTimeout(() => {
  251. expect(vm.value).to.equal(0);
  252. done();
  253. }, 10);
  254. });
  255. it('show input', done => {
  256. vm = createVue({
  257. template: `
  258. <div>
  259. <el-slider v-model="value" show-input></el-slider>
  260. </div>
  261. `,
  262. data() {
  263. return {
  264. value: 0
  265. };
  266. }
  267. }, true);
  268. setTimeout(() => {
  269. triggerEvent(vm.$el.querySelector('.el-input-number'), 'keyup');
  270. const inputNumber = vm.$el.querySelector('.el-input-number').__vue__;
  271. inputNumber.setCurrentValue(40);
  272. setTimeout(() => {
  273. expect(vm.value).to.equal(40);
  274. done();
  275. }, 10);
  276. }, 10);
  277. });
  278. it('show stops', () => {
  279. vm = createTest(Slider, {
  280. showStops: true,
  281. step: 10
  282. }, true);
  283. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  284. expect(stops.length).to.equal(9);
  285. });
  286. it('vertical mode', done => {
  287. vm = createVue({
  288. template: `
  289. <div>
  290. <el-slider vertical v-model="value" height="200px"></el-slider>
  291. </div>
  292. `,
  293. data() {
  294. return {
  295. value: 0
  296. };
  297. }
  298. }, true);
  299. const slider = vm.$children[0];
  300. setTimeout(() => {
  301. slider.onSliderClick({ clientY: 100 });
  302. setTimeout(() => {
  303. expect(vm.value > 0).to.true;
  304. done();
  305. }, 10);
  306. }, 10);
  307. });
  308. describe('range', () => {
  309. it('basic ranged slider', () => {
  310. vm = createVue({
  311. template: `
  312. <div>
  313. <el-slider v-model="value" range></el-slider>
  314. </div>
  315. `,
  316. data() {
  317. return {
  318. value: [10, 20]
  319. };
  320. }
  321. }, true);
  322. const buttons = vm.$children[0].$children;
  323. expect(buttons.length).to.equal(2);
  324. });
  325. it('should not exceed min and max', done => {
  326. vm = createVue({
  327. template: `
  328. <div>
  329. <el-slider v-model="value" range :min="50">
  330. </el-slider>
  331. </div>
  332. `,
  333. data() {
  334. return {
  335. value: [50, 60]
  336. };
  337. }
  338. }, true);
  339. setTimeout(() => {
  340. vm.value = [40, 60];
  341. setTimeout(() => {
  342. expect(vm.value).to.deep.equal([50, 60]);
  343. vm.value = [50, 120];
  344. setTimeout(() => {
  345. expect(vm.value).to.deep.equal([50, 100]);
  346. done();
  347. }, 10);
  348. }, 10);
  349. }, 10);
  350. });
  351. it('click', done => {
  352. vm = createVue({
  353. template: `
  354. <div style="width: 200px;">
  355. <el-slider range v-model="value"></el-slider>
  356. </div>
  357. `,
  358. data() {
  359. return {
  360. value: [0, 100]
  361. };
  362. }
  363. }, true);
  364. const slider = vm.$children[0];
  365. setTimeout(() => {
  366. slider.onSliderClick({ clientX: 100 });
  367. setTimeout(() => {
  368. expect(vm.value[0] > 0).to.true;
  369. expect(vm.value[1]).to.equal(100);
  370. done();
  371. }, 10);
  372. }, 10);
  373. });
  374. it('responsive to dynamic min and max', done => {
  375. vm = createVue({
  376. template: `
  377. <div>
  378. <el-slider v-model="value" range :min="min" :max="max">
  379. </el-slider>
  380. </div>
  381. `,
  382. data() {
  383. return {
  384. min: 0,
  385. max: 100,
  386. value: [50, 80]
  387. };
  388. }
  389. }, true);
  390. setTimeout(() => {
  391. vm.min = 60;
  392. setTimeout(() => {
  393. expect(vm.value).to.deep.equal([60, 80]);
  394. vm.min = 30;
  395. vm.max = 40;
  396. setTimeout(() => {
  397. expect(vm.value).to.deep.equal([40, 40]);
  398. done();
  399. }, 10);
  400. }, 10);
  401. }, 10);
  402. });
  403. it('show stops', done => {
  404. vm = createVue({
  405. template: `
  406. <div>
  407. <el-slider
  408. v-model="value"
  409. range
  410. :step="10"
  411. show-stops></el-slider>
  412. </div>
  413. `,
  414. data() {
  415. return {
  416. value: [30, 60]
  417. };
  418. }
  419. }, true);
  420. setTimeout(() => {
  421. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  422. expect(stops.length).to.equal(5);
  423. done();
  424. }, 10);
  425. });
  426. });
  427. });