]> git.immae.eu Git - github/fretlink/time-picker.git/blame - tests/Header.spec.jsx
default select value at first position
[github/fretlink/time-picker.git] / tests / Header.spec.jsx
CommitLineData
02d1b455
M
1import ReactDOM from 'react-dom';
2import React from 'react';
3import TimePicker from '../src/TimePicker';
4
5import TestUtils from 'react-addons-test-utils';
e9060dda 6const Simulate = TestUtils.Simulate;
02d1b455
M
7import expect from 'expect.js';
8import async from 'async';
9import {KeyCode} from 'rc-util';
10
11import DateTimeFormat from 'gregorian-calendar-format';
02d1b455
M
12import zhCn from 'gregorian-calendar/lib/locale/zh_CN';
13import TimePickerLocale from '../src/locale/zh_CN';
14
e9060dda 15function formatTime(time, formatter) {
16 return formatter.parse(time, {
17 locale: zhCn,
18 obeyCount: true,
19 });
20}
21
22describe('Header', () => {
23 let container;
02d1b455
M
24
25 function renderPicker(props) {
e9060dda 26 const showSecond = true;
27 const formatter = new DateTimeFormat('HH:mm:ss');
02d1b455
M
28
29 return ReactDOM.render(
30 <TimePicker
31 formatter={formatter}
32 locale={TimePickerLocale}
33 showSecond={showSecond}
34 defaultValue={formatTime('01:02:03', formatter)}
35 {...props}
36 />, container);
37 }
38
e9060dda 39 beforeEach(() => {
02d1b455
M
40 container = document.createElement('div');
41 document.body.appendChild(container);
42 });
43
e9060dda 44 afterEach(() => {
02d1b455
M
45 ReactDOM.unmountComponentAtNode(container);
46 document.body.removeChild(container);
47 });
48
e9060dda 49 describe('input to change value', () => {
50 it('input correctly', (done) => {
51 const picker = renderPicker();
02d1b455 52 expect(picker.state.open).not.to.be.ok();
e9060dda 53 const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
54 let header;
55 async.series([(next) => {
02d1b455
M
56 Simulate.click(input);
57 setTimeout(next, 100);
e9060dda 58 }, (next) => {
02d1b455
M
59 expect(picker.state.open).to.be(true);
60 header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
61 expect(header).to.be.ok();
62 expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
63 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
64
65 ReactDOM.findDOMNode(header).value = '12:34:56';
66 Simulate.change(header);
67 setTimeout(next, 100);
e9060dda 68 }, (next) => {
02d1b455
M
69 expect(picker.state.open).to.be(true);
70 expect(ReactDOM.findDOMNode(header).value).to.be('12:34:56');
71 expect(ReactDOM.findDOMNode(input).value).to.be('12:34:56');
72
73 next();
e9060dda 74 }], () => {
02d1b455
M
75 done();
76 });
77 });
78
e9060dda 79 it('carry correctly', (done) => {
80 const picker = renderPicker();
02d1b455 81 expect(picker.state.open).not.to.be.ok();
e9060dda 82 const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
83 let header;
84 async.series([(next) => {
02d1b455
M
85 Simulate.click(input);
86 setTimeout(next, 100);
e9060dda 87 }, (next) => {
02d1b455
M
88 expect(picker.state.open).to.be(true);
89 header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
90 expect(header).to.be.ok();
91 expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
92 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
93
94 ReactDOM.findDOMNode(header).value = '33:44:55';
95 Simulate.change(header);
96 setTimeout(next, 100);
e9060dda 97 }, (next) => {
02d1b455
M
98 expect(picker.state.open).to.be(true);
99 expect(ReactDOM.findDOMNode(header).value).to.be('09:44:55');
100 expect(ReactDOM.findDOMNode(input).value).to.be('09:44:55');
101
102 ReactDOM.findDOMNode(header).value = '10:90:30';
103 Simulate.change(header);
104 setTimeout(next, 100);
e9060dda 105 }, (next) => {
02d1b455
M
106 expect(picker.state.open).to.be(true);
107 expect(ReactDOM.findDOMNode(header).value).to.be('11:30:30');
108 expect(ReactDOM.findDOMNode(input).value).to.be('11:30:30');
109
110 ReactDOM.findDOMNode(header).value = '34:56:78';
111 Simulate.change(header);
112 setTimeout(next, 100);
e9060dda 113 }, (next) => {
02d1b455
M
114 expect(picker.state.open).to.be(true);
115 expect(ReactDOM.findDOMNode(header).value).to.be('10:57:18');
116 expect(ReactDOM.findDOMNode(input).value).to.be('10:57:18');
117
118 next();
e9060dda 119 }], () => {
02d1b455
M
120 done();
121 });
122 });
123
e9060dda 124 it('check correctly', (done) => {
125 const picker = renderPicker();
02d1b455 126 expect(picker.state.open).not.to.be.ok();
e9060dda 127 const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
128 let header;
129 async.series([(next) => {
02d1b455
M
130 Simulate.click(input);
131 setTimeout(next, 100);
e9060dda 132 }, (next) => {
02d1b455
M
133 expect(picker.state.open).to.be(true);
134 header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
135 expect(header).to.be.ok();
136 expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
137 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
138
139 ReactDOM.findDOMNode(header).value = '3:34:56';
140 Simulate.change(header);
141 setTimeout(next, 100);
e9060dda 142 }, (next) => {
02d1b455
M
143 expect(picker.state.open).to.be(true);
144 expect(ReactDOM.findDOMNode(header).value).to.be('3:34:56');
145 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
146 expect(ReactDOM.findDOMNode(header).className).to.contain('rc-time-picker-panel-input-invalid');
147
148 ReactDOM.findDOMNode(header).value = '13:3:56';
149 Simulate.change(header);
150 setTimeout(next, 100);
e9060dda 151 }, (next) => {
02d1b455
M
152 expect(picker.state.open).to.be(true);
153 expect(ReactDOM.findDOMNode(header).value).to.be('13:3:56');
154 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
155 expect(ReactDOM.findDOMNode(header).className).to.contain('rc-time-picker-panel-input-invalid');
156
157 ReactDOM.findDOMNode(header).value = '13:34:5';
158 Simulate.change(header);
159 setTimeout(next, 100);
e9060dda 160 }, (next) => {
02d1b455
M
161 expect(picker.state.open).to.be(true);
162 expect(ReactDOM.findDOMNode(header).value).to.be('13:34:5');
163 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
164 expect(ReactDOM.findDOMNode(header).className).to.contain('rc-time-picker-panel-input-invalid');
165 next();
e9060dda 166 }], () => {
02d1b455
M
167 done();
168 });
169 });
02d1b455
M
170 });
171
e9060dda 172 describe('other operations', () => {
173 it('clear correctly', (done) => {
174 let change;
175 const picker = renderPicker({
176 onChange(v) {
02d1b455 177 change = v;
e9060dda 178 },
02d1b455
M
179 });
180 expect(picker.state.open).not.to.be.ok();
e9060dda 181 const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
182 let header;
183 async.series([(next) => {
02d1b455
M
184 expect(picker.state.open).to.be(false);
185
186 Simulate.click(input);
187 setTimeout(next, 100);
e9060dda 188 }, (next) => {
02d1b455
M
189 expect(picker.state.open).to.be(true);
190 header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
e9060dda 191 const clearButton = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-clear-btn')[0];
02d1b455
M
192 expect(header).to.be.ok();
193 expect(clearButton).to.be.ok();
194 expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
195 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
196
197 Simulate.mouseDown(clearButton);
198 setTimeout(next, 100);
e9060dda 199 }, (next) => {
02d1b455
M
200 expect(picker.state.open).to.be(false);
201 expect(change).to.be(null);
202 expect(ReactDOM.findDOMNode(header).value).to.be('');
203 expect(ReactDOM.findDOMNode(input).value).to.be('');
204
205 next();
e9060dda 206 }], () => {
02d1b455
M
207 done();
208 });
209 });
210
e9060dda 211 it('exit correctly', (done) => {
212 const picker = renderPicker();
02d1b455 213 expect(picker.state.open).not.to.be.ok();
e9060dda 214 const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
215 let header;
216 async.series([(next) => {
02d1b455
M
217 expect(picker.state.open).to.be(false);
218
219 Simulate.click(input);
220 setTimeout(next, 100);
e9060dda 221 }, (next) => {
02d1b455
M
222 expect(picker.state.open).to.be(true);
223 header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
224 expect(header).to.be.ok();
225 expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
226 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
227
228 Simulate.keyDown(ReactDOM.findDOMNode(header), {
e9060dda 229 keyCode: KeyCode.ESC,
02d1b455
M
230 });
231 setTimeout(next, 100);
e9060dda 232 }, (next) => {
02d1b455
M
233 expect(picker.state.open).to.be(false);
234 expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
235 expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
236
237 next();
e9060dda 238 }], () => {
02d1b455
M
239 done();
240 });
241 });
02d1b455
M
242 });
243});