| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.chemistry.opencmis.commons.impl.misc; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNull; |
| |
| import java.util.Calendar; |
| import java.util.Date; |
| import java.util.GregorianCalendar; |
| import java.util.TimeZone; |
| |
| import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper; |
| import org.junit.Test; |
| |
| public class DateTimeTest { |
| |
| @Test |
| public void testXmlDateTimeParser() { |
| GregorianCalendar cal1 = DateTimeHelper.parseXmlDateTime("2012-12-24T09:15:06.123Z"); |
| assertEquals(2012, cal1.get(Calendar.YEAR)); |
| assertEquals(11, cal1.get(Calendar.MONTH)); |
| assertEquals(24, cal1.get(Calendar.DAY_OF_MONTH)); |
| assertEquals(9, cal1.get(Calendar.HOUR_OF_DAY)); |
| assertEquals(15, cal1.get(Calendar.MINUTE)); |
| assertEquals(6, cal1.get(Calendar.SECOND)); |
| assertEquals(123, cal1.get(Calendar.MILLISECOND)); |
| assertEquals(0, cal1.getTimeZone().getRawOffset()); |
| |
| GregorianCalendar cal2 = DateTimeHelper.parseXmlDateTime("2013-02-04T23:45:55.9876543"); |
| assertEquals(2013, cal2.get(Calendar.YEAR)); |
| assertEquals(1, cal2.get(Calendar.MONTH)); |
| assertEquals(4, cal2.get(Calendar.DAY_OF_MONTH)); |
| assertEquals(23, cal2.get(Calendar.HOUR_OF_DAY)); |
| assertEquals(45, cal2.get(Calendar.MINUTE)); |
| assertEquals(55, cal2.get(Calendar.SECOND)); |
| assertEquals(987, cal2.get(Calendar.MILLISECOND)); |
| assertEquals(0, cal2.getTimeZone().getRawOffset()); |
| |
| GregorianCalendar cal3 = DateTimeHelper.parseXmlDateTime("2013-01-02T03:04:05.678+05:00"); |
| assertEquals(2013, cal3.get(Calendar.YEAR)); |
| assertEquals(0, cal3.get(Calendar.MONTH)); |
| assertEquals(2, cal3.get(Calendar.DAY_OF_MONTH)); |
| assertEquals(3, cal3.get(Calendar.HOUR_OF_DAY)); |
| assertEquals(4, cal3.get(Calendar.MINUTE)); |
| assertEquals(5, cal3.get(Calendar.SECOND)); |
| assertEquals(678, cal3.get(Calendar.MILLISECOND)); |
| assertEquals(5 * 60 * 60 * 1000, cal3.getTimeZone().getRawOffset()); |
| } |
| |
| @Test |
| public void testXmlDateTimeWriter() { |
| GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); |
| cal1.set(2012, 11, 24, 9, 10, 11); |
| cal1.set(Calendar.MILLISECOND, 0); |
| |
| assertEquals("2012-12-24T09:10:11Z", DateTimeHelper.formatXmlDateTime(cal1)); |
| |
| GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); |
| cal2.set(2013, 0, 1, 2, 3, 4); |
| cal2.set(Calendar.MILLISECOND, 50); |
| |
| assertEquals("2013-01-01T02:03:04.05Z", DateTimeHelper.formatXmlDateTime(cal2)); |
| |
| GregorianCalendar cal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00")); |
| cal3.set(2012, 11, 24, 9, 10, 11); |
| cal3.set(Calendar.MILLISECOND, 0); |
| |
| assertEquals("2012-12-24T09:10:11+05:00", DateTimeHelper.formatXmlDateTime(cal3)); |
| |
| GregorianCalendar cal4 = new GregorianCalendar(TimeZone.getTimeZone("GMT-03:02")); |
| cal4.set(100, 8, 17, 18, 30, 7); |
| cal4.set(Calendar.MILLISECOND, 654); |
| |
| assertEquals("0100-09-17T18:30:07.654-03:02", DateTimeHelper.formatXmlDateTime(cal4)); |
| |
| GregorianCalendar cal5 = new GregorianCalendar(TimeZone.getTimeZone("GMT+01:00")); |
| cal5.set(2012, 11, 24, 9, 10, 11); |
| cal5.set(Calendar.MILLISECOND, 0); |
| |
| assertEquals("2012-12-24T08:10:11Z", DateTimeHelper.formatXmlDateTime(cal5.getTimeInMillis())); |
| |
| GregorianCalendar cal6 = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin")); |
| cal6.set(2013, 4, 6, 9, 10, 11); |
| cal6.set(Calendar.MILLISECOND, 0); |
| |
| assertEquals("2013-05-06T09:10:11+02:00", DateTimeHelper.formatXmlDateTime(cal6)); |
| |
| GregorianCalendar cal7 = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin")); |
| cal7.set(2012, 11, 24, 9, 10, 11); |
| cal7.set(Calendar.MILLISECOND, 0); |
| |
| assertEquals("2012-12-24T09:10:11+01:00", DateTimeHelper.formatXmlDateTime(cal7)); |
| } |
| |
| @Test |
| public void testXmlDateTimeWriterAndParser() { |
| GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); |
| cal1.set(2012, 11, 24, 9, 10, 11); |
| cal1.set(Calendar.MILLISECOND, 0); |
| |
| GregorianCalendar cal2 = DateTimeHelper.parseXmlDateTime(DateTimeHelper.formatXmlDateTime(cal1)); |
| |
| assertEquals(cal1, cal2); |
| |
| GregorianCalendar cal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00")); |
| cal3.set(2012, 11, 24, 9, 10, 11); |
| cal3.set(Calendar.MILLISECOND, 12); |
| |
| GregorianCalendar cal4 = DateTimeHelper.parseXmlDateTime(DateTimeHelper.formatXmlDateTime(cal3)); |
| |
| assertEquals(cal3, cal4); |
| } |
| |
| @Test |
| public void testInvalidXmlDateTime() { |
| // null is not a date |
| assertNull(DateTimeHelper.parseXmlDateTime(null)); |
| |
| // "" is not a date |
| assertNull(DateTimeHelper.parseXmlDateTime("")); |
| |
| // wrong format |
| assertNull(DateTimeHelper.parseXmlDateTime("1111111111111111")); |
| |
| // invalid year |
| assertNull(DateTimeHelper.parseXmlDateTime("111-11-11T11:11:11.111Z")); |
| |
| // invalid month |
| assertNull(DateTimeHelper.parseXmlDateTime("1111-21-11T11:11:11.111Z")); |
| |
| // invalid day |
| assertNull(DateTimeHelper.parseXmlDateTime("1111-11-51T11:11:11.111Z")); |
| } |
| |
| @Test |
| public void testHttpDateTimeParser() { |
| GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); |
| cal1.set(2012, 11, 24, 9, 10, 11); |
| cal1.set(Calendar.MILLISECOND, 0); |
| |
| String dateStr1 = DateTimeHelper.formatHttpDateTime(cal1.getTime()); |
| assertEquals("Mon, 24 Dec 2012 09:10:11 GMT", dateStr1); |
| |
| Date date1 = DateTimeHelper.parseHttpDateTime(dateStr1); |
| |
| assertEquals(cal1.getTime(), date1); |
| |
| GregorianCalendar cal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00")); |
| cal2.set(2013, 0, 1, 2, 3, 4); |
| cal2.set(Calendar.MILLISECOND, 0); |
| |
| String dateStr2 = " '" + DateTimeHelper.formatHttpDateTime(cal2.getTimeInMillis()) + "' "; |
| Date date2 = DateTimeHelper.parseHttpDateTime(dateStr2); |
| |
| assertEquals(cal2.getTime(), date2); |
| |
| GregorianCalendar cal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT+05:00")); |
| cal3.set(2012, 11, 24, 9, 10, 11); |
| cal3.set(Calendar.MILLISECOND, 0); |
| |
| String dateStr3 = DateTimeHelper.formatHttpDateTime(cal3); |
| Date date3 = DateTimeHelper.parseHttpDateTime(dateStr3); |
| |
| assertEquals(cal3.getTime(), date3); |
| |
| GregorianCalendar cal4 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); |
| cal4.set(1994, 10, 6, 8, 49, 37); |
| cal4.set(Calendar.MILLISECOND, 0); |
| |
| String dateStr4 = "Sunday, 06-Nov-94 08:49:37 GMT"; |
| |
| assertEquals(cal4.getTime(), DateTimeHelper.parseHttpDateTime(dateStr4)); |
| |
| GregorianCalendar cal5 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); |
| cal5.set(1994, 10, 6, 8, 49, 37); |
| cal5.set(Calendar.MILLISECOND, 0); |
| |
| String dateStr5 = "Sun Nov 6 08:49:37 1994"; |
| |
| assertEquals(cal5.getTime(), DateTimeHelper.parseHttpDateTime(dateStr5)); |
| |
| GregorianCalendar cal6 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); |
| cal6.set(1994, 10, 16, 8, 49, 37); |
| cal6.set(Calendar.MILLISECOND, 0); |
| |
| String dateStr6 = "Sun Nov 16 08:49:37 1994"; |
| |
| assertEquals(cal6.getTime(), DateTimeHelper.parseHttpDateTime(dateStr6)); |
| } |
| |
| @Test |
| public void testInvalidHttpDateTime() { |
| // null is not a date |
| assertNull(DateTimeHelper.parseHttpDateTime(null)); |
| |
| // "" is not a date |
| assertNull(DateTimeHelper.parseHttpDateTime("")); |
| |
| // wrong format |
| assertNull(DateTimeHelper.parseHttpDateTime("1111111111111111")); |
| |
| // invalid year |
| assertNull(DateTimeHelper.parseHttpDateTime("Mon, 24 Dec abcd 09:10:11 GMT")); |
| |
| // invalid month |
| assertNull(DateTimeHelper.parseHttpDateTime("Mon, 24 abc 2012 09:10:11 GMT")); |
| |
| // invalid day |
| assertNull(DateTimeHelper.parseHttpDateTime("Mon, xy Dec 2012 09:10:11 GMT")); |
| } |
| } |