time-picker.spec.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. import { createTest, destroyVM, createVue } from '../util';
  2. import TimePicker from 'packages/time-picker';
  3. import Vue from 'vue';
  4. describe('TimePicker', () => {
  5. let vm;
  6. afterEach(() => {
  7. destroyVM(vm);
  8. });
  9. it('create', () => {
  10. vm = createTest(TimePicker, {
  11. placeholder: 'test',
  12. readonly: true
  13. });
  14. expect(vm.$el.querySelector('input').getAttribute('placeholder')).to.equal('test');
  15. expect(vm.$el.querySelector('input').getAttribute('readonly')).to.ok;
  16. destroyVM(vm);
  17. });
  18. it('format', () => {
  19. vm = createTest(TimePicker, {
  20. format: 'HH-mm-ss',
  21. value: new Date(2016, 9, 10, 18, 40)
  22. });
  23. expect(vm.$el.querySelector('input').value).to.equal('18-40-00');
  24. destroyVM(vm);
  25. });
  26. it('default value', done => {
  27. vm = createTest(TimePicker, {
  28. value: new Date(2016, 9, 10, 18, 40)
  29. }, true);
  30. const input = vm.$el.querySelector('input');
  31. input.blur();
  32. input.focus();
  33. input.blur();
  34. setTimeout(_ => {
  35. const times = vm.picker.$el.querySelectorAll('.active');
  36. expect(times[0].textContent).to.equal('18');
  37. expect(times[1].textContent).to.equal('40');
  38. expect(times[2].textContent).to.equal('00');
  39. destroyVM(vm);
  40. done();
  41. }, 100);
  42. });
  43. it('select time', done => {
  44. vm = createTest(TimePicker, true);
  45. const input = vm.$el.querySelector('input');
  46. input.blur();
  47. input.focus();
  48. Vue.nextTick(_ => {
  49. const list = vm.picker.$el.querySelectorAll('.el-time-spinner__list');
  50. const hoursEl = list[0];
  51. const minutesEl = list[1];
  52. const secondsEl = list[2];
  53. const hourEl = hoursEl.querySelectorAll('.el-time-spinner__item')[4];
  54. const minuteEl = minutesEl.querySelectorAll('.el-time-spinner__item')[36];
  55. const secondEl = secondsEl.querySelectorAll('.el-time-spinner__item')[20];
  56. hourEl.click();
  57. minuteEl.click();
  58. secondEl.click();
  59. Vue.nextTick(_ => {
  60. const date = vm.picker.currentDate;
  61. expect(hourEl.classList.contains('active')).to.true;
  62. expect(minuteEl.classList.contains('active')).to.true;
  63. expect(secondEl.classList.contains('active')).to.true;
  64. expect(date.getHours()).to.equal(4);
  65. expect(date.getMinutes()).to.equal(36);
  66. expect(date.getSeconds()).to.equal(20);
  67. destroyVM(vm);
  68. done();
  69. });
  70. });
  71. });
  72. it('click cancel button', done => {
  73. vm = createTest(TimePicker, true);
  74. const input = vm.$el.querySelector('input');
  75. input.blur();
  76. input.focus();
  77. Vue.nextTick(_ => {
  78. vm.picker.$el.querySelector('.el-time-panel__btn.cancel').click();
  79. Vue.nextTick(_ => {
  80. expect(vm.picker.currentDate).to.empty;
  81. done();
  82. });
  83. });
  84. });
  85. it('click confirm button', done => {
  86. vm = createTest(TimePicker, true);
  87. const input = vm.$el.querySelector('input');
  88. input.blur();
  89. input.focus();
  90. Vue.nextTick(_ => {
  91. vm.picker.$el.querySelector('.el-time-panel__btn.confirm').click();
  92. Vue.nextTick(_ => {
  93. expect(vm.picker.currentDate).to.exist;
  94. done();
  95. });
  96. });
  97. });
  98. it('set format', done => {
  99. vm = createTest(TimePicker, {
  100. pickerOptions: {
  101. format: 'HH:mm'
  102. }
  103. }, true);
  104. const input = vm.$el.querySelector('input');
  105. input.blur();
  106. input.focus();
  107. setTimeout(_ => {
  108. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  109. destroyVM(vm);
  110. done();
  111. }, 20);
  112. });
  113. it('set format to empty', done => {
  114. vm = createTest(TimePicker, {
  115. pickerOptions: {
  116. format: ''
  117. }
  118. }, true);
  119. const input = vm.$el.querySelector('input');
  120. input.blur();
  121. input.focus();
  122. setTimeout(_ => {
  123. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  124. destroyVM(vm);
  125. done();
  126. }, 20);
  127. });
  128. it('selectableRange', done => {
  129. vm = createTest(TimePicker, {
  130. pickerOptions: {
  131. selectableRange: '18:30:00 - 20:30:00'
  132. }
  133. }, true);
  134. const input = vm.$el.querySelector('input');
  135. input.blur();
  136. input.focus();
  137. setTimeout(_ => {
  138. const list = vm.picker.$el.querySelectorAll('.el-time-spinner__list');
  139. const hoursEl = list[0];
  140. const disabledHours = [].slice
  141. .call(hoursEl.querySelectorAll('.disabled'))
  142. .map(node => Number(node.textContent));
  143. hoursEl.querySelectorAll('.disabled')[0].click();
  144. expect(disabledHours).to.not.include.members([18, 19, 20]);
  145. destroyVM(vm);
  146. done();
  147. }, 20);
  148. });
  149. it('event focus and blur', done => {
  150. vm = createVue({
  151. template: `
  152. <el-date-picker
  153. type="date"
  154. placeholder="选择日期"
  155. ref="picker">
  156. </el-date-picker>
  157. `
  158. }, true);
  159. const spyFocus = sinon.spy();
  160. const spyBlur = sinon.spy();
  161. vm.$refs.picker.$on('focus', spyFocus);
  162. vm.$refs.picker.$on('blur', spyBlur);
  163. vm.$el.querySelector('input').focus();
  164. vm.$el.querySelector('input').blur();
  165. vm.$nextTick(_ => {
  166. expect(spyFocus.calledOnce).to.be.true;
  167. expect(spyBlur.calledOnce).to.be.true;
  168. done();
  169. });
  170. });
  171. it('focus', done => {
  172. vm = createVue({
  173. template: `
  174. <el-date-picker
  175. type="date"
  176. placeholder="选择日期"
  177. ref="picker">
  178. </el-date-picker>
  179. `
  180. }, true);
  181. const spy = sinon.spy();
  182. vm.$refs.picker.$on('focus', spy);
  183. vm.$refs.picker.focus();
  184. vm.$nextTick(_ => {
  185. expect(spy.calledOnce).to.be.true;
  186. done();
  187. });
  188. });
  189. });
  190. describe('TimePicker(range)', () => {
  191. let vm;
  192. beforeEach(done => {
  193. vm = createTest(TimePicker, {
  194. isRange: true,
  195. value: [new Date(2016, 9, 10, 18, 40), new Date(2016, 9, 10, 19, 40)]
  196. }, true);
  197. const input = vm.$el.querySelector('input');
  198. input.click();
  199. setTimeout(done, 20);
  200. });
  201. afterEach(() => destroyVM(vm));
  202. it('create', () => {
  203. expect(vm.picker.$el.querySelectorAll('.el-time-range-picker__cell')).to.length(2);
  204. });
  205. it('default value', () => {
  206. expect(vm.picker.minTime.getTime()).to.equal(new Date(2016, 9, 10, 18, 40).getTime());
  207. expect(vm.picker.maxTime.getTime()).to.equal(new Date(2016, 9, 10, 19, 40).getTime());
  208. });
  209. it('minTime < maxTime', done => {
  210. const vm2 = createTest(TimePicker, {
  211. isRange: true,
  212. value: [new Date(2016, 9, 10, 23, 40), new Date(2016, 9, 10, 10, 40)]
  213. }, true);
  214. const input = vm2.$el.querySelector('input');
  215. input.click();
  216. setTimeout(() => {
  217. expect(vm2.picker.maxTime >= vm2.picker.minTime).to.true;
  218. destroyVM(vm2);
  219. done();
  220. }, 100);
  221. });
  222. it('click cancel button', done => {
  223. vm.picker.$el.querySelector('.el-time-panel__btn.cancel').click();
  224. Vue.nextTick(_ => {
  225. expect(vm.picker.currentDate).to.empty;
  226. done();
  227. });
  228. });
  229. });