]> git.immae.eu Git - github/fretlink/time-picker.git/commitdiff
update test case and fix bugs
authorMG12 <wuzhao.mail@gmail.com>
Sat, 12 Dec 2015 16:03:19 +0000 (00:03 +0800)
committerMG12 <wuzhao.mail@gmail.com>
Sat, 12 Dec 2015 16:03:19 +0000 (00:03 +0800)
examples/disabled.html [new file with mode: 0644]
examples/disabled.js [new file with mode: 0644]
examples/hidden.html [new file with mode: 0644]
examples/hidden.js [new file with mode: 0644]
examples/pick-time.js
src/module/Combobox.jsx
src/module/Header.jsx
src/module/Panel.jsx
tests/Header.spec.jsx
tests/Select.spec.jsx

diff --git a/examples/disabled.html b/examples/disabled.html
new file mode 100644 (file)
index 0000000..48cdce8
--- /dev/null
@@ -0,0 +1 @@
+placeholder
diff --git a/examples/disabled.js b/examples/disabled.js
new file mode 100644 (file)
index 0000000..24d0068
--- /dev/null
@@ -0,0 +1,36 @@
+/* eslint no-console:0 */
+
+import 'rc-time-picker/assets/index.less';
+
+import React from 'react';
+import ReactDom from 'react-dom';
+
+import GregorianCalendar from 'gregorian-calendar';
+import DateTimeFormat from 'gregorian-calendar-format';
+import zhCn from 'gregorian-calendar/lib/locale/zh_CN';
+
+import TimePicker from 'rc-time-picker';
+import TimePickerLocale from 'rc-time-picker/src/locale/zh_CN';
+
+const showSecond = true;
+const str = showSecond ? 'HH:mm:ss' : 'HH:mm';
+
+const formatter = new DateTimeFormat(str);
+
+const now = new GregorianCalendar(zhCn);
+now.setTime(Date.now());
+
+function onChange(value) {
+  console.log(value && formatter.format(value));
+}
+
+ReactDom.render(
+  <TimePicker formatter={formatter} locale={TimePickerLocale}
+              showSecond={showSecond}
+              defaultValue={now}
+              className="xxx"
+              onChange={onChange}
+              disabledHours={[0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23]}
+              disabledMinutes={[0, 2, 4, 6, 8]} />,
+  document.getElementById('__react-content')
+);
diff --git a/examples/hidden.html b/examples/hidden.html
new file mode 100644 (file)
index 0000000..48cdce8
--- /dev/null
@@ -0,0 +1 @@
+placeholder
diff --git a/examples/hidden.js b/examples/hidden.js
new file mode 100644 (file)
index 0000000..1084236
--- /dev/null
@@ -0,0 +1,37 @@
+/* eslint no-console:0 */
+
+import 'rc-time-picker/assets/index.less';
+
+import React from 'react';
+import ReactDom from 'react-dom';
+
+import GregorianCalendar from 'gregorian-calendar';
+import DateTimeFormat from 'gregorian-calendar-format';
+import zhCn from 'gregorian-calendar/lib/locale/zh_CN';
+
+import TimePicker from 'rc-time-picker';
+import TimePickerLocale from 'rc-time-picker/src/locale/zh_CN';
+
+const showSecond = true;
+const str = showSecond ? 'HH:mm:ss' : 'HH:mm';
+
+const formatter = new DateTimeFormat(str);
+
+const now = new GregorianCalendar(zhCn);
+now.setTime(Date.now());
+
+function onChange(value) {
+  console.log(value && formatter.format(value));
+}
+
+ReactDom.render(
+  <TimePicker formatter={formatter} locale={TimePickerLocale}
+              showSecond={showSecond}
+              defaultValue={now}
+              className="xxx"
+              onChange={onChange}
+              disabledHours={[0, 1, 2, 3, 4, 5, 6, 7, 8, 22, 23]}
+              disabledMinutes={[0, 2, 4, 6, 8]}
+              hideDisabledOptions={true} />,
+  document.getElementById('__react-content')
+);
index 074e72c57bd43681a9bacd072439495b77afea1e..f66e416ba64b72d5d14c7b204f5e75531a15c80f 100644 (file)
@@ -24,27 +24,11 @@ function onChange(value) {
   console.log(value && formatter.format(value));
 }
 
