Package gnu.testlet.java.util.Calendar

Source Code of gnu.testlet.java.util.Calendar.set

// This file is part of Mauve.

// Mauve is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.

// Mauve is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Mauve; see the file COPYING.  If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.

// Tags: JDK1.1

package gnu.testlet.java.util.Calendar;

import gnu.testlet.Testlet;
import gnu.testlet.TestHarness;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
import java.util.Locale;

public class set implements Testlet
{
  public void test (TestHarness harness)
  {
    testSimple(harness);
    test_DST(harness);
    test_DAY_OF_MONTH(harness);
    testUnsetFields(harness);
    testLenience(harness);
    testConflictingFields(harness);
    testNormalization(harness);
    testModSeconds(harness);
  }

  private void testSimple(TestHarness harness)
  {
    harness.checkPoint("Simple tests");
    Calendar c = Calendar.getInstance(Locale.FRANCE);
    c.setTimeZone(TimeZone.getTimeZone("GMT"));

    c.clear();
    c.set(Calendar.YEAR, 1980);
    c.set(Calendar.MONTH, Calendar.JULY);
    c.set(Calendar.DAY_OF_MONTH, 18);
    c.set(Calendar.HOUR_OF_DAY, 22);
    c.set(Calendar.MINUTE, 13);
    c.set(Calendar.SECOND, 13);
    c.set(Calendar.MILLISECOND, 347);
    harness.check(c.getTime(), new Date(332806393347L));

    // Negative DAY_OF_WEEK_IN_MONTH is somewhat esoteric. Lets test.
    c.clear();
    c.set(Calendar.YEAR, 1980);
    c.set(Calendar.MONTH, Calendar.JULY);
    c.set(Calendar.DAY_OF_WEEK_IN_MONTH, -3);
    c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    c.set(Calendar.HOUR_OF_DAY, 18);
    c.set(Calendar.MINUTE, 19);
    c.set(Calendar.SECOND, 12);
    c.set(Calendar.MILLISECOND, 519);
    harness.check(c.getTime(), new Date(332360352519L));
  }

  public void test_DST (TestHarness harness)
  {
    // Create a custom TimeZone with a daylight-time period.
    SimpleTimeZone stz = new SimpleTimeZone(60 * 60 * 1000, "MyZone",
        Calendar.MARCH, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000,
        Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);

    // Register the timezone as the default:
    TimeZone.setDefault(stz);
   
    Calendar cal = Calendar.getInstance(stz);
    Calendar cal2 = Calendar.getInstance(stz);

    cal.set(2004, Calendar.NOVEMBER, 4, 17, 30);

    harness.checkPoint ("Basic set/get");
   
    // Test field basics.
    harness.check (cal.get(Calendar.MINUTE), 30);
    harness.check (cal.get(Calendar.HOUR), 5);
    harness.check (cal.get(Calendar.MONTH), Calendar.NOVEMBER);
    harness.check (cal.get(Calendar.DAY_OF_WEEK), Calendar.THURSDAY);
    harness.check (cal.get(Calendar.AM_PM), Calendar.PM);
    harness.check (cal.get(Calendar.ZONE_OFFSET), 60 * 60 * 1000);
    harness.check (cal.get(Calendar.DST_OFFSET), 0);
    harness.check (cal.get(Calendar.WEEK_OF_MONTH), 1);

    // Now switch months.
    cal.set(Calendar.MONTH, Calendar.APRIL);
    harness.check (cal.get(Calendar.MONTH), Calendar.APRIL);
    harness.check (cal.get(Calendar.HOUR_OF_DAY), 17);

    harness.checkPoint ("moving calendar across DST boundary");
   
    // Check that hour is still correct after moving into a DST period.
    harness.check (cal.getTime().getHours(), 17);

    cal2.setTimeInMillis(cal.getTimeInMillis());
    harness.check (cal2.get(Calendar.HOUR_OF_DAY), 17);
     
    // Restore default timezone
    TimeZone.setDefault(null);
  }
 
