time-picker.spec.js 9.5 KB

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