Создание, анализ ирефакторинг
Скачать 3.16 Mb.
|
425 291 assertEquals(d(30, JUNE, 1901), addMonths(17, d(31, JANUARY, 1900))); 292 293 assertEquals(d(29, FEBRUARY, 1904), addMonths(49, d(31, JANUARY, 1900))); 294 295 } 296 297 public void testAddYears() throws Exception { 298 assertEquals(d(1, JANUARY, 1901), addYears(1, d(1, JANUARY, 1900))); 299 assertEquals(d(28, FEBRUARY, 1905), addYears(1, d(29, FEBRUARY, 1904))); 300 assertEquals(d(28, FEBRUARY, 1905), addYears(1, d(28, FEBRUARY, 1904))); 301 assertEquals(d(28, FEBRUARY, 1904), addYears(1, d(28, FEBRUARY, 1903))); 302 } 303 304 public void testGetPreviousDayOfWeek() throws Exception { 305 assertEquals(d(24, FEBRUARY, 2006), getPreviousDayOfWeek(FRIDAY, d(1, MARCH, 2006))); 306 assertEquals(d(22, FEBRUARY, 2006), getPreviousDayOfWeek(WEDNESDAY, d(1, MARCH, 2006))); 307 assertEquals(d(29, FEBRUARY, 2004), getPreviousDayOfWeek(SUNDAY, d(3, MARCH, 2004))); 308 assertEquals(d(29, DECEMBER, 2004), getPreviousDayOfWeek(WEDNESDAY, d(5, JANUARY, 2005))); 309 310 try { 311 getPreviousDayOfWeek(-1, d(1, JANUARY, 2006)); 312 fail("Invalid day of week code should throw exception"); 313 } catch (IllegalArgumentException e) { 314 } 315 } 316 317 public void testGetFollowingDayOfWeek() throws Exception { 318 // assertEquals(d(1, JANUARY, 2005),getFollowingDayOfWeek(SATURDAY, d(25, DECEMBER, 2004))); 319 assertEquals(d(1, JANUARY, 2005), getFollowingDayOfWeek(SATURDAY, d(26, DECEMBER, 2004))); 320 assertEquals(d(3, MARCH, 2004), getFollowingDayOfWeek(WEDNESDAY, d(28, FEBRUARY, 2004))); 321 322 try { 323 getFollowingDayOfWeek(-1, d(1, JANUARY, 2006)); 324 fail("Invalid day of week code should throw exception"); 325 } catch (IllegalArgumentException e) { 326 } 327 } 328 329 public void testGetNearestDayOfWeek() throws Exception { 330 assertEquals(d(16, APRIL, 2006), getNearestDayOfWeek(SUNDAY, d(16, APRIL, 2006))); 331 assertEquals(d(16, APRIL, 2006), getNearestDayOfWeek(SUNDAY, d(17, APRIL, 2006))); 332 assertEquals(d(16, APRIL, 2006), getNearestDayOfWeek(SUNDAY, d(18, APRIL, 2006))); 333 assertEquals(d(16, APRIL, 2006), getNearestDayOfWeek(SUNDAY, d(19, APRIL, 2006))); 334 assertEquals(d(23, APRIL, 2006), getNearestDayOfWeek(SUNDAY, d(20, APRIL, 2006))); 335 assertEquals(d(23, APRIL, 2006), getNearestDayOfWeek(SUNDAY, d(21, APRIL, 2006))); 336 assertEquals(d(23, APRIL, 2006), getNearestDayOfWeek(SUNDAY, d(22, APRIL, 2006))); 337 338 //todo assertEquals(d(17, APRIL, 2006), getNearestDayOfWeek(MONDAY, d(16, APRIL, 2006))); продолжение 425 426 Приложение Б . org.jfree.date.SerialDate листинг Б .4 . (продолжение) 339 assertEquals(d(17, APRIL, 2006), getNearestDayOfWeek(MONDAY, d(17, APRIL, 2006))); 340 assertEquals(d(17, APRIL, 2006), getNearestDayOfWeek(MONDAY, d(18, APRIL, 2006))); 341 assertEquals(d(17, APRIL, 2006), getNearestDayOfWeek(MONDAY, d(19, APRIL, 2006))); 342 assertEquals(d(17, APRIL, 2006), getNearestDayOfWeek(MONDAY, d(20, APRIL, 2006))); 343 assertEquals(d(24, APRIL, 2006), getNearestDayOfWeek(MONDAY, d(21, APRIL, 2006))); 344 assertEquals(d(24, APRIL, 2006), getNearestDayOfWeek(MONDAY, d(22, APRIL, 2006))); 345 346 // assertEquals(d(18, APRIL, 2006), getNearestDayOfWeek(TUESDAY, d(16, APRIL, 2006))); 347 // assertEquals(d(18, APRIL, 2006), getNearestDayOfWeek(TUESDAY, d(17, APRIL, 2006))); 348 assertEquals(d(18, APRIL, 2006), getNearestDayOfWeek(TUESDAY, d(18, APRIL, 2006))); 349 assertEquals(d(18, APRIL, 2006), getNearestDayOfWeek(TUESDAY, d(19, APRIL, 2006))); 350 assertEquals(d(18, APRIL, 2006), getNearestDayOfWeek(TUESDAY, d(20, APRIL, 2006))); 351 assertEquals(d(18, APRIL, 2006), getNearestDayOfWeek(TUESDAY, d(21, APRIL, 2006))); 352 assertEquals(d(25, APRIL, 2006), getNearestDayOfWeek(TUESDAY, d(22, APRIL, 2006))); 353 354 // assertEquals(d(19, APRIL, 2006), getNearestDayOfWeek(WEDNESDAY, d(16, APRIL, 2006))); 355 // assertEquals(d(19, APRIL, 2006), getNearestDayOfWeek(WEDNESDAY, d(17, APRIL, 2006))); 356 // assertEquals(d(19, APRIL, 2006), getNearestDayOfWeek(WEDNESDAY, d(18, APRIL, 2006))); 357 assertEquals(d(19, APRIL, 2006), getNearestDayOfWeek(WEDNESDAY, d(19, APRIL, 02006))); 358 assertEquals(d(19, APRIL, 2006), getNearestDayOfWeek(WEDNESDAY, d(20, APRIL, 2006))); 359 assertEquals(d(19, APRIL, 2006), getNearestDayOfWeek(WEDNESDAY, d(21, APRIL, 2006))); 360 assertEquals(d(19, APRIL, 2006), getNearestDayOfWeek(WEDNESDAY, d(22, APRIL, 2006))); 361 362 // assertEquals(d(13, APRIL, 2006), getNearestDayOfWeek(THURSDAY, d(16, APRIL, 2006))); 363 // assertEquals(d(20, APRIL, 2006), getNearestDayOfWeek(THURSDAY, d(17, APRIL, 2006))); 364 // assertEquals(d(20, APRIL, 2006), getNearestDayOfWeek(THURSDAY, d(18, APRIL, 2006))); 365 // assertEquals(d(20, APRIL, 2006), getNearestDayOfWeek(THURSDAY, d(19, APRIL, 2006))); 366 assertEquals(d(20, APRIL, 2006), getNearestDayOfWeek(THURSDAY, d(20, APRIL, 2006))); 367 assertEquals(d(20, APRIL, 2006), getNearestDayOfWeek(THURSDAY, d(21, APRIL, 2006))); 368 assertEquals(d(20, APRIL, 2006), getNearestDayOfWeek(THURSDAY, d(22, APRIL, 2006))); 369 370 // assertEquals(d(14, APRIL, 2006), getNearestDayOfWeek(FRIDAY, d(16, APRIL, 2006))); 371 // assertEquals(d(14, APRIL, 2006), getNearestDayOfWeek(FRIDAY, d(17, APRIL, 2006))); 372 // assertEquals(d(21, APRIL, 2006), getNearestDayOfWeek(FRIDAY, d(18, APRIL, 2006))); 373 // assertEquals(d(21, APRIL, 2006), getNearestDayOfWeek(FRIDAY, d(19, APRIL, 2006))); 374 // assertEquals(d(21, APRIL, 2006), getNearestDayOfWeek(FRIDAY, d(20, APRIL, 2006))); 375 assertEquals(d(21, APRIL, 2006), getNearestDayOfWeek(FRIDAY, d(21, APRIL, 2006))); 376 assertEquals(d(21, APRIL, 2006), getNearestDayOfWeek(FRIDAY, d(22, APRIL, 2006))); 377 378 // assertEquals(d(15, APRIL, 2006), getNearestDayOfWeek(SATURDAY, d(16, APRIL, 2006))); 379 // assertEquals(d(15, APRIL, 2006), getNearestDayOfWeek(SATURDAY, d(17, APRIL, 2006))); 380 // assertEquals(d(15, APRIL, 2006), getNearestDayOfWeek(SATURDAY, d(18, APRIL, 2006))); 381 // assertEquals(d(22, APRIL, 2006), getNearestDayOfWeek(SATURDAY, d(19, APRIL, 2006))); 382 // assertEquals(d(22, APRIL, 2006), getNearestDayOfWeek(SATURDAY, d(20, APRIL, 2006))); 383 // assertEquals(d(22, APRIL, 2006), getNearestDayOfWeek(SATURDAY, d(21, APRIL, 2006))); 384 assertEquals(d(22, APRIL, 2006), getNearestDayOfWeek(SATURDAY, d(22, APRIL, 2006))); 385 386 try { 387 getNearestDayOfWeek(-1, d(1, JANUARY, 2006)); 388 fail("Invalid day of week code should throw exception"); 389 } catch (IllegalArgumentException e) { 390 } 391 } 426 org.jfree.date.SerialDate 427 392 393 public void testEndOfCurrentMonth() throws Exception { 394 SerialDate d = SerialDate.createInstance(2); 395 assertEquals(d(31, JANUARY, 2006), d.getEndOfCurrentMonth(d(1, JANUARY, 2006))); 396 assertEquals(d(28, FEBRUARY, 2006), d.getEndOfCurrentMonth(d(1, FEBRUARY, 2006))); 397 assertEquals(d(31, MARCH, 2006), d.getEndOfCurrentMonth(d(1, MARCH, 2006))); 398 assertEquals(d(30, APRIL, 2006), d.getEndOfCurrentMonth(d(1, APRIL, 2006))); 399 assertEquals(d(31, MAY, 2006), d.getEndOfCurrentMonth(d(1, MAY, 2006))); 400 assertEquals(d(30, JUNE, 2006), d.getEndOfCurrentMonth(d(1, JUNE, 2006))); 401 assertEquals(d(31, JULY, 2006), d.getEndOfCurrentMonth(d(1, JULY, 2006))); 402 assertEquals(d(31, AUGUST, 2006), d.getEndOfCurrentMonth(d(1, AUGUST, 2006))); 403 assertEquals(d(30, SEPTEMBER, 2006), d.getEndOfCurrentMonth(d(1, SEPTEMBER, 2006))); 404 assertEquals(d(31, OCTOBER, 2006), d.getEndOfCurrentMonth(d(1, OCTOBER, 2006))); 405 assertEquals(d(30, NOVEMBER, 2006), d.getEndOfCurrentMonth(d(1, NOVEMBER, 2006))); 406 assertEquals(d(31, DECEMBER, 2006), d.getEndOfCurrentMonth(d(1, DECEMBER, 2006))); 407 assertEquals(d(29, FEBRUARY, 2008), d.getEndOfCurrentMonth(d(1, FEBRUARY, 2008))); 408 } 409 410 public void testWeekInMonthToString() throws Exception { 411 assertEquals("First",weekInMonthToString(FIRST_WEEK_IN_MONTH)); 412 assertEquals("Second",weekInMonthToString(SECOND_WEEK_IN_MONTH)); 413 assertEquals("Third",weekInMonthToString(THIRD_WEEK_IN_MONTH)); 414 assertEquals("Fourth",weekInMonthToString(FOURTH_WEEK_IN_MONTH)); 415 assertEquals("Last",weekInMonthToString(LAST_WEEK_IN_MONTH)); 416 417 //todo try { 418 // weekInMonthToString(-1); 419 // fail("Invalid week code should throw exception"); 420 // } catch (IllegalArgumentException e) { 421 // } 422 } 423 424 public void testRelativeToString() throws Exception { 425 assertEquals("Preceding",relativeToString(PRECEDING)); 426 assertEquals("Nearest",relativeToString(NEAREST)); 427 assertEquals("Following",relativeToString(FOLLOWING)); 428 429 //todo try { 430 // relativeToString(-1000); 431 // fail("Invalid relative code should throw exception"); 432 // } catch (IllegalArgumentException e) { 433 // } 434 } 435 436 public void testCreateInstanceFromDDMMYYY() throws Exception { 437 SerialDate date = createInstance(1, JANUARY, 1900); 438 assertEquals(1,date.getDayOfMonth()); 439 assertEquals(JANUARY,date.getMonth()); 440 assertEquals(1900,date.getYYYY()); 441 assertEquals(2,date.toSerial()); 442 } 443 444 public void testCreateInstanceFromSerial() throws Exception { 445 assertEquals(d(1, JANUARY, 1900),createInstance(2)); продолжение 427 428 Приложение Б . org.jfree.date.SerialDate листинг Б .4 . (продолжение) 446 assertEquals(d(1, JANUARY, 1901), createInstance(367)); 447 } 448 449 public void testCreateInstanceFromJavaDate() throws Exception { 450 assertEquals(d(1, JANUARY, 1900), createInstance(new GregorianCalendar(1900,0,1).getTime())); 451 assertEquals(d(1, JANUARY, 2006), createInstance(new GregorianCalendar(2006,0,1).getTime())); 452 } 453 454 public static void main(String[] args) { 455 junit.textui.TestRunner.run(BobsSerialDateTest.class); 456 } 457 } листинг Б .5 . SpreadsheetDate.java 1 /* ======================================================================== 2 * JCommon : библиотека классов общего назначения для платформы Java(tm) 3 * ======================================================================== 4 * 5 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 6 * 7 * Информация о проекте: http://www.jfree.org/jcommon/index.html 8 * 9 * Библиотека распространяется бесплатно; вы можете свободно распространять 10 * и/или изменять ее на условиях лицензии Lesser General Public License 11 * в формулировке Free Software Foundation; либо версии 2.1 лицензии, либо 12 * (на ваше усмотрение) любой последующей версии. 13 * 14 * Библиотека распространяется в надежде, что она будет полезна, но 15 * БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемой гарантии ПРИГОДНОСТИ 16 * для КОНКРЕТНОЙ ЦЕЛИ. За подробностями обращайтесь к GNU Lesser General 17 * Public License. 18 * 19 * Вы должны получить копию лицензии GNU Lesser General Public License 20 * с этой библиотекой; если этого не произошло, обратитесь в Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 22 * USA. 23 * 24 * [Java является зарегистрированной торговой маркой Sun Microsystems, Inc. 25 * в Соединенных Штатах и других странах]. 26 * 27 * -------------------- 28 * SpreadsheetDate.java 29 * -------------------- 30 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 31 * 32 * Автор: Дэвид Гилберт (для Object Refinery Limited); 33 * Участники: -; 34 * 428 org.jfree.date.SerialDate 429 35 * $Id: SpreadsheetDate.java,v 1.8 2005/11/03 09:25:39 mungady Exp $ 36 * 37 * Изменения 38 * ------- 39 * 11.10.2001 : Версия 1 (DG); 40 * 05.11.2001 : Добавлены методы getDescription() и setDescription() (DG); 41 * 12.11.2001 : Переименование ExcelDate.java в SpreadsheetDate.java (DG); 42 * Исправлена ошибка в вычислении дня, месяца и года 43 * по порядковому номеру (DG); 44 * 24.01.2002 : Исправлена ошибка в вычислении порядкового номера по дню, 45 * месяцу и году. Спасибо Тревору Хиллзу за сообщение(DG); 46 * 29.05.2002 : Добавлен метод equals(Object) (SourceForge ID 558850) (DG); 47 * 03.10.2002 : Исправлены ошибки по информации Checkstyle (DG); 48 * 13.03.2003 : Реализован интерфейс Serializable (DG); 49 * 04.09.2003 : Завершены методы isInRange() (DG); 50 * 05.09.2003 : Реализован интерфейс Comparable (DG); 51 * 21.10.2003 : Добавлен метод hashCode() (DG); 52 * 53 */ 54 55 package org.jfree.date; 56 57 import java.util.Calendar; 58 import java.util.Date; 59 60 /** 61 * Представляет дату с использованием целого числа, по аналогии с реализацией 62 * в Microsoft Excel. Поддерживаемый диапазон дат: 63 * с 1 января 1900 по 31 декабря 9999. 64 * 65 * Учтите, что в Excel существует намеренная ошибка, вследствие которой год 66 * 1900 считается високосным, тогда как в действительности он таковым не является. 67 * Дополнительная информация приведена на сайте Microsoft в статье Q181370: 68 * 69 * http://support.microsoft.com/support/kb/articles/Q181/3/70.asp 70 * 71 * Excel считает, что 1 января 1900 = 1. Этот класс считает, что 72 * 1 января 1900 = 2. 73 * В результате номер дня этого класса будет отличаться от номера Excel 74 * в январе и феврале 1900...но затем Excel прибавляет лишний день 75 * (29 февраля 1900, который в действительности не существует!), и с этого 76 * момента нумерация дней совпадает. 77 * 78 * @author Дэвид Гилберт 79 */ 80 public class SpreadsheetDate extends SerialDate { 81 82 /** Для сериализации. */ 83 private static final long serialVersionUID = -2039586705374454461L; 84 85 /** продолжение 429 430 Приложение Б . org.jfree.date.SerialDate листинг Б .5 (продолжение) 86 * Номер дня (1.01.1900 = 2, 2.01.1900 = 3, ..., 31.12.9999 = 87 * 2958465). 88 */ 89 private int serial; 90 91 /** День месяца (от 1 до 28, 29, 30 или 31 в зависимости от месяца). */ 92 private int day; 93 94 /** Месяц года (от 1 по 12). */ 95 private int month; 96 97 /** Год (от 1900 до 9999). */ 98 private int year; 99 100 /** Необязательное описание даты. */ 101 private String description; 102 103 /** 104 * Создает новый экземпляр даты. 105 * 106 * @param day день (в диапазоне от 1 до 28/29/30/31). 107 * @param month месяц (в диапазоне от 1 до 12). 108 * @param year год (в диапазоне от 1900 до 9999). 109 */ 110 public SpreadsheetDate(final int day, final int month, final int year) { 111 112 if ((year >= 1900) && (year <= 9999)) { 113 this.year = year; 114 } 115 else { 116 throw new IllegalArgumentException( 117 "The 'year' argument must be in range 1900 to 9999." 118 ); 119 } 120 121 if ((month >= MonthConstants.JANUARY) 122 && (month <= MonthConstants.DECEMBER)) { 123 this.month = month; 124 } 125 else { 126 throw new IllegalArgumentException( 127 "The 'month' argument must be in the range 1 to 12." 128 ); 129 } 130 131 if ((day >= 1) && (day <= SerialDate.lastDayOfMonth(month, year))) { 132 this.day = day; 133 } 134 else { 135 throw new IllegalArgumentException("Invalid 'day' argument."); 430 org.jfree.date.SerialDate 431 136 } 137 138 // Порядковый номер должен синхронизироваться с днем-месяцем-годом... 139 this.serial = calcSerial(day, month, year); 140 141 this.description = null; 142 143 } 144 145 /** 146 * Стандартный конструктор - создает новый объект даты, представляющий 147 * день с заданным номером (в диапазоне от 2 до 2958465). 148 * 149 * @param serial порядковый номер дня (диапазон: от 2 до 2958465). 150 */ 151 public SpreadsheetDate(final int serial) { 152 153 if ((serial >= SERIAL_LOWER_BOUND) && (serial <= SERIAL_UPPER_BOUND)) { 154 this.serial = serial; 155 } 156 else { 157 throw new IllegalArgumentException( 158 "SpreadsheetDate: Serial must be in range 2 to 2958465."); 159 } 160 161 // День-месяц-год должен синхронизироваться с порядковым номером... 162 calcDayMonthYear(); 163 164 } 165 166 /** 167 * Возвращает описание, присоединенное к дате. 168 * Дата не обязана иметь описание, но в некоторых приложениях 169 * оно может оказаться полезным. 170 * 171 * @return описание, присоединенное к дате. 172 */ 173 public String getDescription() { 174 return this.description; 175 } 176 177 /** 178 * Задает описание для даты. 179 * 180 * @param description описание даты (разрешается 181 * null ).182 */ 183 public void setDescription(final String description) { 184 this.description = description; 185 } 186 продолжение 431 432 Приложение Б . org.jfree.date.SerialDate листинг Б .5 (продолжение) 187 /** 188 * Возвращает порядковый номер даты, где 1 января 1900 = 2 189 * (что почти соответствует системе нумерации, используемой в Microsoft 190 * Excel for Windows и Lotus 1-2-3). 191 * 192 * @return порядковый номер даты. 193 */ 194 public int toSerial() { 195 return this.serial; 196 } 197 198 /** 199 * Возвращает объект java.util.Date , эквивалентный текущей дате.200 * 201 * @return объект даты. 202 */ 203 public Date toDate() { 204 final Calendar calendar = Calendar.getInstance(); 205 calendar.set(getYYYY(), getMonth() - 1, getDayOfMonth(), 0, 0, 0); 206 return calendar.getTime(); 207 } 208 209 /** 210 * Возвращает год (из действительного диапазона от 1900 до 9999). 211 * 212 * @return год. 213 */ 214 public int getYYYY() { 215 return this.year; 216 } 217 218 /** 219 * Возвращает месяц (январь = 1, февраль = 2, март = 3). 220 * 221 * @return месяц года. 222 */ 223 public int getMonth() { 224 return this.month; 225 } 226 227 /** 228 * Возвращает день месяца. 229 * 230 * @return день месяца. 231 */ 232 public int getDayOfMonth() { 233 return this.day; 234 } 235 236 /** 432 |