  public void test_DAY_OF_MONTH(TestHarness harness)
  {
    harness.checkPoint("setting DAY_OF_MONTH etc shouldn't effect other fields");
    Calendar c = Calendar.getInstance(Locale.FRANCE);
    SimpleDateFormat df = new SimpleDateFormat("EEEEEEEEEEEEE, yyyy-MM-dd [DDD] HH:mm:ss.SSSS", Locale.US);
    c.set(2004, 9, 1, 12, 0, 0);
    c.set(Calendar.MILLISECOND, 0);
   
    String time = df.format(c.getTime());
    harness.check(time, "Friday, 2004-10-01 [275] 12:00:00.0000");
   
    c.set(Calendar.DAY_OF_MONTH, 31);
    time = df.format(c.getTime());
    harness.check(time, "Sunday, 2004-10-31 [305] 12:00:00.0000");

    c.set(Calendar.MONTH, Calendar.JANUARY);
    time = df.format(c.getTime());
    harness.check(time, "Saturday, 2004-01-31 [031] 12:00:00.0000");
  }

  private void testUnsetFields(TestHarness harness)
  {
    harness.checkPoint("setting only some fields");

    Calendar c = Calendar.getInstance(Locale.FRANCE);
    c.setTimeZone(TimeZone.getTimeZone("GMT"));

    c.clear();
    harness.check(c.getTime(), new Date(0)); // 1970-01-01T00:00Z

    c.clear();
    c.set(Calendar.YEAR, 1982);
    harness.check(c.getTime(), new Date(378691200000L)); // 1982-01-01T00:00Z

    c.clear();
    c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    harness.check(c.getTime(), new Date(259200000L)); // 1970-01-04T00:00Z

    c.clear();
    c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3);
    harness.check(c.getTime(), new Date(1555200000L)); // 1970-01-19T00:00Z

    c.clear();
    c.set(Calendar.WEEK_OF_YEAR, 2);
    harness.check(c.getTime(), new Date(345600000L)); // 1970-01-05T00:00Z

    c.clear();
    c.set(Calendar.YEAR, 1978);
    c.set(Calendar.MONTH, Calendar.AUGUST);
    harness.check(c.getTime(), new Date(270777600000L)); // 1978-08-01T00:00Z