-const options = {
-  disabledHours() {
-    return [0, 2, 21];
-  },
-  disabledMinutes(h) {
-    return h === 22 ? [0, 3, 31] : [];
-  },
-  disabledSeconds(h, m) {
-    return [];
-  },
-};
-
 ReactDom.render(
   <TimePicker formatter={formatter} locale={TimePickerLocale}
               showSecond={showSecond}
               defaultValue={now}
               className="xxx"
-              onChange={onChange}
-              disabledHours={[0, 2, 21]}
-              disabledMinutes={[0, 2, 21]}
-              disabledSeconds={[]}
-              hideDisabledOptions={true} />,
+              onChange={onChange} />,
   document.getElementById('__react-content')
 );
index 27a822686e1735cf6b08baff2191067cf6f2276d..1e172a7274c18775d9b8b9528e3e839042a17d72 100644 (file)
@@ -9,7 +9,7 @@ const formatOption = (option, disabledOptions) => {
   }
 
   let disabled = false;
-  if (disabledOptions.indexOf(option) >= 0) {
+  if (disabledOptions && disabledOptions.indexOf(option) >= 0) {
     disabled = true;
   }
 
index c2f8eefb6a092cb33b06f0c6f5674dbdbf353f4e..fec02af9f28b8a7689f820da448680e58e3e75de 100644 (file)
@@ -88,9 +88,9 @@ const Header = React.createClass({
 
         // if time value is disabled, response warning.
         if (
-          disabledHours.indexOf(value.getHourOfDay()) >= 0 ||
-          disabledMinutes.indexOf(value.getMinutes()) >= 0 ||
-          disabledSeconds.indexOf(value.getSeconds()) >= 0
+          (disabledHours && disabledHours.indexOf(value.getHourOfDay()) >= 0) ||
+          (disabledMinutes && disabledMinutes.indexOf(value.getMinutes()) >= 0) ||
+          (disabledSeconds && disabledSeconds.indexOf(value.getSeconds()) >= 0)
         ) {
           this.setState({
             invalid: true,
index 72934e5938a8e8641028ab6254904542bc0f067b..12d23f718db7d9aa75c9dfb7bc55173635e01a76 100644 (file)
@@ -9,7 +9,7 @@ function noop() {
 function generateOptions(length, disabledOptions, hideDisabledOptions) {
   const arr = [];
   for (let value = 0; value < length; value++) {
-    if ((disabledOptions && disabledOptions.indexOf(value) < 0) || !hideDisabledOptions) {
+    if (!disabledOptions || disabledOptions.indexOf(value) < 0 || !hideDisabledOptions) {
       arr.push(value);
     }
   }
index cc8f954ad86b0d0b60d1af46678c526d6dbf8bcf..18d61c5943c69ee456d7235461d3cd0e80b4b10d 100644 (file)
@@ -121,6 +121,87 @@ describe('Header', () => {
       });
     });
 
+    it('carry disabled correctly', (done) => {
+      const picker = renderPicker({
+        disabledMinutes: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
+      });
+      expect(picker.state.open).not.to.be.ok();
+      const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
+      let header;
+      async.series([(next) => {
+        Simulate.click(input);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
+        expect(header).to.be.ok();
+        expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
+
+        ReactDOM.findDOMNode(header).value = '12:15:78';
+        Simulate.change(header);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        expect(ReactDOM.findDOMNode(header).className).to.contain('rc-time-picker-panel-input-invalid');
+        expect(ReactDOM.findDOMNode(header).value).to.be('12:15:78');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
+
+        ReactDOM.findDOMNode(header).value = '12:10:78';
+        Simulate.change(header);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        expect(ReactDOM.findDOMNode(header).value).to.be('12:11:18');
+        expect(ReactDOM.findDOMNode(input).value).to.be('12:11:18');
+
+        next();
+      }], () => {
+        done();
+      });
+    });
+
+    it('carry hidden correctly', (done) => {
+      const picker = renderPicker({
+        disabledMinutes: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22],
+        hideDisabledOptions: true
+      });
+      expect(picker.state.open).not.to.be.ok();
+      const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
+      let header;
+      async.series([(next) => {
+        Simulate.click(input);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
+        expect(header).to.be.ok();
+        expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
+
+        ReactDOM.findDOMNode(header).value = '12:15:78';
+        Simulate.change(header);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        expect(ReactDOM.findDOMNode(header).className).to.contain('rc-time-picker-panel-input-invalid');
+        expect(ReactDOM.findDOMNode(header).value).to.be('12:15:78');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
+
+        ReactDOM.findDOMNode(header).value = '12:10:78';
+        Simulate.change(header);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        expect(ReactDOM.findDOMNode(header).value).to.be('12:11:18');
+        expect(ReactDOM.findDOMNode(input).value).to.be('12:11:18');
+
+        next();
+      }], () => {
+        done();
+      });
+    });
+
     it('check correctly', (done) => {
       const picker = renderPicker();
       expect(picker.state.open).not.to.be.ok();
index 7e53c3164c8b5a19854db8ae957afa4d9bb17bf7..6dd7796e3d206cbfe2e88795cda663c81c1f2b44 100644 (file)
@@ -89,12 +89,12 @@ describe('Select', () => {
       }, (next) => {
         expect(picker.state.open).to.be(true);
         header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
-        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[0];
-        const option = selector.getElementsByTagName('li')[19];
         expect(header).to.be.ok();
         expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
         expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
 
+        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[0];
+        const option = selector.getElementsByTagName('li')[19];
         Simulate.click(option);
         setTimeout(next, 100);
       }, (next) => {
@@ -128,12 +128,12 @@ describe('Select', () => {
       }, (next) => {
         expect(picker.state.open).to.be(true);
         header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
-        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[1];
-        const option = selector.getElementsByTagName('li')[19];
         expect(header).to.be.ok();
         expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
         expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
 
+        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[1];
+        const option = selector.getElementsByTagName('li')[19];
         Simulate.click(option);
         setTimeout(next, 100);
       }, (next) => {
@@ -167,12 +167,12 @@ describe('Select', () => {
       }, (next) => {
         expect(picker.state.open).to.be(true);
         header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
-        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[2];
-        const option = selector.getElementsByTagName('li')[19];
         expect(header).to.be.ok();
         expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
         expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
 
+        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[2];
+        const option = selector.getElementsByTagName('li')[19];
         Simulate.click(option);
         setTimeout(next, 100);
       }, (next) => {
@@ -187,5 +187,107 @@ describe('Select', () => {
         done();
       });
     });
+
+    it('disabled correctly', (done) => {
+      let change;
+      const picker = renderPicker({
+        onChange(v) {
+          change = v;
+        },
+        disabledMinutes: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
+      });
+      expect(picker.state.open).not.to.be.ok();
+      const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
+      let header;
+      async.series([(next) => {
+        expect(picker.state.open).to.be(false);
+
+        Simulate.click(input);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
+        expect(header).to.be.ok();
+        expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
+
+        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[1];
+        const option = selector.getElementsByTagName('li')[6];
+        Simulate.click(option);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(change).not.to.be.ok();
+        expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
+        expect(picker.state.open).to.be.ok();
+
+        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[1];
+        const option = selector.getElementsByTagName('li')[7];
+        Simulate.click(option);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(change).to.be.ok();
+        expect(change.getMinutes()).to.be(7);
+        expect(ReactDOM.findDOMNode(header).value).to.be('01:07:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:07:03');
+        expect(picker.state.open).to.be.ok();
+
+        next();
+      }], () => {
+        done();
+      });
+    });
+
+    it('hidden correctly', (done) => {
+      let change;
+      const picker = renderPicker({
+        onChange(v) {
+          change = v;
+        },
+        disabledHours: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23],
+        hideDisabledOptions: true
+      });
+      expect(picker.state.open).not.to.be.ok();
+      const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
+      let header;
+      async.series([(next) => {
+        expect(picker.state.open).to.be(false);
+
+        Simulate.click(input);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        header = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-input')[0];
+        expect(header).to.be.ok();
+        expect(ReactDOM.findDOMNode(header).value).to.be('01:02:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('01:02:03');
+
+        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[0];
+        const option = selector.getElementsByTagName('li')[3];
+        Simulate.click(option);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(change).to.be.ok();
+        expect(change.getHourOfDay()).to.be(6);
+        expect(ReactDOM.findDOMNode(header).value).to.be('06:02:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('06:02:03');
+        expect(picker.state.open).to.be.ok();
+
+        const selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance, 'rc-time-picker-panel-select')[0];
+        const option = selector.getElementsByTagName('li')[4];
+        Simulate.click(option);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(change).to.be.ok();
+        expect(change.getHourOfDay()).to.be(8);
+        expect(ReactDOM.findDOMNode(header).value).to.be('08:02:03');
+        expect(ReactDOM.findDOMNode(input).value).to.be('08:02:03');
+        expect(picker.state.open).to.be.ok();
+
+        next();
+      }], () => {
+        done();
+      });
+    });
   });
 });