time-picker.spec.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. import { createTest, destroyVM, createVue } from '../util';
  2. import TimePicker from 'packages/time-picker';
  3. const DELAY = 100;
  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. });
  17. it('format', () => {
  18. vm = createTest(TimePicker, {
  19. format: 'HH-mm-ss',
  20. value: new Date(2016, 9, 10, 18, 40)
  21. });
  22. expect(vm.$el.querySelector('input').value).to.equal('18-40-00');
  23. });
  24. it('default value', done => {
  25. vm = createTest(TimePicker, {
  26. value: new Date(2016, 9, 10, 18, 40)
  27. }, true);
  28. const input = vm.$el.querySelector('input');
  29. input.blur();
  30. input.focus();
  31. input.blur();
  32. setTimeout(_ => {
  33. const times = vm.picker.$el.querySelectorAll('.active');
  34. expect(times[0].textContent).to.equal('18');
  35. expect(times[1].textContent).to.equal('40');
  36. expect(times[2].textContent).to.equal('00');
  37. done();
  38. }, DELAY);
  39. });
  40. it('select time', done => {
  41. vm = createVue({
  42. template: '<el-time-picker ref="compo" v-model="value"></el-time-picker>',
  43. data() {
  44. return {
  45. value: ''
  46. };
  47. }
  48. }, true);
  49. const timePicker = vm.$refs.compo;
  50. const input = timePicker.$el.querySelector('input');
  51. input.blur();
  52. input.focus();
  53. setTimeout(_ => {
  54. const list = timePicker.picker.$el.querySelectorAll('.el-time-spinner__list');
  55. const hoursEl = list[0];
  56. const minutesEl = list[1];
  57. const secondsEl = list[2];
  58. const hourEl = hoursEl.querySelectorAll('.el-time-spinner__item')[4];
  59. const minuteEl = minutesEl.querySelectorAll('.el-time-spinner__item')[36];
  60. const secondEl = secondsEl.querySelectorAll('.el-time-spinner__item')[20];
  61. // click hour, minute, second one at a time.
  62. hourEl.click();
  63. vm.$nextTick(_ => {
  64. minuteEl.click();
  65. vm.$nextTick(_ => {
  66. secondEl.click();
  67. setTimeout(_ => {
  68. const date = timePicker.picker.date;
  69. expect(hourEl.classList.contains('active')).to.true;
  70. expect(minuteEl.classList.contains('active')).to.true;
  71. expect(secondEl.classList.contains('active')).to.true;
  72. expect(date.getHours()).to.equal(4);
  73. expect(date.getMinutes()).to.equal(36);
  74. expect(date.getSeconds()).to.equal(20);
  75. done();
  76. }, DELAY);
  77. });
  78. });
  79. }, DELAY);
  80. });
  81. it('click cancel button', done => {
  82. vm = createVue({
  83. template: '<el-time-picker ref="compo" v-model="value"></el-time-picker>',
  84. data() {
  85. return {
  86. value: ''
  87. };
  88. }
  89. }, true);
  90. const timePicker = vm.$refs.compo;
  91. const input = timePicker.$el.querySelector('input');
  92. input.blur();
  93. input.focus();
  94. setTimeout(_ => {
  95. timePicker.picker.$el.querySelector('.el-time-panel__btn.cancel').click();
  96. setTimeout(_ => {
  97. expect(vm.value).to.equal('');
  98. done();
  99. }, DELAY);
  100. }, DELAY);
  101. });
  102. it('click confirm button', done => {
  103. vm = createVue({
  104. template: '<el-time-picker ref="compo" v-model="value"></el-time-picker>',
  105. data() {
  106. return {
  107. value: ''
  108. };
  109. }
  110. }, true);
  111. const timePicker = vm.$refs.compo;
  112. const input = timePicker.$el.querySelector('input');
  113. input.blur();
  114. input.focus();
  115. setTimeout(_ => {
  116. timePicker.picker.$el.querySelector('.el-time-panel__btn.confirm').click();
  117. setTimeout(_ => {
  118. expect(vm.value.toISOString()).to.exist;
  119. done();
  120. }, DELAY);
  121. }, DELAY);
  122. });
  123. it('set format', done => {
  124. vm = createTest(TimePicker, {
  125. pickerOptions: {
  126. format: 'HH:mm'
  127. }
  128. }, true);
  129. const input = vm.$el.querySelector('input');
  130. input.blur();
  131. input.focus();
  132. setTimeout(_ => {
  133. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  134. done();
  135. }, 20);
  136. });
  137. it('set format to empty', done => {
  138. vm = createTest(TimePicker, {
  139. pickerOptions: {
  140. format: ''
  141. }
  142. }, true);
  143. const input = vm.$el.querySelector('input');
  144. input.blur();
  145. input.focus();
  146. setTimeout(_ => {
  147. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  148. done();
  149. }, DELAY);
  150. });
  151. it('selectableRange', done => {
  152. vm = createTest(TimePicker, {
  153. pickerOptions: {
  154. selectableRange: '18:30:00 - 20:30:00'
  155. }
  156. }, true);
  157. const input = vm.$el.querySelector('input');
  158. input.blur();
  159. input.focus();
  160. setTimeout(_ => {
  161. const list = vm.picker.$el.querySelectorAll('.el-time-spinner__list');
  162. const hoursEl = list[0];
  163. const disabledHours = [].slice
  164. .call(hoursEl.querySelectorAll('.disabled'))
  165. .map(node => Number(node.textContent));
  166. hoursEl.querySelectorAll('.disabled')[0].click();
  167. expect(disabledHours).to.not.include.members([18, 19, 20]);
  168. done();
  169. }, DELAY);
  170. });
  171. it('event focus and blur', 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 spyFocus = sinon.spy();
  182. const spyBlur = sinon.spy();
  183. vm.$refs.picker.$on('focus', spyFocus);
  184. vm.$refs.picker.$on('blur', spyBlur);
  185. vm.$el.querySelector('input').focus();
  186. vm.$el.querySelector('input').blur();
  187. vm.$nextTick(_ => {
  188. expect(spyFocus.calledOnce).to.be.true;
  189. expect(spyBlur.calledOnce).to.be.true;
  190. done();
  191. });
  192. });
  193. it('focus', done => {
  194. vm = createVue({
  195. template: `
  196. <el-date-picker
  197. type="date"
  198. placeholder="选择日期"
  199. ref="picker">
  200. </el-date-picker>
  201. `
  202. }, true);
  203. const spy = sinon.spy();
  204. vm.$refs.picker.$on('focus', spy);
  205. vm.$refs.picker.focus();
  206. vm.$nextTick(_ => {
  207. expect(spy.calledOnce).to.be.true;
  208. done();
  209. });
  210. });
  211. });
  212. describe('TimePicker(range)', () => {
  213. let vm;
  214. afterEach(() => destroyVM(vm));
  215. it('create', done => {
  216. vm = createTest(TimePicker, {
  217. isRange: true,
  218. value: [new Date(2016, 9, 10, 18, 40), new Date(2016, 9, 10, 19, 40)]
  219. }, true);
  220. vm.$el.querySelector('input').click();
  221. setTimeout(_ => {
  222. expect(vm.picker.$el.querySelectorAll('.el-time-range-picker__cell')).to.length(2);
  223. expect(vm.picker.minDate.getTime()).to.equal(new Date(2016, 9, 10, 18, 40).getTime());
  224. expect(vm.picker.maxDate.getTime()).to.equal(new Date(2016, 9, 10, 19, 40).getTime());
  225. done();
  226. }, DELAY);
  227. });
  228. it('default value', done => {
  229. const defaultValue = [new Date(2000, 9, 1, 10, 0, 0), new Date(2000, 9, 1, 11, 0, 0)];
  230. vm = createVue({
  231. template: '<el-time-picker ref="compo" is-range v-model="value" :default-value="defaultValue"></el-time-picker>',
  232. data() {
  233. return {
  234. value: '',
  235. defaultValue
  236. };
  237. }
  238. }, true);
  239. const timePicker = vm.$refs.compo;
  240. timePicker.$el.querySelector('input').click();
  241. setTimeout(_ => {
  242. expect(timePicker.picker.minDate.getTime()).to.equal(defaultValue[0].getTime());
  243. expect(timePicker.picker.maxDate.getTime()).to.equal(defaultValue[1].getTime());
  244. done();
  245. }, DELAY);
  246. });
  247. it('cancel button', done => {
  248. vm = createVue({
  249. template: '<el-time-picker ref="compo" is-range v-model="value"></el-time-picker>',
  250. data() {
  251. return {
  252. value: ''
  253. };
  254. }
  255. }, true);
  256. const timePicker = vm.$refs.compo;
  257. timePicker.$el.querySelector('input').click();
  258. setTimeout(_ => {
  259. timePicker.picker.$el.querySelector('.cancel').click();
  260. setTimeout(_ => {
  261. expect(timePicker.picker.visible).to.false;
  262. expect(vm.value).to.equal('');
  263. done();
  264. }, DELAY);
  265. }, DELAY);
  266. });
  267. });