time-picker.spec.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  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: '18:30:00 - 20:30: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([18, 19, 20]);
  187. done();
  188. }, DELAY);
  189. });
  190. it('event focus and blur', done => {
  191. vm = createVue({
  192. template: `
  193. <el-date-picker
  194. type="date"
  195. placeholder="选择日期"
  196. ref="picker">
  197. </el-date-picker>
  198. `
  199. }, true);
  200. const spyFocus = sinon.spy();
  201. const spyBlur = sinon.spy();
  202. vm.$refs.picker.$on('focus', spyFocus);
  203. vm.$refs.picker.$on('blur', spyBlur);
  204. vm.$el.querySelector('input').focus();
  205. vm.$nextTick(_ => {
  206. expect(spyFocus.calledOnce).to.be.true;
  207. vm.$refs.picker.pickerVisible = false;
  208. vm.$nextTick(_ => {
  209. expect(spyBlur.calledOnce).to.be.true;
  210. done();
  211. });
  212. });
  213. });
  214. it('focus', done => {
  215. vm = createVue({
  216. template: `
  217. <el-date-picker
  218. type="date"
  219. placeholder="选择日期"
  220. ref="picker">
  221. </el-date-picker>
  222. `
  223. }, true);
  224. const spy = sinon.spy();
  225. vm.$refs.picker.$on('focus', spy);
  226. vm.$refs.picker.focus();
  227. vm.$nextTick(_ => {
  228. expect(spy.calledOnce).to.be.true;
  229. done();
  230. });
  231. });
  232. });
  233. describe('TimePicker(range)', () => {
  234. let vm;
  235. afterEach(() => destroyVM(vm));
  236. it('create', done => {
  237. vm = createTest(TimePicker, {
  238. isRange: true,
  239. value: [new Date(2016, 9, 10, 18, 40), new Date(2016, 9, 10, 19, 40)]
  240. }, true);
  241. vm.$el.querySelector('input').click();
  242. setTimeout(_ => {
  243. expect(vm.picker.$el.querySelectorAll('.el-time-range-picker__cell')).to.length(2);
  244. expect(vm.picker.minDate.getTime()).to.equal(new Date(2016, 9, 10, 18, 40).getTime());
  245. expect(vm.picker.maxDate.getTime()).to.equal(new Date(2016, 9, 10, 19, 40).getTime());
  246. done();
  247. }, DELAY);
  248. });
  249. it('default value', done => {
  250. const defaultValue = [new Date(2000, 9, 1, 10, 0, 0), new Date(2000, 9, 1, 11, 0, 0)];
  251. vm = createVue({
  252. template: '<el-time-picker ref="compo" is-range v-model="value" :default-value="defaultValue"></el-time-picker>',
  253. data() {
  254. return {
  255. value: '',
  256. defaultValue
  257. };
  258. }
  259. }, true);
  260. const timePicker = vm.$refs.compo;
  261. timePicker.$el.querySelector('input').click();
  262. setTimeout(_ => {
  263. expect(timePicker.picker.minDate.getTime()).to.equal(defaultValue[0].getTime());
  264. expect(timePicker.picker.maxDate.getTime()).to.equal(defaultValue[1].getTime());
  265. done();
  266. }, DELAY);
  267. });
  268. it('cancel button', done => {
  269. vm = createVue({
  270. template: '<el-time-picker ref="compo" is-range v-model="value"></el-time-picker>',
  271. data() {
  272. return {
  273. value: ''
  274. };
  275. }
  276. }, true);
  277. const timePicker = vm.$refs.compo;
  278. timePicker.$el.querySelector('input').click();
  279. setTimeout(_ => {
  280. timePicker.picker.$el.querySelector('.cancel').click();
  281. setTimeout(_ => {
  282. expect(timePicker.picker.visible).to.false;
  283. expect(vm.value).to.equal('');
  284. done();
  285. }, DELAY);
  286. }, DELAY);
  287. });
  288. });