DateAxisTest.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203
  1. /* ===========================================================
  2. * JFreeChart : a free chart library for the Java(tm) platform
  3. * ===========================================================
  4. *
  5. * (C) Copyright 2000-2014, by Object Refinery Limited and Contributors.
  6. *
  7. * Project Info: http://www.jfree.org/jfreechart/index.html
  8. *
  9. * This library is free software; you can redistribute it and/or modify it
  10. * under the terms of the GNU Lesser General Public License as published by
  11. * the Free Software Foundation; either version 2.1 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This library is distributed in the hope that it will be useful, but
  15. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  16. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
  17. * License for more details.
  18. *
  19. * You should have received a copy of the GNU Lesser General Public
  20. * License along with this library; if not, write to the Free Software
  21. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  22. * USA.
  23. *
  24. * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
  25. * Other names may be trademarks of their respective owners.]
  26. *
  27. * -----------------
  28. * DateAxisTest.java
  29. * -----------------
  30. * (C) Copyright 2003-2014, by Object Refinery Limited and Contributors.
  31. *
  32. * Original Author: David Gilbert (for Object Refinery Limited);
  33. * Contributor(s): -;
  34. *
  35. * Changes
  36. * -------
  37. * 22-Apr-2003 : Version 1 (DG);
  38. * 07-Jan-2005 : Added test for hashCode() method (DG);
  39. * 25-Sep-2005 : New tests for bug 1564977 (DG);
  40. * 19-Apr-2007 : Added further checks for setMinimumDate() and
  41. * setMaximumDate() (DG);
  42. * 03-May-2007 : Replaced the tests for the previousStandardDate() method with
  43. * new tests that check that the previousStandardDate and the
  44. * next standard date do in fact span the reference date (DG);
  45. * 25-Nov-2008 : Added testBug2201869 (DG);
  46. * 08-Feb-2012 : Added testBug3484403 (MH);
  47. *
  48. */
  49. package org.jfree.chart.axis;
  50. import static org.junit.Assert.assertEquals;
  51. import static org.junit.Assert.assertFalse;
  52. import static org.junit.Assert.assertTrue;
  53. import org.junit.Test;
  54. import java.awt.Graphics2D;
  55. import java.awt.geom.Rectangle2D;
  56. import java.awt.image.BufferedImage;
  57. import java.text.SimpleDateFormat;
  58. import java.util.Arrays;
  59. import java.util.Calendar;
  60. import java.util.Date;
  61. import java.util.GregorianCalendar;
  62. import java.util.List;
  63. import java.util.Locale;
  64. import java.util.TimeZone;
  65. import org.jfree.chart.TestUtilities;
  66. import org.jfree.data.time.DateRange;
  67. import org.jfree.data.time.Day;
  68. import org.jfree.data.time.Hour;
  69. import org.jfree.data.time.Millisecond;
  70. import org.jfree.data.time.Month;
  71. import org.jfree.data.time.Second;
  72. import org.jfree.data.time.Year;
  73. import org.jfree.ui.RectangleEdge;
  74. /**
  75. * Tests for the {@link DateAxis} class.
  76. */
  77. public class DateAxisTest {
  78. static class MyDateAxis extends DateAxis {
  79. /**
  80. * Creates a new instance.
  81. *
  82. * @param label the label.
  83. */
  84. public MyDateAxis(String label) {
  85. super(label);
  86. }
  87. @Override
  88. public Date previousStandardDate(Date d, DateTickUnit unit) {
  89. return super.previousStandardDate(d, unit);
  90. }
  91. }
  92. /**
  93. * Confirm that the equals method can distinguish all the required fields.
  94. */
  95. @Test
  96. public void testEquals() {
  97. DateAxis a1 = new DateAxis("Test");
  98. DateAxis a2 = new DateAxis("Test");
  99. assertTrue(a1.equals(a2));
  100. assertFalse(a1.equals(null));
  101. assertFalse(a1.equals("Some non-DateAxis object"));
  102. a1 = new DateAxis("Test", TimeZone.getTimeZone("PST"), Locale.US);
  103. assertFalse(a1.equals(a2));
  104. a2 = new DateAxis("Test", TimeZone.getTimeZone("PST"), Locale.US);
  105. assertTrue(a1.equals(a2));
  106. a1 = new DateAxis("Test", TimeZone.getTimeZone("PST"), Locale.FRANCE);
  107. assertFalse(a1.equals(a2));
  108. a2 = new DateAxis("Test", TimeZone.getTimeZone("PST"), Locale.FRANCE);
  109. assertTrue(a1.equals(a2));
  110. // tickUnit
  111. a1.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 7));
  112. assertFalse(a1.equals(a2));
  113. a2.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 7));
  114. assertTrue(a1.equals(a2));
  115. // dateFormatOverride
  116. a1.setDateFormatOverride(new SimpleDateFormat("yyyy"));
  117. assertFalse(a1.equals(a2));
  118. a2.setDateFormatOverride(new SimpleDateFormat("yyyy"));
  119. assertTrue(a1.equals(a2));
  120. // tickMarkPosition
  121. a1.setTickMarkPosition(DateTickMarkPosition.END);
  122. assertFalse(a1.equals(a2));
  123. a2.setTickMarkPosition(DateTickMarkPosition.END);
  124. assertTrue(a1.equals(a2));
  125. // timeline
  126. a1.setTimeline(SegmentedTimeline.newMondayThroughFridayTimeline());
  127. assertFalse(a1.equals(a2));
  128. a2.setTimeline(SegmentedTimeline.newMondayThroughFridayTimeline());
  129. assertTrue(a1.equals(a2));
  130. }
  131. /**
  132. * A test for bug report 1472942. The DateFormat.equals() method is not
  133. * checking the range attribute.
  134. */
  135. @Test
  136. public void test1472942() {
  137. DateAxis a1 = new DateAxis("Test");
  138. DateAxis a2 = new DateAxis("Test");
  139. assertTrue(a1.equals(a2));
  140. // range
  141. a1.setRange(new Date(1L), new Date(2L));
  142. assertFalse(a1.equals(a2));
  143. a2.setRange(new Date(1L), new Date(2L));
  144. assertTrue(a1.equals(a2));
  145. }
  146. /**
  147. * Two objects that are equal are required to return the same hashCode.
  148. */
  149. @Test
  150. public void testHashCode() {
  151. DateAxis a1 = new DateAxis("Test");
  152. DateAxis a2 = new DateAxis("Test");
  153. assertTrue(a1.equals(a2));
  154. int h1 = a1.hashCode();
  155. int h2 = a2.hashCode();
  156. assertEquals(h1, h2);
  157. }
  158. /**
  159. * Confirm that cloning works.
  160. */
  161. @Test
  162. public void testCloning() throws CloneNotSupportedException {
  163. DateAxis a1 = new DateAxis("Test");
  164. DateAxis a2 = (DateAxis) a1.clone();
  165. assertTrue(a1 != a2);
  166. assertTrue(a1.getClass() == a2.getClass());
  167. assertTrue(a1.equals(a2));
  168. }
  169. /**
  170. * Test that the setRange() method works.
  171. */
  172. @Test
  173. public void testSetRange() {
  174. DateAxis axis = new DateAxis("Test Axis");
  175. Calendar calendar = Calendar.getInstance();
  176. calendar.set(1999, Calendar.JANUARY, 3);
  177. Date d1 = calendar.getTime();
  178. calendar.set(1999, Calendar.JANUARY, 31);
  179. Date d2 = calendar.getTime();
  180. axis.setRange(d1, d2);
  181. DateRange range = (DateRange) axis.getRange();
  182. assertEquals(d1, range.getLowerDate());
  183. assertEquals(d2, range.getUpperDate());
  184. }
  185. /**
  186. * Test that the setMaximumDate() method works.
  187. */
  188. @Test
  189. public void testSetMaximumDate() {
  190. DateAxis axis = new DateAxis("Test Axis");
  191. Date date = new Date();
  192. axis.setMaximumDate(date);
  193. assertEquals(date, axis.getMaximumDate());
  194. // check that setting the max date to something on or before the
  195. // current min date works...
  196. Date d1 = new Date();
  197. Date d2 = new Date(d1.getTime() + 1);
  198. Date d0 = new Date(d1.getTime() - 1);
  199. axis.setMaximumDate(d2);
  200. axis.setMinimumDate(d1);
  201. axis.setMaximumDate(d1);
  202. assertEquals(d0, axis.getMinimumDate());
  203. }
  204. /**
  205. * Test that the setMinimumDate() method works.
  206. */
  207. @Test
  208. public void testSetMinimumDate() {
  209. DateAxis axis = new DateAxis("Test Axis");
  210. Date d1 = new Date();
  211. Date d2 = new Date(d1.getTime() + 1);
  212. axis.setMaximumDate(d2);
  213. axis.setMinimumDate(d1);
  214. assertEquals(d1, axis.getMinimumDate());
  215. // check that setting the min date to something on or after the
  216. // current min date works...
  217. Date d3 = new Date(d2.getTime() + 1);
  218. axis.setMinimumDate(d2);
  219. assertEquals(d3, axis.getMaximumDate());
  220. }
  221. /**
  222. * Tests two doubles for 'near enough' equality.
  223. *
  224. * @param d1 number 1.
  225. * @param d2 number 2.
  226. * @param tolerance maximum tolerance.
  227. *
  228. * @return A boolean.
  229. */
  230. private boolean same(double d1, double d2, double tolerance) {
  231. return (Math.abs(d1 - d2) < tolerance);
  232. }
  233. /**
  234. * Test the translation of Java2D values to data values.
  235. */
  236. @Test
  237. public void testJava2DToValue() {
  238. DateAxis axis = new DateAxis();
  239. axis.setRange(50.0, 100.0);
  240. Rectangle2D dataArea = new Rectangle2D.Double(10.0, 50.0, 400.0, 300.0);
  241. double y1 = axis.java2DToValue(75.0, dataArea, RectangleEdge.LEFT);
  242. assertTrue(same(y1, 95.8333333, 1.0));
  243. double y2 = axis.java2DToValue(75.0, dataArea, RectangleEdge.RIGHT);
  244. assertTrue(same(y2, 95.8333333, 1.0));
  245. double x1 = axis.java2DToValue(75.0, dataArea, RectangleEdge.TOP);
  246. assertTrue(same(x1, 58.125, 1.0));
  247. double x2 = axis.java2DToValue(75.0, dataArea, RectangleEdge.BOTTOM);
  248. assertTrue(same(x2, 58.125, 1.0));
  249. axis.setInverted(true);
  250. double y3 = axis.java2DToValue(75.0, dataArea, RectangleEdge.LEFT);
  251. assertTrue(same(y3, 54.1666667, 1.0));
  252. double y4 = axis.java2DToValue(75.0, dataArea, RectangleEdge.RIGHT);
  253. assertTrue(same(y4, 54.1666667, 1.0));
  254. double x3 = axis.java2DToValue(75.0, dataArea, RectangleEdge.TOP);
  255. assertTrue(same(x3, 91.875, 1.0));
  256. double x4 = axis.java2DToValue(75.0, dataArea, RectangleEdge.BOTTOM);
  257. assertTrue(same(x4, 91.875, 1.0));
  258. }
  259. /**
  260. * Serialize an instance, restore it, and check for equality.
  261. */
  262. @Test
  263. public void testSerialization() {
  264. DateAxis a1 = new DateAxis("Test Axis");
  265. DateAxis a2 = (DateAxis) TestUtilities.serialised(a1);
  266. assertEquals(a1, a2);
  267. }
  268. /**
  269. * A basic check for the testPreviousStandardDate() method when the
  270. * tick unit is 1 year.
  271. */
  272. @Test
  273. public void testPreviousStandardDateYearA() {
  274. MyDateAxis axis = new MyDateAxis("Year");
  275. Year y2006 = new Year(2006);
  276. Year y2007 = new Year(2007);
  277. // five dates to check...
  278. Date d0 = new Date(y2006.getFirstMillisecond());
  279. Date d1 = new Date(y2006.getFirstMillisecond() + 500L);
  280. Date d2 = new Date(y2006.getMiddleMillisecond());
  281. Date d3 = new Date(y2006.getMiddleMillisecond() + 500L);
  282. Date d4 = new Date(y2006.getLastMillisecond());
  283. Date end = new Date(y2007.getLastMillisecond());
  284. DateTickUnit unit = new DateTickUnit(DateTickUnit.YEAR, 1);
  285. axis.setTickUnit(unit);
  286. // START: check d0 and d1
  287. axis.setTickMarkPosition(DateTickMarkPosition.START);
  288. axis.setRange(d0, end);
  289. Date psd = axis.previousStandardDate(d0, unit);
  290. Date nsd = unit.addToDate(psd);
  291. assertTrue(psd.getTime() < d0.getTime());
  292. assertTrue(nsd.getTime() >= d0.getTime());
  293. axis.setRange(d1, end);
  294. psd = axis.previousStandardDate(d1, unit);
  295. nsd = unit.addToDate(psd);
  296. assertTrue(psd.getTime() < d1.getTime());
  297. assertTrue(nsd.getTime() >= d1.getTime());
  298. // MIDDLE: check d1, d2 and d3
  299. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  300. axis.setRange(d1, end);
  301. psd = axis.previousStandardDate(d1, unit);
  302. nsd = unit.addToDate(psd);
  303. assertTrue(psd.getTime() < d1.getTime());
  304. assertTrue(nsd.getTime() >= d1.getTime());
  305. axis.setRange(d2, end);
  306. psd = axis.previousStandardDate(d2, unit);
  307. nsd = unit.addToDate(psd);
  308. assertTrue(psd.getTime() < d2.getTime());
  309. assertTrue(nsd.getTime() >= d2.getTime());
  310. axis.setRange(d3, end);
  311. psd = axis.previousStandardDate(d3, unit);
  312. nsd = unit.addToDate(psd);
  313. assertTrue(psd.getTime() < d3.getTime());
  314. assertTrue(nsd.getTime() >= d3.getTime());
  315. // END: check d3 and d4
  316. axis.setTickMarkPosition(DateTickMarkPosition.END);
  317. axis.setRange(d3, end);
  318. psd = axis.previousStandardDate(d3, unit);
  319. nsd = unit.addToDate(psd);
  320. assertTrue(psd.getTime() < d3.getTime());
  321. assertTrue(nsd.getTime() >= d3.getTime());
  322. axis.setRange(d4, end);
  323. psd = axis.previousStandardDate(d4, unit);
  324. nsd = unit.addToDate(psd);
  325. assertTrue(psd.getTime() < d4.getTime());
  326. assertTrue(nsd.getTime() >= d4.getTime());
  327. }
  328. /**
  329. * A basic check for the testPreviousStandardDate() method when the
  330. * tick unit is 10 years (just for the sake of having a multiple).
  331. */
  332. @Test
  333. public void testPreviousStandardDateYearB() {
  334. MyDateAxis axis = new MyDateAxis("Year");
  335. Year y2006 = new Year(2006);
  336. Year y2007 = new Year(2007);
  337. // five dates to check...
  338. Date d0 = new Date(y2006.getFirstMillisecond());
  339. Date d1 = new Date(y2006.getFirstMillisecond() + 500L);
  340. Date d2 = new Date(y2006.getMiddleMillisecond());
  341. Date d3 = new Date(y2006.getMiddleMillisecond() + 500L);
  342. Date d4 = new Date(y2006.getLastMillisecond());
  343. Date end = new Date(y2007.getLastMillisecond());
  344. DateTickUnit unit = new DateTickUnit(DateTickUnit.YEAR, 10);
  345. axis.setTickUnit(unit);
  346. // START: check d0 and d1
  347. axis.setTickMarkPosition(DateTickMarkPosition.START);
  348. axis.setRange(d0, end);
  349. Date psd = axis.previousStandardDate(d0, unit);
  350. Date nsd = unit.addToDate(psd);
  351. assertTrue(psd.getTime() < d0.getTime());
  352. assertTrue(nsd.getTime() >= d0.getTime());
  353. axis.setRange(d1, end);
  354. psd = axis.previousStandardDate(d1, unit);
  355. nsd = unit.addToDate(psd);
  356. assertTrue(psd.getTime() < d1.getTime());
  357. assertTrue(nsd.getTime() >= d1.getTime());
  358. // MIDDLE: check d1, d2 and d3
  359. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  360. axis.setRange(d1, end);
  361. psd = axis.previousStandardDate(d1, unit);
  362. nsd = unit.addToDate(psd);
  363. assertTrue(psd.getTime() < d1.getTime());
  364. assertTrue(nsd.getTime() >= d1.getTime());
  365. axis.setRange(d2, end);
  366. psd = axis.previousStandardDate(d2, unit);
  367. nsd = unit.addToDate(psd);
  368. assertTrue(psd.getTime() < d2.getTime());
  369. assertTrue(nsd.getTime() >= d2.getTime());
  370. axis.setRange(d3, end);
  371. psd = axis.previousStandardDate(d3, unit);
  372. nsd = unit.addToDate(psd);
  373. assertTrue(psd.getTime() < d3.getTime());
  374. assertTrue(nsd.getTime() >= d3.getTime());
  375. // END: check d3 and d4
  376. axis.setTickMarkPosition(DateTickMarkPosition.END);
  377. axis.setRange(d3, end);
  378. psd = axis.previousStandardDate(d3, unit);
  379. nsd = unit.addToDate(psd);
  380. assertTrue(psd.getTime() < d3.getTime());
  381. assertTrue(nsd.getTime() >= d3.getTime());
  382. axis.setRange(d4, end);
  383. psd = axis.previousStandardDate(d4, unit);
  384. nsd = unit.addToDate(psd);
  385. assertTrue(psd.getTime() < d4.getTime());
  386. assertTrue(nsd.getTime() >= d4.getTime());
  387. }
  388. /**
  389. * A basic check for the testPreviousStandardDate() method when the
  390. * tick unit is 1 month.
  391. */
  392. @Test
  393. public void testPreviousStandardDateMonthA() {
  394. MyDateAxis axis = new MyDateAxis("Month");
  395. Month nov2006 = new Month(11, 2006);
  396. Month dec2006 = new Month(12, 2006);
  397. // five dates to check...
  398. Date d0 = new Date(nov2006.getFirstMillisecond());
  399. Date d1 = new Date(nov2006.getFirstMillisecond() + 500L);
  400. Date d2 = new Date(nov2006.getMiddleMillisecond());
  401. Date d3 = new Date(nov2006.getMiddleMillisecond() + 500L);
  402. Date d4 = new Date(nov2006.getLastMillisecond());
  403. Date end = new Date(dec2006.getLastMillisecond());
  404. DateTickUnit unit = new DateTickUnit(DateTickUnit.MONTH, 1);
  405. axis.setTickUnit(unit);
  406. // START: check d0 and d1
  407. axis.setTickMarkPosition(DateTickMarkPosition.START);
  408. axis.setRange(d0, end);
  409. Date psd = axis.previousStandardDate(d0, unit);
  410. Date nsd = unit.addToDate(psd);
  411. assertTrue(psd.getTime() < d0.getTime());
  412. assertTrue(nsd.getTime() >= d0.getTime());
  413. axis.setRange(d1, end);
  414. psd = axis.previousStandardDate(d1, unit);
  415. nsd = unit.addToDate(psd);
  416. assertTrue(psd.getTime() < d1.getTime());
  417. assertTrue(nsd.getTime() >= d1.getTime());
  418. // MIDDLE: check d1, d2 and d3
  419. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  420. axis.setRange(d1, end);
  421. psd = axis.previousStandardDate(d1, unit);
  422. nsd = unit.addToDate(psd);
  423. assertTrue(psd.getTime() < d1.getTime());
  424. assertTrue(nsd.getTime() >= d1.getTime());
  425. axis.setRange(d2, end);
  426. psd = axis.previousStandardDate(d2, unit);
  427. nsd = unit.addToDate(psd);
  428. assertTrue(psd.getTime() < d2.getTime());
  429. assertTrue(nsd.getTime() >= d2.getTime());
  430. axis.setRange(d3, end);
  431. psd = axis.previousStandardDate(d3, unit);
  432. nsd = unit.addToDate(psd);
  433. assertTrue(psd.getTime() < d3.getTime());
  434. assertTrue(nsd.getTime() >= d3.getTime());
  435. // END: check d3 and d4
  436. axis.setTickMarkPosition(DateTickMarkPosition.END);
  437. axis.setRange(d3, end);
  438. psd = axis.previousStandardDate(d3, unit);
  439. nsd = unit.addToDate(psd);
  440. assertTrue(psd.getTime() < d3.getTime());
  441. assertTrue(nsd.getTime() >= d3.getTime());
  442. axis.setRange(d4, end);
  443. psd = axis.previousStandardDate(d4, unit);
  444. nsd = unit.addToDate(psd);
  445. assertTrue(psd.getTime() < d4.getTime());
  446. assertTrue(nsd.getTime() >= d4.getTime());
  447. }
  448. /**
  449. * A basic check for the testPreviousStandardDate() method when the
  450. * tick unit is 3 months (just for the sake of having a multiple).
  451. */
  452. @Test
  453. public void testPreviousStandardDateMonthB() {
  454. MyDateAxis axis = new MyDateAxis("Month");
  455. Month nov2006 = new Month(11, 2006);
  456. Month dec2006 = new Month(12, 2006);
  457. // five dates to check...
  458. Date d0 = new Date(nov2006.getFirstMillisecond());
  459. Date d1 = new Date(nov2006.getFirstMillisecond() + 500L);
  460. Date d2 = new Date(nov2006.getMiddleMillisecond());
  461. Date d3 = new Date(nov2006.getMiddleMillisecond() + 500L);
  462. Date d4 = new Date(nov2006.getLastMillisecond());
  463. Date end = new Date(dec2006.getLastMillisecond());
  464. DateTickUnit unit = new DateTickUnit(DateTickUnit.MONTH, 3);
  465. axis.setTickUnit(unit);
  466. // START: check d0 and d1
  467. axis.setTickMarkPosition(DateTickMarkPosition.START);
  468. axis.setRange(d0, end);
  469. Date psd = axis.previousStandardDate(d0, unit);
  470. Date nsd = unit.addToDate(psd);
  471. assertTrue(psd.getTime() < d0.getTime());
  472. assertTrue(nsd.getTime() >= d0.getTime());
  473. axis.setRange(d1, end);
  474. psd = axis.previousStandardDate(d1, unit);
  475. nsd = unit.addToDate(psd);
  476. assertTrue(psd.getTime() < d1.getTime());
  477. assertTrue(nsd.getTime() >= d1.getTime());
  478. // MIDDLE: check d1, d2 and d3
  479. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  480. axis.setRange(d1, end);
  481. psd = axis.previousStandardDate(d1, unit);
  482. nsd = unit.addToDate(psd);
  483. assertTrue(psd.getTime() < d1.getTime());
  484. assertTrue(nsd.getTime() >= d1.getTime());
  485. axis.setRange(d2, end);
  486. psd = axis.previousStandardDate(d2, unit);
  487. nsd = unit.addToDate(psd);
  488. assertTrue(psd.getTime() < d2.getTime());
  489. assertTrue(nsd.getTime() >= d2.getTime());
  490. axis.setRange(d3, end);
  491. psd = axis.previousStandardDate(d3, unit);
  492. nsd = unit.addToDate(psd);
  493. assertTrue(psd.getTime() < d3.getTime());
  494. assertTrue(nsd.getTime() >= d3.getTime());
  495. // END: check d3 and d4
  496. axis.setTickMarkPosition(DateTickMarkPosition.END);
  497. axis.setRange(d3, end);
  498. psd = axis.previousStandardDate(d3, unit);
  499. nsd = unit.addToDate(psd);
  500. assertTrue(psd.getTime() < d3.getTime());
  501. assertTrue(nsd.getTime() >= d3.getTime());
  502. axis.setRange(d4, end);
  503. psd = axis.previousStandardDate(d4, unit);
  504. nsd = unit.addToDate(psd);
  505. assertTrue(psd.getTime() < d4.getTime());
  506. assertTrue(nsd.getTime() >= d4.getTime());
  507. }
  508. /**
  509. * A basic check for the testPreviousStandardDate() method when the
  510. * tick unit is 1 day.
  511. */
  512. @Test
  513. public void testPreviousStandardDateDayA() {
  514. MyDateAxis axis = new MyDateAxis("Day");
  515. Day apr12007 = new Day(1, 4, 2007);
  516. Day apr22007 = new Day(2, 4, 2007);
  517. // five dates to check...
  518. Date d0 = new Date(apr12007.getFirstMillisecond());
  519. Date d1 = new Date(apr12007.getFirstMillisecond() + 500L);
  520. Date d2 = new Date(apr12007.getMiddleMillisecond());
  521. Date d3 = new Date(apr12007.getMiddleMillisecond() + 500L);
  522. Date d4 = new Date(apr12007.getLastMillisecond());
  523. Date end = new Date(apr22007.getLastMillisecond());
  524. DateTickUnit unit = new DateTickUnit(DateTickUnit.DAY, 1);
  525. axis.setTickUnit(unit);
  526. // START: check d0 and d1
  527. axis.setTickMarkPosition(DateTickMarkPosition.START);
  528. axis.setRange(d0, end);
  529. Date psd = axis.previousStandardDate(d0, unit);
  530. Date nsd = unit.addToDate(psd);
  531. assertTrue(psd.getTime() < d0.getTime());
  532. assertTrue(nsd.getTime() >= d0.getTime());
  533. axis.setRange(d1, end);
  534. psd = axis.previousStandardDate(d1, unit);
  535. nsd = unit.addToDate(psd);
  536. assertTrue(psd.getTime() < d1.getTime());
  537. assertTrue(nsd.getTime() >= d1.getTime());
  538. // MIDDLE: check d1, d2 and d3
  539. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  540. axis.setRange(d1, end);
  541. psd = axis.previousStandardDate(d1, unit);
  542. nsd = unit.addToDate(psd);
  543. assertTrue(psd.getTime() < d1.getTime());
  544. assertTrue(nsd.getTime() >= d1.getTime());
  545. axis.setRange(d2, end);
  546. psd = axis.previousStandardDate(d2, unit);
  547. nsd = unit.addToDate(psd);
  548. assertTrue(psd.getTime() < d2.getTime());
  549. assertTrue(nsd.getTime() >= d2.getTime());
  550. axis.setRange(d3, end);
  551. psd = axis.previousStandardDate(d3, unit);
  552. nsd = unit.addToDate(psd);
  553. assertTrue(psd.getTime() < d3.getTime());
  554. assertTrue(nsd.getTime() >= d3.getTime());
  555. // END: check d3 and d4
  556. axis.setTickMarkPosition(DateTickMarkPosition.END);
  557. axis.setRange(d3, end);
  558. psd = axis.previousStandardDate(d3, unit);
  559. nsd = unit.addToDate(psd);
  560. assertTrue(psd.getTime() < d3.getTime());
  561. assertTrue(nsd.getTime() >= d3.getTime());
  562. axis.setRange(d4, end);
  563. psd = axis.previousStandardDate(d4, unit);
  564. nsd = unit.addToDate(psd);
  565. assertTrue(psd.getTime() < d4.getTime());
  566. assertTrue(nsd.getTime() >= d4.getTime());
  567. }
  568. /**
  569. * A basic check for the testPreviousStandardDate() method when the
  570. * tick unit is 7 days (just for the sake of having a multiple).
  571. */
  572. @Test
  573. public void testPreviousStandardDateDayB() {
  574. MyDateAxis axis = new MyDateAxis("Day");
  575. Day apr12007 = new Day(1, 4, 2007);
  576. Day apr22007 = new Day(2, 4, 2007);
  577. // five dates to check...
  578. Date d0 = new Date(apr12007.getFirstMillisecond());
  579. Date d1 = new Date(apr12007.getFirstMillisecond() + 500L);
  580. Date d2 = new Date(apr12007.getMiddleMillisecond());
  581. Date d3 = new Date(apr12007.getMiddleMillisecond() + 500L);
  582. Date d4 = new Date(apr12007.getLastMillisecond());
  583. Date end = new Date(apr22007.getLastMillisecond());
  584. DateTickUnit unit = new DateTickUnit(DateTickUnit.DAY, 7);
  585. axis.setTickUnit(unit);
  586. // START: check d0 and d1
  587. axis.setTickMarkPosition(DateTickMarkPosition.START);
  588. axis.setRange(d0, end);
  589. Date psd = axis.previousStandardDate(d0, unit);
  590. Date nsd = unit.addToDate(psd);
  591. assertTrue(psd.getTime() < d0.getTime());
  592. assertTrue(nsd.getTime() >= d0.getTime());
  593. axis.setRange(d1, end);
  594. psd = axis.previousStandardDate(d1, unit);
  595. nsd = unit.addToDate(psd);
  596. assertTrue(psd.getTime() < d1.getTime());
  597. assertTrue(nsd.getTime() >= d1.getTime());
  598. // MIDDLE: check d1, d2 and d3
  599. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  600. axis.setRange(d1, end);
  601. psd = axis.previousStandardDate(d1, unit);
  602. nsd = unit.addToDate(psd);
  603. assertTrue(psd.getTime() < d1.getTime());
  604. assertTrue(nsd.getTime() >= d1.getTime());
  605. axis.setRange(d2, end);
  606. psd = axis.previousStandardDate(d2, unit);
  607. nsd = unit.addToDate(psd);
  608. assertTrue(psd.getTime() < d2.getTime());
  609. assertTrue(nsd.getTime() >= d2.getTime());
  610. axis.setRange(d3, end);
  611. psd = axis.previousStandardDate(d3, unit);
  612. nsd = unit.addToDate(psd);
  613. assertTrue(psd.getTime() < d3.getTime());
  614. assertTrue(nsd.getTime() >= d3.getTime());
  615. // END: check d3 and d4
  616. axis.setTickMarkPosition(DateTickMarkPosition.END);
  617. axis.setRange(d3, end);
  618. psd = axis.previousStandardDate(d3, unit);
  619. nsd = unit.addToDate(psd);
  620. assertTrue(psd.getTime() < d3.getTime());
  621. assertTrue(nsd.getTime() >= d3.getTime());
  622. axis.setRange(d4, end);
  623. psd = axis.previousStandardDate(d4, unit);
  624. nsd = unit.addToDate(psd);
  625. assertTrue(psd.getTime() < d4.getTime());
  626. assertTrue(nsd.getTime() >= d4.getTime());
  627. }
  628. /**
  629. * A basic check for the testPreviousStandardDate() method when the
  630. * tick unit is 1 hour.
  631. */
  632. @Test
  633. public void testPreviousStandardDateHourA() {
  634. MyDateAxis axis = new MyDateAxis("Hour");
  635. Hour h0 = new Hour(12, 1, 4, 2007);
  636. Hour h1 = new Hour(13, 1, 4, 2007);
  637. // five dates to check...
  638. Date d0 = new Date(h0.getFirstMillisecond());
  639. Date d1 = new Date(h0.getFirstMillisecond() + 500L);
  640. Date d2 = new Date(h0.getMiddleMillisecond());
  641. Date d3 = new Date(h0.getMiddleMillisecond() + 500L);
  642. Date d4 = new Date(h0.getLastMillisecond());
  643. Date end = new Date(h1.getLastMillisecond());
  644. DateTickUnit unit = new DateTickUnit(DateTickUnit.HOUR, 1);
  645. axis.setTickUnit(unit);
  646. // START: check d0 and d1
  647. axis.setTickMarkPosition(DateTickMarkPosition.START);
  648. axis.setRange(d0, end);
  649. Date psd = axis.previousStandardDate(d0, unit);
  650. Date nsd = unit.addToDate(psd);
  651. assertTrue(psd.getTime() < d0.getTime());
  652. assertTrue(nsd.getTime() >= d0.getTime());
  653. axis.setRange(d1, end);
  654. psd = axis.previousStandardDate(d1, unit);
  655. nsd = unit.addToDate(psd);
  656. assertTrue(psd.getTime() < d1.getTime());
  657. assertTrue(nsd.getTime() >= d1.getTime());
  658. // MIDDLE: check d1, d2 and d3
  659. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  660. axis.setRange(d1, end);
  661. psd = axis.previousStandardDate(d1, unit);
  662. nsd = unit.addToDate(psd);
  663. assertTrue(psd.getTime() < d1.getTime());
  664. assertTrue(nsd.getTime() >= d1.getTime());
  665. axis.setRange(d2, end);
  666. psd = axis.previousStandardDate(d2, unit);
  667. nsd = unit.addToDate(psd);
  668. assertTrue(psd.getTime() < d2.getTime());
  669. assertTrue(nsd.getTime() >= d2.getTime());
  670. axis.setRange(d3, end);
  671. psd = axis.previousStandardDate(d3, unit);
  672. nsd = unit.addToDate(psd);
  673. assertTrue(psd.getTime() < d3.getTime());
  674. assertTrue(nsd.getTime() >= d3.getTime());
  675. // END: check d3 and d4
  676. axis.setTickMarkPosition(DateTickMarkPosition.END);
  677. axis.setRange(d3, end);
  678. psd = axis.previousStandardDate(d3, unit);
  679. nsd = unit.addToDate(psd);
  680. assertTrue(psd.getTime() < d3.getTime());
  681. assertTrue(nsd.getTime() >= d3.getTime());
  682. axis.setRange(d4, end);
  683. psd = axis.previousStandardDate(d4, unit);
  684. nsd = unit.addToDate(psd);
  685. assertTrue(psd.getTime() < d4.getTime());
  686. assertTrue(nsd.getTime() >= d4.getTime());
  687. }
  688. /**
  689. * A basic check for the testPreviousStandardDate() method when the
  690. * tick unit is 6 hours (just for the sake of having a multiple).
  691. */
  692. @Test
  693. public void testPreviousStandardDateHourB() {
  694. MyDateAxis axis = new MyDateAxis("Hour");
  695. Hour h0 = new Hour(12, 1, 4, 2007);
  696. Hour h1 = new Hour(13, 1, 4, 2007);
  697. // five dates to check...
  698. Date d0 = new Date(h0.getFirstMillisecond());
  699. Date d1 = new Date(h0.getFirstMillisecond() + 500L);
  700. Date d2 = new Date(h0.getMiddleMillisecond());
  701. Date d3 = new Date(h0.getMiddleMillisecond() + 500L);
  702. Date d4 = new Date(h0.getLastMillisecond());
  703. Date end = new Date(h1.getLastMillisecond());
  704. DateTickUnit unit = new DateTickUnit(DateTickUnit.HOUR, 6);
  705. axis.setTickUnit(unit);
  706. // START: check d0 and d1
  707. axis.setTickMarkPosition(DateTickMarkPosition.START);
  708. axis.setRange(d0, end);
  709. Date psd = axis.previousStandardDate(d0, unit);
  710. Date nsd = unit.addToDate(psd);
  711. assertTrue(psd.getTime() < d0.getTime());
  712. assertTrue(nsd.getTime() >= d0.getTime());
  713. axis.setRange(d1, end);
  714. psd = axis.previousStandardDate(d1, unit);
  715. nsd = unit.addToDate(psd);
  716. assertTrue(psd.getTime() < d1.getTime());
  717. assertTrue(nsd.getTime() >= d1.getTime());
  718. // MIDDLE: check d1, d2 and d3
  719. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  720. axis.setRange(d1, end);
  721. psd = axis.previousStandardDate(d1, unit);
  722. nsd = unit.addToDate(psd);
  723. assertTrue(psd.getTime() < d1.getTime());
  724. assertTrue(nsd.getTime() >= d1.getTime());
  725. axis.setRange(d2, end);
  726. psd = axis.previousStandardDate(d2, unit);
  727. nsd = unit.addToDate(psd);
  728. assertTrue(psd.getTime() < d2.getTime());
  729. assertTrue(nsd.getTime() >= d2.getTime());
  730. axis.setRange(d3, end);
  731. psd = axis.previousStandardDate(d3, unit);
  732. nsd = unit.addToDate(psd);
  733. assertTrue(psd.getTime() < d3.getTime());
  734. assertTrue(nsd.getTime() >= d3.getTime());
  735. // END: check d3 and d4
  736. axis.setTickMarkPosition(DateTickMarkPosition.END);
  737. axis.setRange(d3, end);
  738. psd = axis.previousStandardDate(d3, unit);
  739. nsd = unit.addToDate(psd);
  740. assertTrue(psd.getTime() < d3.getTime());
  741. assertTrue(nsd.getTime() >= d3.getTime());
  742. axis.setRange(d4, end);
  743. psd = axis.previousStandardDate(d4, unit);
  744. nsd = unit.addToDate(psd);
  745. assertTrue(psd.getTime() < d4.getTime());
  746. assertTrue(nsd.getTime() >= d4.getTime());
  747. }
  748. /**
  749. * A basic check for the testPreviousStandardDate() method when the
  750. * tick unit is 1 second.
  751. */
  752. @Test
  753. public void testPreviousStandardDateSecondA() {
  754. MyDateAxis axis = new MyDateAxis("Second");
  755. Second s0 = new Second(58, 31, 12, 1, 4, 2007);
  756. Second s1 = new Second(59, 31, 12, 1, 4, 2007);
  757. // five dates to check...
  758. Date d0 = new Date(s0.getFirstMillisecond());
  759. Date d1 = new Date(s0.getFirstMillisecond() + 50L);
  760. Date d2 = new Date(s0.getMiddleMillisecond());
  761. Date d3 = new Date(s0.getMiddleMillisecond() + 50L);
  762. Date d4 = new Date(s0.getLastMillisecond());
  763. Date end = new Date(s1.getLastMillisecond());
  764. DateTickUnit unit = new DateTickUnit(DateTickUnit.SECOND, 1);
  765. axis.setTickUnit(unit);
  766. // START: check d0 and d1
  767. axis.setTickMarkPosition(DateTickMarkPosition.START);
  768. axis.setRange(d0, end);
  769. Date psd = axis.previousStandardDate(d0, unit);
  770. Date nsd = unit.addToDate(psd);
  771. assertTrue(psd.getTime() < d0.getTime());
  772. assertTrue(nsd.getTime() >= d0.getTime());
  773. axis.setRange(d1, end);
  774. psd = axis.previousStandardDate(d1, unit);
  775. nsd = unit.addToDate(psd);
  776. assertTrue(psd.getTime() < d1.getTime());
  777. assertTrue(nsd.getTime() >= d1.getTime());
  778. // MIDDLE: check d1, d2 and d3
  779. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  780. axis.setRange(d1, end);
  781. psd = axis.previousStandardDate(d1, unit);
  782. nsd = unit.addToDate(psd);
  783. assertTrue(psd.getTime() < d1.getTime());
  784. assertTrue(nsd.getTime() >= d1.getTime());
  785. axis.setRange(d2, end);
  786. psd = axis.previousStandardDate(d2, unit);
  787. nsd = unit.addToDate(psd);
  788. assertTrue(psd.getTime() < d2.getTime());
  789. assertTrue(nsd.getTime() >= d2.getTime());
  790. axis.setRange(d3, end);
  791. psd = axis.previousStandardDate(d3, unit);
  792. nsd = unit.addToDate(psd);
  793. assertTrue(psd.getTime() < d3.getTime());
  794. assertTrue(nsd.getTime() >= d3.getTime());
  795. // END: check d3 and d4
  796. axis.setTickMarkPosition(DateTickMarkPosition.END);
  797. axis.setRange(d3, end);
  798. psd = axis.previousStandardDate(d3, unit);
  799. nsd = unit.addToDate(psd);
  800. assertTrue(psd.getTime() < d3.getTime());
  801. assertTrue(nsd.getTime() >= d3.getTime());
  802. axis.setRange(d4, end);
  803. psd = axis.previousStandardDate(d4, unit);
  804. nsd = unit.addToDate(psd);
  805. assertTrue(psd.getTime() < d4.getTime());
  806. assertTrue(nsd.getTime() >= d4.getTime());
  807. }
  808. /**
  809. * A basic check for the testPreviousStandardDate() method when the
  810. * tick unit is 5 seconds (just for the sake of having a multiple).
  811. */
  812. @Test
  813. public void testPreviousStandardDateSecondB() {
  814. MyDateAxis axis = new MyDateAxis("Second");
  815. Second s0 = new Second(58, 31, 12, 1, 4, 2007);
  816. Second s1 = new Second(59, 31, 12, 1, 4, 2007);
  817. // five dates to check...
  818. Date d0 = new Date(s0.getFirstMillisecond());
  819. Date d1 = new Date(s0.getFirstMillisecond() + 50L);
  820. Date d2 = new Date(s0.getMiddleMillisecond());
  821. Date d3 = new Date(s0.getMiddleMillisecond() + 50L);
  822. Date d4 = new Date(s0.getLastMillisecond());
  823. Date end = new Date(s1.getLastMillisecond());
  824. DateTickUnit unit = new DateTickUnit(DateTickUnit.SECOND, 5);
  825. axis.setTickUnit(unit);
  826. // START: check d0 and d1
  827. axis.setTickMarkPosition(DateTickMarkPosition.START);
  828. axis.setRange(d0, end);
  829. Date psd = axis.previousStandardDate(d0, unit);
  830. Date nsd = unit.addToDate(psd);
  831. assertTrue(psd.getTime() < d0.getTime());
  832. assertTrue(nsd.getTime() >= d0.getTime());
  833. axis.setRange(d1, end);
  834. psd = axis.previousStandardDate(d1, unit);
  835. nsd = unit.addToDate(psd);
  836. assertTrue(psd.getTime() < d1.getTime());
  837. assertTrue(nsd.getTime() >= d1.getTime());
  838. // MIDDLE: check d1, d2 and d3
  839. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  840. axis.setRange(d1, end);
  841. psd = axis.previousStandardDate(d1, unit);
  842. nsd = unit.addToDate(psd);
  843. assertTrue(psd.getTime() < d1.getTime());
  844. assertTrue(nsd.getTime() >= d1.getTime());
  845. axis.setRange(d2, end);
  846. psd = axis.previousStandardDate(d2, unit);
  847. nsd = unit.addToDate(psd);
  848. assertTrue(psd.getTime() < d2.getTime());
  849. assertTrue(nsd.getTime() >= d2.getTime());
  850. axis.setRange(d3, end);
  851. psd = axis.previousStandardDate(d3, unit);
  852. nsd = unit.addToDate(psd);
  853. assertTrue(psd.getTime() < d3.getTime());
  854. assertTrue(nsd.getTime() >= d3.getTime());
  855. // END: check d3 and d4
  856. axis.setTickMarkPosition(DateTickMarkPosition.END);
  857. axis.setRange(d3, end);
  858. psd = axis.previousStandardDate(d3, unit);
  859. nsd = unit.addToDate(psd);
  860. assertTrue(psd.getTime() < d3.getTime());
  861. assertTrue(nsd.getTime() >= d3.getTime());
  862. axis.setRange(d4, end);
  863. psd = axis.previousStandardDate(d4, unit);
  864. nsd = unit.addToDate(psd);
  865. assertTrue(psd.getTime() < d4.getTime());
  866. assertTrue(nsd.getTime() >= d4.getTime());
  867. }
  868. /**
  869. * A basic check for the testPreviousStandardDate() method when the
  870. * tick unit is 1 millisecond.
  871. */
  872. @Test
  873. public void testPreviousStandardDateMillisecondA() {
  874. MyDateAxis axis = new MyDateAxis("Millisecond");
  875. Millisecond m0 = new Millisecond(458, 58, 31, 12, 1, 4, 2007);
  876. Millisecond m1 = new Millisecond(459, 58, 31, 12, 1, 4, 2007);
  877. Date d0 = new Date(m0.getFirstMillisecond());
  878. Date end = new Date(m1.getLastMillisecond());
  879. DateTickUnit unit = new DateTickUnit(DateTickUnit.MILLISECOND, 1);
  880. axis.setTickUnit(unit);
  881. // START: check d0
  882. axis.setTickMarkPosition(DateTickMarkPosition.START);
  883. axis.setRange(d0, end);
  884. Date psd = axis.previousStandardDate(d0, unit);
  885. Date nsd = unit.addToDate(psd);
  886. assertTrue(psd.getTime() < d0.getTime());
  887. assertTrue(nsd.getTime() >= d0.getTime());
  888. // MIDDLE: check d0
  889. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  890. axis.setRange(d0, end);
  891. psd = axis.previousStandardDate(d0, unit);
  892. nsd = unit.addToDate(psd);
  893. assertTrue(psd.getTime() < d0.getTime());
  894. assertTrue(nsd.getTime() >= d0.getTime());
  895. // END: check d0
  896. axis.setTickMarkPosition(DateTickMarkPosition.END);
  897. axis.setRange(d0, end);
  898. psd = axis.previousStandardDate(d0, unit);
  899. nsd = unit.addToDate(psd);
  900. assertTrue(psd.getTime() < d0.getTime());
  901. assertTrue(nsd.getTime() >= d0.getTime());
  902. }
  903. /**
  904. * A basic check for the testPreviousStandardDate() method when the
  905. * tick unit is 10 milliseconds (just for the sake of having a multiple).
  906. */
  907. @Test
  908. public void testPreviousStandardDateMillisecondB() {
  909. MyDateAxis axis = new MyDateAxis("Millisecond");
  910. Millisecond m0 = new Millisecond(458, 58, 31, 12, 1, 4, 2007);
  911. Millisecond m1 = new Millisecond(459, 58, 31, 12, 1, 4, 2007);
  912. Date d0 = new Date(m0.getFirstMillisecond());
  913. Date end = new Date(m1.getLastMillisecond());
  914. DateTickUnit unit = new DateTickUnit(DateTickUnit.MILLISECOND, 10);
  915. axis.setTickUnit(unit);
  916. // START: check d0
  917. axis.setTickMarkPosition(DateTickMarkPosition.START);
  918. axis.setRange(d0, end);
  919. Date psd = axis.previousStandardDate(d0, unit);
  920. Date nsd = unit.addToDate(psd);
  921. assertTrue(psd.getTime() < d0.getTime());
  922. assertTrue(nsd.getTime() >= d0.getTime());
  923. // MIDDLE: check d0
  924. axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
  925. axis.setRange(d0, end);
  926. psd = axis.previousStandardDate(d0, unit);
  927. nsd = unit.addToDate(psd);
  928. assertTrue(psd.getTime() < d0.getTime());
  929. assertTrue(nsd.getTime() >= d0.getTime());
  930. // END: check d0
  931. axis.setTickMarkPosition(DateTickMarkPosition.END);
  932. axis.setRange(d0, end);
  933. psd = axis.previousStandardDate(d0, unit);
  934. nsd = unit.addToDate(psd);
  935. assertTrue(psd.getTime() < d0.getTime());
  936. assertTrue(nsd.getTime() >= d0.getTime());
  937. }
  938. /**
  939. * A test to reproduce bug 2201869.
  940. */
  941. @Test
  942. public void testBug2201869() {
  943. TimeZone tz = TimeZone.getTimeZone("GMT");
  944. GregorianCalendar c = new GregorianCalendar(tz, Locale.UK);
  945. DateAxis axis = new DateAxis("Date", tz, Locale.UK);
  946. SimpleDateFormat sdf = new SimpleDateFormat("d-MMM-yyyy", Locale.UK);
  947. sdf.setCalendar(c);
  948. axis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1, sdf));
  949. Day d1 = new Day(1, 3, 2008);
  950. d1.peg(c);
  951. Day d2 = new Day(30, 6, 2008);
  952. d2.peg(c);
  953. axis.setRange(d1.getStart(), d2.getEnd());
  954. BufferedImage image = new BufferedImage(200, 100,
  955. BufferedImage.TYPE_INT_ARGB);
  956. Graphics2D g2 = image.createGraphics();
  957. Rectangle2D area = new Rectangle2D.Double(0.0, 0.0, 200, 100);
  958. axis.setTickMarkPosition(DateTickMarkPosition.END);
  959. List ticks = axis.refreshTicks(g2, new AxisState(), area,
  960. RectangleEdge.BOTTOM);
  961. assertEquals(3, ticks.size());
  962. DateTick t1 = (DateTick) ticks.get(0);
  963. assertEquals("31-Mar-2008", t1.getText());
  964. DateTick t2 = (DateTick) ticks.get(1);
  965. assertEquals("30-Apr-2008", t2.getText());
  966. DateTick t3 = (DateTick) ticks.get(2);
  967. assertEquals("31-May-2008", t3.getText());
  968. // now repeat for a vertical axis
  969. ticks = axis.refreshTicks(g2, new AxisState(), area,
  970. RectangleEdge.LEFT);
  971. assertEquals(3, ticks.size());
  972. t1 = (DateTick) ticks.get(0);
  973. assertEquals("31-Mar-2008", t1.getText());
  974. t2 = (DateTick) ticks.get(1);
  975. assertEquals("30-Apr-2008", t2.getText());
  976. t3 = (DateTick) ticks.get(2);
  977. assertEquals("31-May-2008", t3.getText());
  978. }
  979. @Test
  980. public void testBug3484403() {
  981. final long[] dates =
  982. { 1304892000000L, 1304632800000L, 1304546400000L, 1304460000000L,
  983. 1304373600000L, 1304287200000L, 1320015600000L, 1309384800000L,
  984. 1319752800000L, 1319666400000L, 1319580000000L, 1319493600000L };
  985. Arrays.sort(dates);
  986. DateAxis axis = new DateAxis("Date");
  987. // set start and end date
  988. Date start = new Date(dates[0]);
  989. Date end = new Date(dates[dates.length-1]);
  990. axis.setMinimumDate(start);
  991. axis.setMaximumDate(end);
  992. SegmentedTimeline timeline =
  993. SegmentedTimeline.newMondayThroughFridayTimeline();
  994. timeline.setStartTime(start.getTime());
  995. axis.setTimeline(timeline);
  996. BufferedImage image = new BufferedImage(200, 100,
  997. BufferedImage.TYPE_INT_ARGB);
  998. Graphics2D g2 = image.createGraphics();
  999. Rectangle2D area = new Rectangle2D.Double(0.0, 0.0, 500, 200);
  1000. // if the bug is still present, this leads to an endless loop
  1001. axis.refreshTicks(g2, new AxisState(), area, RectangleEdge.BOTTOM);
  1002. }
  1003. }