date-picker.spec.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. import { createTest, createVue, destroyVM, triggerEvent } from '../util';
  2. import DatePicker from 'packages/date-picker';
  3. const DELAY = 10;
  4. describe('DatePicker', () => {
  5. let vm;
  6. afterEach(() => {
  7. destroyVM(vm);
  8. });
  9. it('create', () => {
  10. vm = createTest(DatePicker, {
  11. readonly: true,
  12. placeholder: '23333',
  13. format: 'HH-mm-ss'
  14. });
  15. const input = vm.$el.querySelector('input');
  16. expect(input.getAttribute('placeholder')).to.equal('23333');
  17. expect(input.getAttribute('readonly')).to.equal('readonly');
  18. });
  19. it('select date', done => {
  20. vm = createVue({
  21. template: `
  22. <el-date-picker ref="compo" v-model="value"></el-date-picker>
  23. `,
  24. data() {
  25. return { value: '' };
  26. }
  27. }, true);
  28. const input = vm.$el.querySelector('input');
  29. const date = new Date();
  30. input.blur();
  31. input.focus();
  32. setTimeout(_ => {
  33. const $el = vm.$refs.compo.picker.$el;
  34. const spans = $el.querySelectorAll('.el-date-picker__header-label');
  35. const arrowLeftElm = $el.querySelector('.el-date-picker__prev-btn.el-icon-arrow-left');
  36. const arrowRightElm = $el.querySelector('.el-date-picker__next-btn.el-icon-arrow-right');
  37. expect(spans[0].textContent).to.include(date.getFullYear());
  38. expect(spans[1].textContent).to.include(date.getMonth() + 1);
  39. $el.querySelector('.el-date-picker__prev-btn.el-icon-d-arrow-left').click();
  40. let count = 20;
  41. while (--count) {
  42. arrowLeftElm.click();
  43. }
  44. count = 18;
  45. while (--count) {
  46. arrowRightElm.click();
  47. }
  48. setTimeout(_ => {
  49. expect(spans[0].textContent).to.include(date.getFullYear() - 1);
  50. expect(spans[1].textContent).to.include(date.getMonth() - 1);
  51. $el.querySelector('td.available').click();
  52. vm.$nextTick(_ => {
  53. expect(vm.value).to.exist;
  54. });
  55. done();
  56. }, DELAY);
  57. }, DELAY);
  58. });
  59. it('clear value', done => {
  60. vm = createVue({
  61. template: `
  62. <el-date-picker v-model="value" ref="compo"></el-date-picker>
  63. `,
  64. data() {
  65. return { value: '' };
  66. }
  67. }, true);
  68. const input = vm.$el.querySelector('input');
  69. input.focus();
  70. setTimeout(_ => {
  71. const $el = vm.$refs.compo.picker.$el;
  72. $el.querySelector('td.available').click();
  73. vm.$nextTick(_ => {
  74. vm.$el.querySelector('.el-input__icon').click();
  75. setTimeout(_ => {
  76. expect(vm.value).to.empty;
  77. done();
  78. }, DELAY);
  79. });
  80. }, DELAY);
  81. });
  82. it('reset', done => {
  83. vm = createVue({
  84. template: `
  85. <el-date-picker ref="compo" v-model="value"></el-date-picker>
  86. `,
  87. data() {
  88. return { value: '' };
  89. }
  90. }, true);
  91. const input = vm.$el.querySelector('input');
  92. input.blur();
  93. input.focus();
  94. setTimeout(_ => {
  95. const $el = vm.$refs.compo.picker.$el;
  96. $el.querySelector('.el-date-picker__next-btn.el-icon-arrow-right').click();
  97. setTimeout(_ => {
  98. $el.querySelector('td.available').click();
  99. vm.$nextTick(_ => {
  100. vm.value = '';
  101. setTimeout(_ => {
  102. expect(vm.$refs.compo.picker.date.getDate()).to.equal(new Date().getDate());
  103. done();
  104. }, DELAY);
  105. });
  106. }, DELAY);
  107. }, DELAY);
  108. });
  109. describe('keydown', () => {
  110. let input;
  111. let keyDown = function(el, keyCode) {
  112. const evt = document.createEvent('Events');
  113. evt.initEvent('keydown', true, true);
  114. evt.keyCode = keyCode;
  115. el.dispatchEvent(evt);
  116. };
  117. beforeEach(done => {
  118. vm = createTest(DatePicker, true);
  119. input = vm.$el.querySelector('input');
  120. input.blur();
  121. input.focus();
  122. setTimeout(done, DELAY);
  123. });
  124. afterEach(() => destroyVM(vm));
  125. it('tab', () => {
  126. keyDown(input, 9);
  127. expect(vm.pickerVisible).to.false;
  128. });
  129. it('enter', done => {
  130. input.value = '2000-10-1';
  131. triggerEvent(input, 'change', true);
  132. setTimeout(_ => {
  133. expect(vm.pickerVisible).to.true; // 敲回车不会消失
  134. expect(vm.picker.date.getFullYear()).to.equal(2000);
  135. expect(vm.picker.date.getMonth()).to.equal(9);
  136. expect(vm.picker.date.getDate()).to.equal(1);
  137. done();
  138. }, DELAY);
  139. });
  140. it('left', () => {
  141. input.value = '2000-10-1';
  142. keyDown(input, 13);
  143. input.focus();
  144. keyDown(input, 37);
  145. expect(input.selectionStart > 0).to.true;
  146. });
  147. it('right', () => {
  148. input.value = '2000-10-1';
  149. keyDown(input, 13);
  150. input.focus();
  151. keyDown(input, 39);
  152. expect(input.selectionStart > 0).to.true;
  153. });
  154. });
  155. it('type:month', done => {
  156. vm = createTest(DatePicker, {
  157. type: 'month'
  158. }, true);
  159. const input = vm.$el.querySelector('input');
  160. input.blur();
  161. input.focus();
  162. setTimeout(_ => {
  163. expect(vm.picker.$el.querySelector('.el-month-table').style.display).to.be.empty;
  164. expect(vm.picker.$el.querySelector('.el-year-table').style.display).to.be.equal('none');
  165. vm.picker.$el.querySelector('.el-month-table a.cell').click();
  166. expect(vm.pickerVisible).to.false;
  167. done();
  168. }, DELAY);
  169. });
  170. it('type:year', done => {
  171. vm = createTest(DatePicker, {
  172. type: 'year'
  173. }, true);
  174. const input = vm.$el.querySelector('input');
  175. input.blur();
  176. input.focus();
  177. setTimeout(_ => {
  178. expect(vm.picker.$el.querySelector('.el-year-table').style.display).to.empty;
  179. expect(vm.picker.$el.querySelector('.el-month-table').style.display).to.be.equal('none');
  180. const leftBtn = vm.picker.$el.querySelector('.el-icon-d-arrow-left');
  181. const rightBtn = vm.picker.$el.querySelector('.el-icon-d-arrow-right');
  182. let count = 20;
  183. while (--count) {
  184. leftBtn.click();
  185. }
  186. count = 18;
  187. while (--count) {
  188. rightBtn.click();
  189. }
  190. vm.picker.$el.querySelector('.el-year-table a.cell').click();
  191. expect(vm.pickerVisible).to.false;
  192. done();
  193. }, DELAY);
  194. });
  195. describe('type:datetime', () => {
  196. let vm;
  197. beforeEach(done => {
  198. vm = createTest(DatePicker, {
  199. type: 'datetime'
  200. }, true);
  201. const input = vm.$el.querySelector('input');
  202. input.blur();
  203. input.focus();
  204. setTimeout(done, DELAY);
  205. });
  206. afterEach(() => destroyVM(vm));
  207. it('create', () => {
  208. expect(vm.picker.$el.querySelector('.el-time-panel')).to.ok;
  209. });
  210. it('click now button', done => {
  211. const date = new Date(1999, 10, 10, 10, 10);
  212. vm.picker.$el.querySelector('.el-picker-panel__link-btn').click();
  213. setTimeout(_ => {
  214. expect(vm.picker.date > date).to.true;
  215. done();
  216. }, DELAY);
  217. });
  218. it('click timepicker', done => {
  219. const input = vm.picker.$el.querySelectorAll('.el-date-picker__editor-wrap input')[1];
  220. triggerEvent(input, 'focus');
  221. setTimeout(_ => {
  222. expect(vm.picker.$el.querySelector('.el-time-panel')).to.have.deep.property('style.display').to.equal('');
  223. done();
  224. }, DELAY);
  225. });
  226. it('input timepicker', done => {
  227. const input = vm.picker.$el.querySelectorAll('.el-date-picker__editor-wrap input')[1];
  228. input.value = '20:30:33';
  229. triggerEvent(input, 'change', true);
  230. setTimeout(_ => {
  231. expect(vm.picker.date.getHours()).to.equal(20);
  232. expect(vm.picker.date.getMinutes()).to.equal(30);
  233. expect(vm.picker.date.getSeconds()).to.equal(33);
  234. done();
  235. }, DELAY);
  236. });
  237. it('input date', done => {
  238. const input = vm.picker.$el.querySelector('.el-date-picker__editor-wrap input');
  239. input.value = '2017-2-2';
  240. triggerEvent(input, 'change', true);
  241. setTimeout(_ => {
  242. expect(vm.picker.date.getFullYear()).to.equal(2017);
  243. expect(vm.picker.date.getMonth()).to.equal(1);
  244. expect(vm.picker.date.getDate()).to.equal(2);
  245. done();
  246. }, DELAY);
  247. });
  248. it('select time', done => {
  249. const input = vm.picker.$el.querySelectorAll('.el-date-picker__editor-wrap input')[1];
  250. input.blur();
  251. input.focus();
  252. input.blur();
  253. setTimeout(_ => {
  254. const button = vm.picker.$el.querySelector('.el-time-panel .confirm');
  255. button.click();
  256. setTimeout(_ => {
  257. expect(input.value).to.exist;
  258. done();
  259. }, DELAY);
  260. }, DELAY);
  261. });
  262. });
  263. describe('type:week', () => {
  264. let vm;
  265. beforeEach(done => {
  266. vm = createTest(DatePicker, {
  267. type: 'week'
  268. }, true);
  269. const input = vm.$el.querySelector('input');
  270. input.blur();
  271. input.focus();
  272. setTimeout(done, DELAY);
  273. });
  274. afterEach(() => destroyVM(vm));
  275. it('create', () => {
  276. expect(vm.picker.$el.querySelector('.is-week-mode')).to.be.ok;
  277. });
  278. it('click cell', done => {
  279. vm.picker.$el.querySelector('.el-date-table__row .available').click();
  280. setTimeout(_ => {
  281. expect(vm.picker.week).to.exist;
  282. done();
  283. }, DELAY);
  284. });
  285. it('click year label', () => {
  286. vm.picker.$el.querySelector('.el-date-picker__header-label').click();
  287. expect(vm.picker.currentView).to.equal('year');
  288. });
  289. it('click month label', () => {
  290. vm.picker.$el.querySelectorAll('.el-date-picker__header-label')[1].click();
  291. expect(vm.picker.currentView).to.equal('month');
  292. });
  293. it('select month', done => {
  294. vm.picker.$el.querySelectorAll('.el-date-picker__header-label')[1].click();
  295. setTimeout(_ => {
  296. vm.picker.$el.querySelector('.el-month-table .cell').click();
  297. setTimeout(_ => {
  298. expect(vm.picker.$el.querySelector('.el-date-table.is-week-mode').style.display).to.equal('');
  299. done();
  300. }, DELAY);
  301. }, DELAY);
  302. });
  303. });
  304. it('type:daterange', done => {
  305. vm = createTest(DatePicker, {
  306. type: 'daterange'
  307. }, true);
  308. const input = vm.$el.querySelector('input');
  309. input.blur();
  310. input.focus();
  311. setTimeout(_ => {
  312. const panels = vm.picker.$el.querySelectorAll('.el-date-range-picker__content');
  313. expect(Array.prototype.slice.call(panels)).to.length(2);
  314. panels[0].querySelector('td.available').click();
  315. setTimeout(_ => {
  316. panels[1].querySelector('td.available').click();
  317. const { minDate, maxDate } = vm.picker;
  318. expect(minDate).to.exist;
  319. expect(maxDate).to.exist;
  320. expect(maxDate > minDate).to.true;
  321. done();
  322. }, DELAY);
  323. }, DELAY);
  324. });
  325. describe('type:datetimerange', () => {
  326. let vm;
  327. beforeEach(done => {
  328. vm = createTest(DatePicker, {
  329. type: 'datetimerange',
  330. value: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)]
  331. }, true);
  332. const input = vm.$el.querySelector('input');
  333. input.blur();
  334. input.focus();
  335. setTimeout(done, DELAY);
  336. });
  337. afterEach(() => destroyVM(vm));
  338. it('create', () => {
  339. expect(Array.prototype.slice.call(vm.picker.$el.querySelectorAll('.el-time-panel'))).to.length(2);
  340. });
  341. it('click timepicker', done => {
  342. const input = vm.picker.$el.querySelectorAll('.el-date-range-picker__editors-wrap input')[1];
  343. input.blur();
  344. input.focus();
  345. input.blur();
  346. setTimeout(_ => {
  347. expect(vm.picker.$el.querySelector('.el-date-range-picker__time-picker-wrap .el-time-panel')).to.have.deep.property('style.display').to.equal('');
  348. done();
  349. }, DELAY);
  350. });
  351. it('click timepicker in right', done => {
  352. const input = vm.picker.$el.querySelectorAll('.el-date-range-picker__editors-wrap input')[3];
  353. input.blur();
  354. input.focus();
  355. input.blur();
  356. setTimeout(_ => {
  357. expect(vm.picker.$el.querySelectorAll('.el-date-range-picker__time-picker-wrap .el-time-panel')[1]).to.have.deep.property('style.display').to.equal('');
  358. done();
  359. }, DELAY);
  360. });
  361. it('input timepicker', done => {
  362. const input = vm.picker.$el.querySelectorAll('.el-date-range-picker__editors-wrap input')[1];
  363. input.value = '10:22:14';
  364. triggerEvent(input, 'change', true);
  365. setTimeout(_ => {
  366. expect(vm.picker.minDate.getHours()).to.equal(10);
  367. expect(vm.picker.minDate.getMinutes()).to.equal(22);
  368. expect(vm.picker.minDate.getSeconds()).to.equal(14);
  369. done();
  370. }, DELAY);
  371. });
  372. it('input timepicker in right', done => {
  373. const input = vm.picker.$el.querySelectorAll('.el-date-range-picker__editors-wrap input')[3];
  374. input.value = '10:22:14';
  375. triggerEvent(input, 'change', true);
  376. setTimeout(_ => {
  377. expect(vm.picker.maxDate.getHours()).to.equal(10);
  378. expect(vm.picker.maxDate.getMinutes()).to.equal(22);
  379. expect(vm.picker.maxDate.getSeconds()).to.equal(14);
  380. done();
  381. }, DELAY);
  382. });
  383. it('select daterange', done => {
  384. const pickers = vm.picker.$el.querySelectorAll('.el-date-range-picker__content');
  385. const leftCell = pickers[0].querySelector('td.available');
  386. const rightCell = pickers[1].querySelector('td.available');
  387. triggerEvent(leftCell, 'mousemove', true);
  388. triggerEvent(leftCell, 'click', true);
  389. setTimeout(_ => {
  390. triggerEvent(rightCell, 'mousemove', true);
  391. triggerEvent(rightCell, 'click', true);
  392. setTimeout(_ => {
  393. const { minDate, maxDate } = vm.picker;
  394. const minMonth = minDate.getMonth();
  395. const maxMonth = maxDate.getMonth();
  396. expect([1, -11]).to.include(maxMonth - minMonth); // one month
  397. done();
  398. }, DELAY);
  399. }, DELAY);
  400. });
  401. it('prev/next month button', done => {
  402. const leftBtn = vm.picker.$el.querySelector('.is-left .el-icon-arrow-left');
  403. const rightBtn = vm.picker.$el.querySelector('.is-right .el-icon-arrow-right');
  404. const left = vm.picker.$el.querySelector('.is-left .el-date-range-picker__header');
  405. const right = vm.picker.$el.querySelector('.is-right .el-date-range-picker__header');
  406. const leftText = left.textContent.match(/\d+/g);
  407. const rightText = right.textContent.match(/\d+/g);
  408. let count = 20;
  409. while (--count) {
  410. leftBtn.click();
  411. }
  412. count = 18;
  413. while (--count) {
  414. rightBtn.click();
  415. }
  416. setTimeout(_ => {
  417. const newLeft = left.textContent.match(/\d+/g);
  418. const newRight = right.textContent.match(/\d+/g);
  419. expect(leftText[1] - newLeft[1]).to.equal(2);
  420. expect(leftText[0] - newLeft[0]).to.equal(0);
  421. expect([-10, 2]).to.include(rightText[1] - newRight[1]);
  422. expect([0, 1]).to.include(rightText[0] - newRight[0]);
  423. done();
  424. }, DELAY);
  425. });
  426. it('prev/next year button', done => {
  427. const leftBtn = vm.picker.$el.querySelector('.is-left .el-icon-d-arrow-left');
  428. const rightBtn = vm.picker.$el.querySelector('.is-right .el-icon-d-arrow-right');
  429. const left = vm.picker.$el.querySelector('.is-left .el-date-range-picker__header');
  430. const right = vm.picker.$el.querySelector('.is-right .el-date-range-picker__header');
  431. const leftText = left.textContent.match(/\d+/g);
  432. const rightText = right.textContent.match(/\d+/g);
  433. let count = 20;
  434. while (--count) {
  435. leftBtn.click();
  436. }
  437. count = 18;
  438. while (--count) {
  439. rightBtn.click();
  440. }
  441. setTimeout(_ => {
  442. const newLeft = left.textContent.match(/\d+/g);
  443. const newRight = right.textContent.match(/\d+/g);
  444. expect(leftText[1] - newLeft[1]).to.equal(0);
  445. expect(leftText[0] - newLeft[0]).to.equal(2);
  446. expect(rightText[1] - newRight[1]).to.equal(0);
  447. expect(rightText[0] - newRight[0]).to.equal(2);
  448. done();
  449. }, DELAY);
  450. });
  451. it('input date', done => {
  452. const input = vm.picker.$el.querySelector('.el-date-range-picker__editors-wrap input');
  453. const pickers = vm.picker.$el.querySelectorAll('.el-date-range-picker__content');
  454. const leftCell = pickers[0].querySelector('td.available');
  455. const rightCell = pickers[1].querySelector('td.available');
  456. triggerEvent(leftCell, 'mousemove', true);
  457. triggerEvent(leftCell, 'click', true);
  458. setTimeout(_ => {
  459. triggerEvent(rightCell, 'mousemove', true);
  460. triggerEvent(rightCell, 'click', true);
  461. setTimeout(_ => {
  462. triggerEvent(input, 'input');
  463. input.value = '1989-6-4';
  464. triggerEvent(input, 'change', true);
  465. setTimeout(_ => {
  466. const minDate = vm.picker.minDate;
  467. expect(minDate.getFullYear()).to.equal(1989);
  468. expect(minDate.getMonth()).to.equal(5);
  469. expect(minDate.getDate()).to.equal(4);
  470. done();
  471. }, DELAY);
  472. }, DELAY);
  473. }, DELAY);
  474. });
  475. it('input date when minDate > maxDate', done => {
  476. const input = vm.picker.$el.querySelector('.el-date-range-picker__editors-wrap input');
  477. const input2 = vm.picker.$el.querySelectorAll('.el-date-range-picker__editors-wrap input')[2];
  478. const pickers = vm.picker.$el.querySelectorAll('.el-date-range-picker__content');
  479. const leftCell = pickers[0].querySelector('td.available');
  480. const rightCell = pickers[1].querySelector('td.available');
  481. triggerEvent(leftCell, 'mousemove', true);
  482. triggerEvent(leftCell, 'click', true);
  483. setTimeout(_ => {
  484. triggerEvent(rightCell, 'mousemove', true);
  485. triggerEvent(rightCell, 'click', true);
  486. setTimeout(_ => {
  487. triggerEvent(input2, 'input');
  488. input2.value = '1988-6-4';
  489. triggerEvent(input2, 'change');
  490. setTimeout(_ => {
  491. triggerEvent(input, 'input');
  492. input.value = '1989-6-4';
  493. triggerEvent(input, 'change', true);
  494. setTimeout(_ => {
  495. expect(vm.picker.maxDate > vm.picker.minDate).to.true;
  496. done();
  497. }, DELAY);
  498. }, DELAY);
  499. }, DELAY);
  500. }, DELAY);
  501. });
  502. it('select time', done => {
  503. const input = vm.picker.$el.querySelectorAll('.el-date-range-picker__editors-wrap input')[1];
  504. input.blur();
  505. input.focus();
  506. input.blur();
  507. setTimeout(_ => {
  508. const button = vm.picker.$el.querySelector('.el-date-range-picker__time-picker-wrap .el-time-panel .confirm');
  509. button.click();
  510. setTimeout(_ => {
  511. expect(input.value).to.exist;
  512. done();
  513. }, DELAY);
  514. }, DELAY);
  515. });
  516. });
  517. it('picker-options:shortcuts', done => {
  518. let test;
  519. vm = createTest(DatePicker, {
  520. pickerOptions: {
  521. shortcuts: [
  522. {
  523. text: '今天',
  524. onClick(picker) {
  525. test = true;
  526. picker.$emit('pick', new Date());
  527. }
  528. }
  529. ]
  530. }
  531. }, true);
  532. const input = vm.$el.querySelector('input');
  533. input.blur();
  534. input.focus();
  535. setTimeout(_ => {
  536. const shortcut = vm.picker.$el.querySelector('.el-picker-panel__shortcut');
  537. expect(shortcut.textContent).to.be.equal('今天');
  538. expect(vm.picker.$el.querySelector('.el-picker-panel__sidebar')).to.be.ok;
  539. shortcut.click();
  540. setTimeout(_ => {
  541. expect(test).to.true;
  542. done();
  543. }, DELAY);
  544. }, DELAY);
  545. });
  546. describe('picker-options:disabledDate', () => {
  547. let vm;
  548. beforeEach(done => {
  549. vm = createTest(DatePicker, {
  550. value: new Date(),
  551. pickerOptions: {
  552. disabledDate(time) {
  553. return time.getTime() < Date.now() - 8.64e7;
  554. }
  555. }
  556. }, true);
  557. const input = vm.$el.querySelector('input');
  558. input.blur();
  559. input.focus();
  560. setTimeout(done, DELAY);
  561. });
  562. afterEach(() => destroyVM(vm));
  563. it('create', () => {
  564. expect(vm.picker.$el.querySelector('.disabled')).to.be.ok;
  565. });
  566. it('set disabled value', done => {
  567. const date = new Date(1999, 10, 10, 10, 10, 10);
  568. vm.picker.value = date;
  569. setTimeout(_ => {
  570. expect(vm.picker.date > date).to.true;
  571. done();
  572. }, DELAY);
  573. });
  574. it('set value', done => {
  575. const date = new Date(3000, 10, 10, 10, 10, 10);
  576. vm.picker.value = date;
  577. setTimeout(_ => {
  578. expect(vm.picker.date.getTime() === date.getTime()).to.true;
  579. done();
  580. }, DELAY);
  581. });
  582. });
  583. });