slider.spec.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  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"></el-slider>
  105. </div>
  106. `,
  107. data() {
  108. return {
  109. value: 0
  110. };
  111. }
  112. }, true);
  113. const slider = vm.$children[0].$children[0];
  114. slider.onButtonDown({ clientX: 0, preventDefault() {} });
  115. slider.onDragging({ clientX: 100 });
  116. slider.onDragEnd();
  117. setTimeout(() => {
  118. expect(vm.value > 0).to.true;
  119. done();
  120. }, 10);
  121. });
  122. it('step', done => {
  123. vm = createVue({
  124. template: `
  125. <div style="width: 200px;">
  126. <el-slider v-model="value" :min="0" :max="1" :step="0.1"></el-slider>
  127. </div>
  128. `,
  129. data() {
  130. return {
  131. value: 0
  132. };
  133. }
  134. }, true);
  135. const slider = vm.$children[0].$children[0];
  136. slider.onButtonDown({ clientX: 0, preventDefault() {} });
  137. slider.onDragging({ clientX: 100 });
  138. slider.onDragEnd();
  139. setTimeout(() => {
  140. expect(vm.value > 0.4 && vm.value < 0.6).to.true;
  141. done();
  142. }, 10);
  143. });
  144. it('click', done => {
  145. vm = createVue({
  146. template: `
  147. <div>
  148. <el-slider v-model="value"></el-slider>
  149. </div>
  150. `,
  151. data() {
  152. return {
  153. value: 0
  154. };
  155. }
  156. }, true);
  157. const slider = vm.$children[0];
  158. setTimeout(() => {
  159. slider.onSliderClick({ clientX: 100 });
  160. setTimeout(() => {
  161. expect(vm.value > 0).to.true;
  162. done();
  163. }, 10);
  164. }, 10);
  165. });
  166. it('change event', done => {
  167. vm = createVue({
  168. template: `
  169. <div>
  170. <el-slider v-model="value" @change="onChange">
  171. </el-slider>
  172. </div>
  173. `,
  174. data() {
  175. return {
  176. data: 0,
  177. value: 0
  178. };
  179. },
  180. methods: {
  181. onChange(val) {
  182. this.data = val;
  183. }
  184. }
  185. }, true);
  186. const slider = vm.$children[0];
  187. vm.value = 10;
  188. setTimeout(() => {
  189. expect(vm.data).to.equal(0);
  190. slider.onSliderClick({ clientX: 100 });
  191. setTimeout(() => {
  192. expect(vm.data > 0).to.true;
  193. done();
  194. }, 10);
  195. }, 10);
  196. });
  197. it('disabled', done => {
  198. vm = createVue({
  199. template: `
  200. <div>
  201. <el-slider v-model="value" disabled></el-slider>
  202. </div>
  203. `,
  204. data() {
  205. return {
  206. value: 0
  207. };
  208. }
  209. }, true);
  210. const slider = vm.$children[0].$children[0];
  211. slider.onButtonDown({ clientX: 0 });
  212. slider.onDragging({ clientX: 100 });
  213. slider.onDragEnd();
  214. setTimeout(() => {
  215. expect(vm.value).to.equal(0);
  216. done();
  217. }, 10);
  218. });
  219. it('show input', done => {
  220. vm = createVue({
  221. template: `
  222. <div>
  223. <el-slider v-model="value" show-input></el-slider>
  224. </div>
  225. `,
  226. data() {
  227. return {
  228. value: 0
  229. };
  230. }
  231. }, true);
  232. setTimeout(() => {
  233. triggerEvent(vm.$el.querySelector('.el-input-number'), 'keyup');
  234. const inputNumber = vm.$el.querySelector('.el-input-number').__vue__;
  235. inputNumber.setCurrentValue(40);
  236. setTimeout(() => {
  237. expect(vm.value).to.equal(40);
  238. done();
  239. }, 10);
  240. }, 10);
  241. });
  242. it('show stops', () => {
  243. vm = createTest(Slider, {
  244. showStops: true,
  245. step: 10
  246. }, true);
  247. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  248. expect(stops.length).to.equal(9);
  249. });
  250. it('vertical mode', done => {
  251. vm = createVue({
  252. template: `
  253. <div>
  254. <el-slider vertical v-model="value" height="200px"></el-slider>
  255. </div>
  256. `,
  257. data() {
  258. return {
  259. value: 0
  260. };
  261. }
  262. }, true);
  263. const slider = vm.$children[0];
  264. setTimeout(() => {
  265. slider.onSliderClick({ clientY: 100 });
  266. setTimeout(() => {
  267. expect(vm.value > 0).to.true;
  268. done();
  269. }, 10);
  270. }, 10);
  271. });
  272. describe('range', () => {
  273. it('basic ranged slider', () => {
  274. vm = createVue({
  275. template: `
  276. <div>
  277. <el-slider v-model="value" range></el-slider>
  278. </div>
  279. `,
  280. data() {
  281. return {
  282. value: [10, 20]
  283. };
  284. }
  285. }, true);
  286. const buttons = vm.$children[0].$children;
  287. expect(buttons.length).to.equal(2);
  288. });
  289. it('should not exceed min and max', done => {
  290. vm = createVue({
  291. template: `
  292. <div>
  293. <el-slider v-model="value" range :min="50">
  294. </el-slider>
  295. </div>
  296. `,
  297. data() {
  298. return {
  299. value: [50, 60]
  300. };
  301. }
  302. }, true);
  303. setTimeout(() => {
  304. vm.value = [40, 60];
  305. setTimeout(() => {
  306. expect(vm.value).to.deep.equal([50, 60]);
  307. vm.value = [50, 120];
  308. setTimeout(() => {
  309. expect(vm.value).to.deep.equal([50, 100]);
  310. done();
  311. }, 10);
  312. }, 10);
  313. }, 10);
  314. });
  315. it('click', done => {
  316. vm = createVue({
  317. template: `
  318. <div style="width: 200px;">
  319. <el-slider range v-model="value"></el-slider>
  320. </div>
  321. `,
  322. data() {
  323. return {
  324. value: [0, 100]
  325. };
  326. }
  327. }, true);
  328. const slider = vm.$children[0];
  329. setTimeout(() => {
  330. slider.onSliderClick({ clientX: 100 });
  331. setTimeout(() => {
  332. expect(vm.value[0] > 0).to.true;
  333. expect(vm.value[1]).to.equal(100);
  334. done();
  335. }, 10);
  336. }, 10);
  337. });
  338. it('responsive to dynamic min and max', done => {
  339. vm = createVue({
  340. template: `
  341. <div>
  342. <el-slider v-model="value" range :min="min" :max="max">
  343. </el-slider>
  344. </div>
  345. `,
  346. data() {
  347. return {
  348. min: 0,
  349. max: 100,
  350. value: [50, 80]
  351. };
  352. }
  353. }, true);
  354. setTimeout(() => {
  355. vm.min = 60;
  356. setTimeout(() => {
  357. expect(vm.value).to.deep.equal([60, 80]);
  358. vm.min = 30;
  359. vm.max = 40;
  360. setTimeout(() => {
  361. expect(vm.value).to.deep.equal([40, 40]);
  362. done();
  363. }, 10);
  364. }, 10);
  365. }, 10);
  366. });
  367. it('show stops', done => {
  368. vm = createVue({
  369. template: `
  370. <div>
  371. <el-slider
  372. v-model="value"
  373. range
  374. :step="10"
  375. show-stops></el-slider>
  376. </div>
  377. `,
  378. data() {
  379. return {
  380. value: [30, 60]
  381. };
  382. }
  383. }, true);
  384. setTimeout(() => {
  385. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  386. expect(stops.length).to.equal(5);
  387. done();
  388. }, 10);
  389. });
  390. });
  391. });