blob: 1bd1d0c3d163cb26ae8ad12dacae99ebdc4ad72b [file] [log] [blame]
/*
* 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 libcore.java.text;
import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class OldDateFormatTest extends junit.framework.TestCase {
private class MockDateFormat extends DateFormat {
private static final long serialVersionUID = 1L;
public MockDateFormat() {
super();
}
@Override
public Date parse(String source, ParsePosition pos) {
// it is a fake
return null;
}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo,
FieldPosition fieldPosition) {
// it is a fake
return null;
}
}
/**
* java.text.DateFormat#DateFormat() Test of method
* java.text.DateFormat#DateFormat().
*/
public void test_Constructor() {
try {
new MockDateFormat();
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* java.text.DateFormat#equals(java.lang.Object obj) Test of
* java.text.DateFormat#equals(java.lang.Object obj).
*/
public void test_equalsLjava_lang_Object() {
try {
DateFormat format = DateFormat.getInstance();
DateFormat clone = (DateFormat) format.clone();
assertTrue("Clone and parent are not equaled", format.equals(clone));
assertTrue("Clone is equal to other object", !clone
.equals(DateFormat.getTimeInstance()));
format.setCalendar(Calendar.getInstance());
assertTrue("Clone and parent are not equaled", format.equals(clone));
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* java.text.DateFormat#format(java.util.Date) Test of method
* java.text.DateFormat#format(java.util.Date).
*/
public void test_formatLjava_util_Date() {
try {
// This test assumes a default DateFormat.is24Hour setting.
DateFormat.is24Hour = null;
DateFormat format = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT, Locale.US);
Date current = new Date();
String dtf = format.format(current);
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm a", Locale.US);
assertTrue("Incorrect date format", sdf.format(current).equals(dtf));
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* java.text.DateFormat#format(Object, StringBuffer, FieldPosition)
* Test of method java.text.DateFormat#format(Object, StringBuffer,
* FieldPosition)
*/
public void test_formatLjava_lang_ObjectLjava_lang_StringBufferLjava_text_FieldPosition() {
try {
// This test assumes a default DateFormat.is24Hour setting.
DateFormat.is24Hour = null;
DateFormat format = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT, Locale.US);
Date current = new Date();
StringBuffer toAppend = new StringBuffer();
FieldPosition fp = new FieldPosition(DateFormat.YEAR_FIELD);
StringBuffer sb = format.format(current, toAppend, fp);
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm a", Locale.US);
assertTrue("Incorrect date format", sdf.format(current).equals(
sb.toString()));
assertTrue("Incorrect beginIndex of filed position", fp
.getBeginIndex() == sb.lastIndexOf("/") + 1);
assertTrue("Incorrect endIndex of filed position",
fp.getEndIndex() == sb.lastIndexOf("/") + 3);
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
public void test_getTimeZone() {
try {
DateFormat format = DateFormat.getInstance();
TimeZone tz = format.getTimeZone();
//if(1 == 1)
// throw new Exception(tz.getClass().getName());
// We know we are not sun.util so:
// Redundant checking
//assertFalse("Incorrect zone info", tz.getClass().getName().equals(
// "sun.util.calendar.ZoneInfo"));
assertTrue("Incorrect time zone", tz.equals(format.getCalendar()
.getTimeZone()));
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* java.text.DateFormat#hashCode() Test of method
* java.text.DateFormat#hashCode().
*/
public void test_hashCode() {
try {
DateFormat df1 = DateFormat.getInstance();
DateFormat df2 = (DateFormat) df1.clone();
assertTrue("Hash codes of clones are not equal",
df1.hashCode() == df2.hashCode());
assertTrue("Hash codes of different objects are the same", df1
.hashCode() != DateFormat.getDateInstance().hashCode());
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* java.text.DateFormat#isLenient() Test of method
* java.text.DateFormat#isLenient().
*/
public void test_isLenient() {
DateFormat df = DateFormat.getInstance();
Calendar c = df.getCalendar();
if (df.isLenient()) {
try {
c.set(Calendar.DAY_OF_MONTH, 32);
c.get(Calendar.DAY_OF_MONTH);
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
c.setLenient(false);
try {
c.set(Calendar.DAY_OF_MONTH, 32);
c.get(Calendar.DAY_OF_MONTH);
fail("Expected IllegalArgumentException was not thrown");
} catch (IllegalArgumentException e) {
// expected
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
} else {
try {
c.set(Calendar.DAY_OF_MONTH, 32);
c.get(Calendar.DAY_OF_MONTH);
fail("Expected IllegalArgumentException was not thrown");
} catch (IllegalArgumentException e) {
// expected
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
c.setLenient(true);
try {
c.set(Calendar.DAY_OF_MONTH, 32);
c.get(Calendar.DAY_OF_MONTH);
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
}
/**
* java.text.DateFormat#parse(String)
*/
public void test_parseLString() throws Exception {
// This test assumes a default DateFormat.is24Hour setting.
DateFormat.is24Hour = null;
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.US);
try {
format.parse("not a Date");
fail("should throw ParseException first");
} catch (ParseException pe) {
assertNotNull(pe.getMessage());
}
Date current = new Date();
try {
Date date = format.parse(format.format(current).toString());
assertEquals(current.getDate(), date.getDate());
assertEquals(current.getDay(), date.getDay());
assertEquals(current.getMonth(), date.getMonth());
assertEquals(current.getYear(), date.getYear());
assertEquals(current.getHours(), date.getHours());
assertEquals(current.getMinutes(), date.getMinutes());
assertEquals(0, date.getSeconds());
} catch(ParseException pe) {
fail("ParseException was thrown for current Date.");
}
try {
format.parse("27/08/1998");
fail("ParseException was not thrown.");
} catch(ParseException pe) {
//expected
}
try {
format.parse("30/30/908 4:50, PDT");
fail("ParseException was not thrown.");
} catch(ParseException pe) {
//expected
}
try {
format.parse("837039928046");
fail("ParseException was not thrown.");
} catch(ParseException pe) {
//expected
}
format = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.US);
try {
Date date = format.parse(format.format(current).toString());
assertEquals(current.getDate(), date.getDate());
assertEquals(current.getDay(), date.getDay());
assertEquals(current.getMonth(), date.getMonth());
assertEquals(current.getYear(), date.getYear());
assertEquals(0, date.getHours());
assertEquals(0, date.getMinutes());
assertEquals(0, date.getSeconds());
} catch(ParseException pe) {
fail("ParseException was thrown for current Date.");
}
try {
format.parse("Jan 16 1970");
fail("ParseException was not thrown.");
} catch(ParseException pe) {
//expected
}
try {
format.parse("27/08/1998");
fail("ParseException was not thrown.");
} catch(ParseException pe) {
//expected
}
format = DateFormat.getDateInstance(DateFormat.LONG, Locale.US);
try {
Date date = format.parse(format.format(current).toString());
assertEquals(current.getDate(), date.getDate());
assertEquals(current.getDay(), date.getDay());
assertEquals(current.getMonth(), date.getMonth());
assertEquals(current.getYear(), date.getYear());
assertEquals(0, date.getHours());
assertEquals(0, date.getMinutes());
assertEquals(0, date.getSeconds());
} catch(ParseException pe) {
fail("ParseException was thrown for current Date.");
}
format = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US);
try {
Date date = format.parse(format.format(current).toString());
assertEquals(current.getDate(), date.getDate());
assertEquals(current.getDay(), date.getDay());
assertEquals(current.getMonth(), date.getMonth());
assertEquals(current.getYear(), date.getYear());
assertEquals(0, date.getHours());
assertEquals(0, date.getMinutes());
assertEquals(0, date.getSeconds());
} catch(ParseException pe) {
fail("ParseException was thrown for current Date.");
}
format = DateFormat.getTimeInstance(DateFormat.DEFAULT, Locale.US);
try {
Date date = format.parse(format.format(current).toString());
assertEquals(1, date.getDate());
assertEquals(0, date.getMonth());
assertEquals(70, date.getYear());
assertEquals(current.getHours(), date.getHours());
assertEquals(current.getMinutes(), date.getMinutes());
} catch(ParseException pe) {
fail("ParseException was thrown for current Date.");
}
try {
format.parse("8:58:44");
fail("ParseException was not thrown.");
} catch(ParseException pe) {
//expected
}
format = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.SHORT, Locale.US);
try {
Date date = format.parse(format.format(current).toString());
assertEquals(current.getDate(), date.getDate());
assertEquals(current.getDay(), date.getDay());
assertEquals(current.getMonth(), date.getMonth());
assertEquals(current.getYear(), date.getYear());
assertEquals(current.getHours(), date.getHours());
assertEquals(current.getMinutes(), date.getMinutes());
} catch(ParseException pe) {
fail("ParseException was thrown for current Date.");
}
try {
format.parse("January 31 1970 7:52:34 AM PST");
fail("ParseException was not thrown.");
} catch (ParseException expected) {
}
try {
format.parse("January 31 1970");
fail("ParseException was not thrown.");
} catch (ParseException expected) {
}
format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.US);
String formatPattern = ((SimpleDateFormat) format).toPattern();
String formattedCurrent = format.format(current);
Date date = format.parse(formattedCurrent);
// Date has millisecond accuracy, but humans don't use time formats that precise.
if (date.getTime() / 1000 != current.getTime() / 1000) {
fail(date.getTime() + " != " + current.getTime() +
"; " + formatPattern + "; " + formattedCurrent);
}
try {
format.parse("January 16, 1970 8:03:52 PM CET");
fail("ParseException was not thrown.");
} catch (ParseException expected) {
}
}
/**
* java.text.DateFormat#parseObject(String, ParsePosition) Test of
* method java.text.DateFormat#parseObject(String, ParsePosition).
* Case 1: Try to parse correct data string. Case 2: Try to parse
* partialy correct data string. Case 3: Try to use argument
* ParsePosition as null.
*/
public void test_parseObjectLjava_lang_StringLjava_text_ParsePosition() {
DateFormat df = DateFormat.getInstance();
try {
// case 1: Try to parse correct data string.
Date current = new Date();
ParsePosition pp = new ParsePosition(0);
int parseIndex = pp.getIndex();
Date result = (Date) df.parseObject(df.format(current), pp);
assertEquals("Dates are different.", current.getDate(), result.getDate());
assertEquals("Days are different.", current.getDay(), result.getDay());
assertEquals("Months are different.", current.getMonth(), result.getMonth());
assertEquals("Years are different.", current.getYear(), result.getYear());
assertEquals("Hours are different", current.getHours(), result.getHours());
assertEquals("Minutes are diffetrent,", current.getMinutes(), result.getMinutes());
assertTrue("Parse operation return null", result != null);
assertTrue("ParseIndex is incorrect", pp.getIndex() != parseIndex);
// case 2: Try to parse partially correct data string.
pp.setIndex(0);
char[] cur = df.format(current).toCharArray();
cur[cur.length / 2] = 'Z';
String partialCorrect = new String(cur);
result = (Date) df.parseObject(partialCorrect, pp);
assertTrue("Parse operation return not-null", result == null);
assertTrue("ParseIndex is incorrect", pp.getIndex() == 0);
assertTrue("ParseErrorIndex is incorrect",
pp.getErrorIndex() == cur.length / 2);
pp.setIndex(2);
char[] curDate = df.format(current).toCharArray();
char [] newArray = new char[curDate.length + pp.getIndex()];
for(int i = 0; i < curDate.length; i++) {
newArray[i + pp.getIndex()] = curDate[i];
}
result = (Date) df.parseObject(new String(newArray), pp);
//assertEquals(current, result);
assertEquals("Dates are different.", current.getDate(), result.getDate());
assertEquals("Days are different.", current.getDay(), result.getDay());
assertEquals("Months are different.", current.getMonth(), result.getMonth());
assertEquals("Years are different.", current.getYear(), result.getYear());
assertEquals("Hours are different", current.getHours(), result.getHours());
assertEquals("Minutes are diffetrent,", current.getMinutes(), result.getMinutes());
// case 3: Try to use argument ParsePosition as null.
try {
df.parseObject(df.format(current), null);
fail("Expected NullPointerException was not thrown");
} catch (NullPointerException e) {
// expected
}
assertNull(df.parseObject("test", pp));
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* java.text.DateFormat#setLenient(boolean) Test of method
* java.text.DateFormat#setLenient(boolean).
*/
public void test_setLenientZ() {
DateFormat df = DateFormat.getInstance();
Calendar c = df.getCalendar();
try {
c.setLenient(true);
try {
c.set(Calendar.DAY_OF_MONTH, 32);
c.get(Calendar.DAY_OF_MONTH);
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
c.setLenient(false);
try {
c.set(Calendar.DAY_OF_MONTH, 32);
c.get(Calendar.DAY_OF_MONTH);
fail("Expected IllegalArgumentException was not thrown");
} catch (IllegalArgumentException e) {
// expected
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
} catch (Exception e) {
fail("Uexpected exception " + e.toString());
}
}
/**
* java.text.DateFormat#setTimeZone(TimeZone) Test of method
* java.text.DateFormat#setTimeZone(TimeZone).
*/
public void test_setTimeZoneLjava_util_TimeZone() {
try {
DateFormat format = DateFormat.getInstance();
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
format.setTimeZone(tz);
assertTrue("TimeZone is set incorrectly", tz.equals(format
.getTimeZone()));
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
}