Чистый код. Создание, анализ и рефакторинг — страница 81 из 94

204 //    assertEquals(3,stringToMonthCode("MAR"));

205 //    assertEquals(4,stringToMonthCode("APRIL"));

206 //    assertEquals(5,stringToMonthCode("MAY"));

207 //    assertEquals(6,stringToMonthCode("JUNE"));

208 //    assertEquals(7,stringToMonthCode("JULY"));

209 //    assertEquals(8,stringToMonthCode("AUGUST"));

210 //    assertEquals(9,stringToMonthCode("SEPTEMBER"));

211 //    assertEquals(10,stringToMonthCode("OCTOBER"));

212 //    assertEquals(11,stringToMonthCode("NOVEMBER"));

213 //    assertEquals(12,stringToMonthCode("DECEMBER"));

214   }

215

216   public void testIsValidWeekInMonthCode() throws Exception {

217     for (int w = 0; w <= 4; w++) {

218       assertTrue(isValidWeekInMonthCode(w));

219     }

220     assertFalse(isValidWeekInMonthCode(5));

221   }

222

223   public void testIsLeapYear() throws Exception {

224     assertFalse(isLeapYear(1900));

225     assertFalse(isLeapYear(1901));

226     assertFalse(isLeapYear(1902));

227     assertFalse(isLeapYear(1903));

228     assertTrue(isLeapYear(1904));

229     assertTrue(isLeapYear(1908));

230     assertFalse(isLeapYear(1955));

231     assertTrue(isLeapYear(1964));

232     assertTrue(isLeapYear(1980));

233     assertTrue(isLeapYear(2000));

234     assertFalse(isLeapYear(2001));

235     assertFalse(isLeapYear(2100));

236   }

237

238   public void testLeapYearCount() throws Exception {


Листинг Б.4 (продолжение)

239     assertEquals(0, leapYearCount(1900));

240     assertEquals(0, leapYearCount(1901));

241     assertEquals(0, leapYearCount(1902));

242     assertEquals(0, leapYearCount(1903));

243     assertEquals(1, leapYearCount(1904));

244     assertEquals(1, leapYearCount(1905));

245     assertEquals(1, leapYearCount(1906));

246     assertEquals(1, leapYearCount(1907));

247     assertEquals(2, leapYearCount(1908));

248     assertEquals(24, leapYearCount(1999));

249     assertEquals(25, leapYearCount(2001));

250     assertEquals(49, leapYearCount(2101));

251     assertEquals(73, leapYearCount(2201));

252     assertEquals(97, leapYearCount(2301));

253     assertEquals(122, leapYearCount(2401));

254   }

255

256   public void testLastDayOfMonth() throws Exception {

257     assertEquals(31, lastDayOfMonth(JANUARY, 1901));

258     assertEquals(28, lastDayOfMonth(FEBRUARY, 1901));

259     assertEquals(31, lastDayOfMonth(MARCH, 1901));

260     assertEquals(30, lastDayOfMonth(APRIL, 1901));

261     assertEquals(31, lastDayOfMonth(MAY, 1901));

262     assertEquals(30, lastDayOfMonth(JUNE, 1901));

263     assertEquals(31, lastDayOfMonth(JULY, 1901));

264     assertEquals(31, lastDayOfMonth(AUGUST, 1901));

265     assertEquals(30, lastDayOfMonth(SEPTEMBER, 1901));

266     assertEquals(31, lastDayOfMonth(OCTOBER, 1901));

267     assertEquals(30, lastDayOfMonth(NOVEMBER, 1901));

268     assertEquals(31, lastDayOfMonth(DECEMBER, 1901));

269     assertEquals(29, lastDayOfMonth(FEBRUARY, 1904));

270   }

271

272   public void testAddDays() throws Exception {

273     SerialDate newYears = d(1, JANUARY, 1900);

274     assertEquals(d(2, JANUARY, 1900), addDays(1, newYears));

275     assertEquals(d(1, FEBRUARY, 1900), addDays(31, newYears));

276     assertEquals(d(1, JANUARY, 1901), addDays(365, newYears));

277     assertEquals(d(31, DECEMBER, 1904), addDays(5 * 365, newYears));

278   }

279

280   private static SpreadsheetDate d(int day, int month, int year) {return new

SpreadsheetDate(day, month, year);}

281

282   public void testAddMonths() throws Exception {

283     assertEquals(d(1, FEBRUARY, 1900), addMonths(1, d(1, JANUARY, 1900)));

284     assertEquals(d(28, FEBRUARY, 1900), addMonths(1, d(31, JANUARY, 1900)));

285     assertEquals(d(28, FEBRUARY, 1900), addMonths(1, d(30, JANUARY, 1900)));

286     assertEquals(d(28, FEBRUARY, 1900), addMonths(1, d(29, JANUARY, 1900)));

287     assertEquals(d(28, FEBRUARY, 1900), addMonths(1, d(28, JANUARY, 1900)));

288     assertEquals(d(27, FEBRUARY, 1900), addMonths(1, d(27, JANUARY, 1900)));

289

290     assertEquals(d(30, JUNE, 1900), addMonths(5, d(31, JANUARY, 1900)));

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   }