001 /*
002 * Copyright 2001-2005 Stephen Colebourne
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.joda.time.format;
017
018 import java.util.Locale;
019
020 import junit.framework.TestCase;
021 import junit.framework.TestSuite;
022
023 import org.joda.time.Chronology;
024 import org.joda.time.DateTime;
025 import org.joda.time.DateTimeZone;
026 import org.joda.time.MutableDateTime;
027 import org.joda.time.chrono.ISOChronology;
028
029 /**
030 * Makes sure that text fields are correct for English.
031 *
032 * @author Brian S O'Neill
033 */
034 public class TestTextFields extends TestCase {
035
036 private static final DateTimeZone[] ZONES = {
037 DateTimeZone.UTC,
038 DateTimeZone.forID("Europe/Paris"),
039 DateTimeZone.forID("Europe/London"),
040 DateTimeZone.forID("Asia/Tokyo"),
041 DateTimeZone.forID("America/Los_Angeles"),
042 };
043
044 private static final String[] MONTHS = {
045 null,
046 "January", "February", "March", "April", "May", "June",
047 "July", "August", "September", "October", "November", "December"
048 };
049
050 private static final String[] WEEKDAYS = {
051 null,
052 "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
053 };
054
055 private static final String[] HALFDAYS = {
056 "AM", "PM"
057 };
058
059 private DateTimeZone originalDateTimeZone = null;
060 private Locale originalLocale = null;
061
062 public static void main(String[] args) {
063 junit.textui.TestRunner.run(suite());
064 }
065
066 public static TestSuite suite() {
067 return new TestSuite(TestTextFields.class);
068 }
069
070 public TestTextFields(String name) {
071 super(name);
072 }
073
074 protected void setUp() throws Exception {
075 originalDateTimeZone = DateTimeZone.getDefault();
076 originalLocale = Locale.getDefault();
077 DateTimeZone.setDefault(ZONES[0]);
078 Locale.setDefault(Locale.ENGLISH);
079 }
080
081 protected void tearDown() throws Exception {
082 DateTimeZone.setDefault(originalDateTimeZone);
083 Locale.setDefault(originalLocale);
084 originalDateTimeZone = null;
085 originalLocale = null;
086 }
087
088 //-----------------------------------------------------------------------
089 public void testMonthNames_monthStart() {
090 DateTimeFormatter printer = DateTimeFormat.forPattern("MMMM");
091 for (int i=0; i<ZONES.length; i++) {
092 for (int month=1; month<=12; month++) {
093 DateTime dt = new DateTime(2004, month, 1, 1, 20, 30, 40, ZONES[i]);
094 String monthText = printer.print(dt);
095 assertEquals(MONTHS[month], monthText);
096 }
097 }
098 }
099
100 public void testMonthNames_monthMiddle() {
101 DateTimeFormatter printer = DateTimeFormat.forPattern("MMMM");
102 for (int i=0; i<ZONES.length; i++) {
103 for (int month=1; month<=12; month++) {
104 DateTime dt = new DateTime(2004, month, 15, 12, 20, 30, 40, ZONES[i]);
105 String monthText = printer.print(dt);
106 assertEquals(MONTHS[month], monthText);
107 }
108 }
109 }
110
111 public void testMonthNames_monthEnd() {
112 DateTimeFormatter printer = DateTimeFormat.forPattern("MMMM");
113 for (int i=0; i<ZONES.length; i++) {
114 Chronology chrono = ISOChronology.getInstance(ZONES[i]);
115 for (int month=1; month<=12; month++) {
116 DateTime dt = new DateTime(2004, month, 1, 23, 20, 30, 40, chrono);
117 int lastDay = chrono.dayOfMonth().getMaximumValue(dt.getMillis());
118 dt = new DateTime(2004, month, lastDay, 23, 20, 30, 40, chrono);
119 String monthText = printer.print(dt);
120 assertEquals(MONTHS[month], monthText);
121 }
122 }
123 }
124
125 public void testWeekdayNames() {
126 DateTimeFormatter printer = DateTimeFormat.forPattern("EEEE");
127 for (int i=0; i<ZONES.length; i++) {
128 MutableDateTime mdt = new MutableDateTime(2004, 1, 1, 1, 20, 30, 40, ZONES[i]);
129 for (int day=1; day<=366; day++) {
130 mdt.setDayOfYear(day);
131 int weekday = mdt.getDayOfWeek();
132 String weekdayText = printer.print(mdt);
133 assertEquals(WEEKDAYS[weekday], weekdayText);
134 }
135 }
136 }
137
138 public void testHalfdayNames() {
139 DateTimeFormatter printer = DateTimeFormat.forPattern("a");
140 for (int i=0; i<ZONES.length; i++) {
141 Chronology chrono = ISOChronology.getInstance(ZONES[i]);
142 MutableDateTime mdt = new MutableDateTime(2004, 5, 30, 0, 20, 30, 40, chrono);
143 for (int hour=0; hour<24; hour++) {
144 mdt.setHourOfDay(hour);
145 int halfday = mdt.get(chrono.halfdayOfDay());
146 String halfdayText = printer.print(mdt);
147 assertEquals(HALFDAYS[halfday], halfdayText);
148 }
149 }
150 }
151 }