123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- /* ===========================================================
- * JFreeChart : a free chart library for the Java(tm) platform
- * ===========================================================
- *
- * (C) Copyright 2000-2013, by Object Refinery Limited and Contributors.
- *
- * Project Info: http://www.jfree.org/jfreechart/index.html
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * This library 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 Lesser General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
- *
- * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
- * Other names may be trademarks of their respective owners.]
- *
- * ---------------------------
- * SegmentedTimelineTest2.java
- * ---------------------------
- * (C) Copyright 2004-2013, by Object Refinery Limited and Contributors.
- *
- * Original Author: David Gilbert (for Object Refinery Limited);
- * Contributor(s): -;
- *
- * Changes
- * -------
- * 02-Aug-2004 : Added standard header (DG);
- * 02-Feb-2007 : Removed author tags all over JFreeChart sources (DG);
- *
- */
- package org.jfree.chart.axis;
- import static org.junit.Assert.assertTrue;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Locale;
- import java.util.TimeZone;
- import org.junit.Test;
- /**
- * Some tests for the {@link SegmentedTimeline} class.
- */
- public class SegmentedTimelineAdditionalTest {
- /**
- * Constructor
- */
- public SegmentedTimelineAdditionalTest() {
- super();
- }
- /**
- * Test 1 checks 9am Friday 26 March 2004 converts to a timeline value and
- * back again correctly. This is prior to Daylight Saving.
- */
- @Test
- public void test1() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Locale savedLocale = Locale.getDefault();
- Locale.setDefault(Locale.UK);
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 26);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- assertTrue("test1", value == (900000 * 34)
- && date.getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- Locale.setDefault(savedLocale);
- }
- /**
- * Test 2 checks 9.15am Friday 26 March 2004 converts to a timeline value
- * and back again correctly. This is prior to Daylight Saving.
- */
- @Test
- public void test2() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 26);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 15);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- assertTrue("test2", value == (900000 * 34 + 900000)
- && date.getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- }
- /**
- * Test 3 checks 9.30am Friday 26 March 2004 converts to a timeline value
- * and back again correctly. This is prior to Daylight Saving.
- */
- @Test
- public void test3() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 26);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 30);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- assertTrue("test3", value == (900000 * 34 + 900000 * 2)
- && date.getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- }
- /**
- * Test 4 checks 9.30am Friday 26 March 2004 (+ 1 millisecond) converts to
- * a timeline value and back again correctly. This is prior to Daylight
- * Saving.
- */
- @Test
- public void test4() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 26);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 30);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 1);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- assertTrue("test4", value == (900000 * 34 + 900000 * 2 + 1)
- && date.getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- }
- /**
- * Test 5 checks 5.30pm Thursday 25 March 2004 converts to a timeline
- * value and back again correctly. As it is in the excluded segment, we
- * expect it to map to 9am, Friday 26 March 2004. This is prior to
- * Daylight Saving.
- */
- @Test
- public void test5() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 25);
- cal.set(Calendar.HOUR_OF_DAY, 17);
- cal.set(Calendar.MINUTE, 30);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- Calendar expectedReverted = Calendar.getInstance(Locale.UK);
- expectedReverted.set(Calendar.YEAR, 2004);
- expectedReverted.set(Calendar.MONTH, Calendar.MARCH);
- expectedReverted.set(Calendar.DAY_OF_MONTH, 26);
- expectedReverted.set(Calendar.HOUR_OF_DAY, 9);
- expectedReverted.set(Calendar.MINUTE, 0);
- expectedReverted.set(Calendar.SECOND, 0);
- expectedReverted.set(Calendar.MILLISECOND, 0);
- assertTrue("test5", value == (900000 * 34)
- && expectedReverted.getTime().getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- }
- /**
- * Test 6 checks that 9am on Sunday 28 March 2004 converts to the timeline
- * value and back again correctly. Note that Saturday and Sunday are
- * excluded from the timeline, so we expect the value to map to 9am on
- * Monday 29 March 2004. This is during daylight saving.
- */
- @Test
- public void test6() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 28);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- Calendar expectedReverted = Calendar.getInstance(Locale.UK);
- expectedReverted.set(Calendar.YEAR, 2004);
- expectedReverted.set(Calendar.MONTH, Calendar.MARCH);
- expectedReverted.set(Calendar.DAY_OF_MONTH, 29);
- expectedReverted.set(Calendar.HOUR_OF_DAY, 9);
- expectedReverted.set(Calendar.MINUTE, 0);
- expectedReverted.set(Calendar.SECOND, 0);
- expectedReverted.set(Calendar.MILLISECOND, 0);
- assertTrue("test6", value == (900000 * 34 * 2)
- && expectedReverted.getTime().getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- }
- /**
- * Test 7 checks 9am Monday 29 March 2004 converts to a timeline value and
- * back again correctly. This is during Daylight Saving.
- */
- @Test
- public void test7() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 29);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- Calendar expectedReverted = Calendar.getInstance();
- expectedReverted.set(Calendar.YEAR, 2004);
- expectedReverted.set(Calendar.MONTH, Calendar.MARCH);
- expectedReverted.set(Calendar.DAY_OF_MONTH, 29);
- expectedReverted.set(Calendar.HOUR_OF_DAY, 9);
- expectedReverted.set(Calendar.MINUTE, 0);
- expectedReverted.set(Calendar.SECOND, 0);
- expectedReverted.set(Calendar.MILLISECOND, 0);
- assertTrue("test7", value == (900000 * 34 * 2)
- && expectedReverted.getTime().getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- }
- /**
- * Test 8.
- */
- @Test
- public void test8() {
- TimeZone savedZone = TimeZone.getDefault();
- TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 29);
- cal.set(Calendar.HOUR_OF_DAY, 10);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date date = cal.getTime();
- SegmentedTimeline timeline = getTimeline();
- // Add exception in included segments
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 29);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 15);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- timeline.addException(cal.getTime());
- long value = timeline.toTimelineValue(date);
- long ms = timeline.toMillisecond(value);
- Calendar cal2 = Calendar.getInstance(Locale.UK);
- cal2.setTime(new Date(ms));
- Date reverted = cal2.getTime();
- Calendar expectedReverted = Calendar.getInstance();
- expectedReverted.set(Calendar.YEAR, 2004);
- expectedReverted.set(Calendar.MONTH, Calendar.MARCH);
- expectedReverted.set(Calendar.DAY_OF_MONTH, 29);
- expectedReverted.set(Calendar.HOUR_OF_DAY, 10);
- expectedReverted.set(Calendar.MINUTE, 0);
- expectedReverted.set(Calendar.SECOND, 0);
- expectedReverted.set(Calendar.MILLISECOND, 0);
- assertTrue("test8", value == (900000 * 34 * 2 + 900000 * (4 - 1))
- && expectedReverted.getTime().getTime() == reverted.getTime());
- TimeZone.setDefault(savedZone);
- }
- /**
- * Creates a timeline from 9am on Thursday 25 March 2004 to 5pm on
- * Tuesday 30 March 2004, for the UK locale.
- *
- * @return A timeline.
- */
- private SegmentedTimeline getTimeline() {
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 25);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date from = cal.getTime();
- cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 2004);
- cal.set(Calendar.MONTH, Calendar.MARCH);
- cal.set(Calendar.DAY_OF_MONTH, 30);
- cal.set(Calendar.HOUR_OF_DAY, 17);
- cal.set(Calendar.MINUTE, 30);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date to = cal.getTime();
- return getTimeline(from, to);
- }
- /**
- * Returns a segmented timeline for 15 minute segments, Monday to Friday
- * only, between 9am and 5pm. The UK locale is used.
- *
- * @param start the start date.
- * @param end the end date.
- *
- * @return The timeline.
- */
- private SegmentedTimeline getTimeline(Date start, Date end) {
- Calendar cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 1970);
- cal.set(Calendar.MONTH, Calendar.JANUARY);
- cal.set(Calendar.DAY_OF_MONTH, 1);
- cal.set(Calendar.HOUR_OF_DAY, 9);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date open = cal.getTime();
- cal = Calendar.getInstance(Locale.UK);
- cal.set(Calendar.YEAR, 1970);
- cal.set(Calendar.MONTH, Calendar.JANUARY);
- cal.set(Calendar.DAY_OF_MONTH, 1);
- cal.set(Calendar.HOUR_OF_DAY, 17);
- cal.set(Calendar.MINUTE, 30);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MILLISECOND, 0);
- Date close = cal.getTime();
- SegmentedTimeline result = null;
- // Create a segmented time line (segment size : 15 minutes)
- long quarterHourCount = (close.getTime() - open.getTime())
- / SegmentedTimeline.FIFTEEN_MINUTE_SEGMENT_SIZE;
- long totalQuarterHourCount = SegmentedTimeline.DAY_SEGMENT_SIZE
- / SegmentedTimeline.FIFTEEN_MINUTE_SEGMENT_SIZE;
- result = new SegmentedTimeline(
- SegmentedTimeline.FIFTEEN_MINUTE_SEGMENT_SIZE,
- (int) quarterHourCount,
- (int) (totalQuarterHourCount - quarterHourCount)
- );
- result.setAdjustForDaylightSaving(true);
- // Set start time
- result.setStartTime(start.getTime());
- // Saturday and Sundays are non business hours
- result.setBaseTimeline(
- SegmentedTimeline.newMondayThroughFridayTimeline()
- );
- /* PUT exclusions in test */
- if (start != null && end != null) {
- result.addBaseTimelineExclusions(start.getTime(), end.getTime());
- }
- return result;
- }
- }
|