    c.clear();
    c.set(Calendar.YEAR, 2004);
    c.set(Calendar.MONTH, Calendar.NOVEMBER);
    c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
    harness.check(c.getTime(), new Date(1099699200000L)); // 2004-11-06T00:00Z
  }

  private void testLenience(TestHarness harness)
  {
    harness.checkPoint("test the setLenient() functionality");
    Calendar c = Calendar.getInstance(Locale.FRANCE);
    c.setLenient(false);
    c.set(Calendar.MONTH, 42);
    boolean b = false;
    try
      {
  c.get(Calendar.MONTH);
      }
    catch (IllegalArgumentException e)
      {
  b = true;
      }
    harness.check(b);
  }
 
  private void testConflictingFields(TestHarness harness)
  {
    harness.checkPoint("test setting conflicting values of different fields");
    Calendar c = Calendar.getInstance(Locale.FRANCE);
    c.setTimeZone(TimeZone.getTimeZone("GMT"));
    c.clear();

    c.set(Calendar.YEAR, 1997);
    // first setting day of year using one method
    c.set(Calendar.DAY_OF_YEAR, 55);
    // then setting another day with another method
    c.set(Calendar.DAY_OF_MONTH, 18);
    c.set(Calendar.MONTH, Calendar.MAY);
    harness.check(c.getTime(), new Date(863913600000L)); // 1997-05-18T08:00Z

    // the other way around
    c.clear();
    c.set(Calendar.HOUR_OF_DAY, 8);
    c.set(Calendar.YEAR, 1997);
    c.set(Calendar.HOUR_OF_DAY, 8);
    c.set(Calendar.DAY_OF_MONTH, 18);
    c.set(Calendar.MONTH, Calendar.MAY);
    c.set(Calendar.DAY_OF_YEAR, 55);
    harness.check(c.getTime(), new Date(856771200000L)); // 1997-02-24T08:00Z

    // trying three methods
    c.clear();
    c.set(Calendar.HOUR_OF_DAY, 8);
    c.set(Calendar.YEAR, 1997);
    c.set(Calendar.HOUR_OF_DAY, 8);
    c.set(Calendar.DAY_OF_MONTH, 18);
    c.set(Calendar.MONTH, Calendar.MAY);
    c.set(Calendar.DAY_OF_YEAR, 55);

    c.set(Calendar.MONTH, Calendar.AUGUST);
    c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3);
    c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
    harness.check(c.getTime(), new Date(871977600000L)); // 1997-08-19T08:00Z

    // one interesting side effect of the algorithm for interpreting
    // conflicting fields is that if not setting all the values in some
    // of the combinations described under "Calendar Fields Resolution" in
    // the spec then the value set in the incomplete combination will be
    // disregarded.
    c.clear();
    c.set(Calendar.DAY_OF_YEAR, 55);
    c.set(Calendar.MONTH, Calendar.AUGUST);
    harness.check(c.get(Calendar.MONTH), Calendar.FEBRUARY);

    c.clear();
    c.set(Calendar.HOUR_OF_DAY, 14);
    c.set(Calendar.HOUR, 8);
    harness.check(c.get(Calendar.HOUR), 2);
  }

  private void testNormalization(TestHarness harness)
  {
    harness.checkPoint("Normalization");
    Calendar c = Calendar.getInstance(Locale.FRANCE);
    c.setTimeZone(TimeZone.getTimeZone("GMT"));
   
    // negative HOUR_OF_DAY
    c.clear();
    c.set(Calendar.YEAR, 1980);
    c.set(Calendar.MONTH, Calendar.JULY);
    c.set(Calendar.DAY_OF_MONTH, 18);
    c.set(Calendar.HOUR_OF_DAY, -22);
    c.set(Calendar.MINUTE, 13);
    c.set(Calendar.SECOND, 13);
    harness.check(c.getTime(), new Date(332647993000L)); // 1980-07-17T02:13Z

    // HOUR == 12
    c.clear();
    c.set(Calendar.YEAR, 1980);
    c.set(Calendar.MONTH, Calendar.JULY);
    c.set(Calendar.DAY_OF_MONTH, 18);
    c.set(Calendar.HOUR, 12);
    c.set(Calendar.AM_PM, Calendar.AM);
    c.set(Calendar.MINUTE, 13);
    c.set(Calendar.SECOND, 13);
    harness.check(c.get(Calendar.HOUR), 0);
    harness.check(c.get(Calendar.AM_PM), Calendar.PM);

    // lets normalize ourselves into the leap day from a different year
    c.clear();
    c.set(Calendar.YEAR, 1997);
    c.set(Calendar.MONTH, Calendar.MARCH);
    c.set(Calendar.DAY_OF_MONTH, 1);
    c.set(Calendar.HOUR_OF_DAY, -366 * 24);
    harness.check(c.getTime(), new Date(825552000000L)); // 1996-02-29T00:00Z

   // XXX could have some fun here with leap seconds
  }

  private void testModSeconds(TestHarness harness)
  {
    harness.checkPoint("ModSeconds");
    Calendar c = Calendar.getInstance(Locale.FRANCE);
    c.setTimeZone(TimeZone.getTimeZone("GMT"));
    c.setLenient(true);
    c.set(Calendar.YEAR, 2005);
    c.set(Calendar.MONTH, 10);
    c.set(Calendar.DAY_OF_MONTH, 2);
    c.set(Calendar.HOUR, 2);
    c.set(Calendar.AM_PM, Calendar.AM);
    c.set(Calendar.MINUTE, 30);

    long t = c.getTimeInMillis() + 5500;

    c.setTimeInMillis(t);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    c.getTime();
    harness.check(c.get(Calendar.YEAR), 2005);
    harness.check(c.get(Calendar.SECOND), 0);
  }
}
TOP

Related Classes of gnu.testlet.java.util.Calendar.set

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.