/* * Copyright (C) 2012-2015 DataStax Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.datastax.driver.core; import org.testng.annotations.Test; import java.util.Calendar; import java.util.concurrent.TimeUnit; import static com.datastax.driver.core.Assertions.assertThat; import static com.datastax.driver.core.LocalDate.*; public class LocalDateTest { @Test(groups = "unit") public void should_build_from_days_since_epoch() { assertThat(fromDaysSinceEpoch(0)) .hasMillisSinceEpoch(0) .hasDaysSinceEpoch(0) .hasYearMonthDay(1970, 1, 1) .hasToString("1970-01-01"); assertThat(fromDaysSinceEpoch(10)) .hasMillisSinceEpoch(TimeUnit.DAYS.toMillis(10)) .hasDaysSinceEpoch(10) .hasYearMonthDay(1970, 1, 11) .hasToString("1970-01-11"); assertThat(fromDaysSinceEpoch(-10)) .hasMillisSinceEpoch(TimeUnit.DAYS.toMillis(-10)) .hasDaysSinceEpoch(-10) .hasYearMonthDay(1969, 12, 22) .hasToString("1969-12-22"); assertThat(fromDaysSinceEpoch(Integer.MAX_VALUE)) .hasMillisSinceEpoch(TimeUnit.DAYS.toMillis(Integer.MAX_VALUE)) .hasDaysSinceEpoch(Integer.MAX_VALUE) .hasYearMonthDay(5881580, 7, 11) .hasToString("5881580-07-11"); assertThat(fromDaysSinceEpoch(Integer.MIN_VALUE)) .hasMillisSinceEpoch(TimeUnit.DAYS.toMillis(Integer.MIN_VALUE)) .hasDaysSinceEpoch(Integer.MIN_VALUE) .hasYearMonthDay(-5877641, 6, 23) .hasToString("-5877641-06-23"); } @Test(groups = "unit") public void should_build_from_millis_since_epoch() { assertThat(fromMillisSinceEpoch(0)) .hasMillisSinceEpoch(0) .hasDaysSinceEpoch(0) .hasYearMonthDay(1970, 1, 1) .hasToString("1970-01-01"); // Rounding assertThat(fromMillisSinceEpoch(3600)) .hasMillisSinceEpoch(0) .hasDaysSinceEpoch(0) .hasYearMonthDay(1970, 1, 1) .hasToString("1970-01-01"); assertThat(fromMillisSinceEpoch(-3600)) .hasMillisSinceEpoch(0) .hasDaysSinceEpoch(0) .hasYearMonthDay(1970, 1, 1) .hasToString("1970-01-01"); // Bound checks try { fromMillisSinceEpoch(TimeUnit.DAYS.toMillis((long) Integer.MIN_VALUE - 1)); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } try { fromMillisSinceEpoch(TimeUnit.DAYS.toMillis((long) Integer.MAX_VALUE + 1)); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } } @Test(groups = "unit") public void should_build_from_year_month_day() { assertThat(fromYearMonthDay(1970, 1, 1)) .hasMillisSinceEpoch(0) .hasDaysSinceEpoch(0) .hasYearMonthDay(1970, 1, 1) .hasToString("1970-01-01"); // Handling of 0 / negative years assertThat(fromYearMonthDay(1, 1, 1)) .hasDaysSinceEpoch(-719162) .hasYearMonthDay(1, 1, 1) .hasToString("1-01-01"); assertThat(fromYearMonthDay(0, 1, 1)) .hasDaysSinceEpoch(-719162 - 366) .hasYearMonthDay(0, 1, 1) .hasToString("0-01-01"); assertThat(fromYearMonthDay(-1, 1, 1)) .hasDaysSinceEpoch(-719162 - 366 - 365) .hasYearMonthDay(-1, 1, 1) .hasToString("-1-01-01"); // Month/day out of bounds try { fromYearMonthDay(1970, 0, 1); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } try { fromYearMonthDay(1970, 13, 1); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } try { fromYearMonthDay(1970, 1, 0); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } try { fromYearMonthDay(1970, 1, 32); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } // Resulting date out of bounds try { fromYearMonthDay(6000000, 1, 1); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } try { fromYearMonthDay(-6000000, 1, 1); Assertions.fail("Expected an IllegalArgumentException"); } catch (IllegalArgumentException e) { /*expected*/ } } @Test(groups = "unit") public void should_add_and_subtract_years() { assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.YEAR, 1)) .hasYearMonthDay(1971, 1, 1); assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.YEAR, -1)) .hasYearMonthDay(1969, 1, 1); assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.YEAR, -1970)) .hasYearMonthDay(0, 1, 1); assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.YEAR, -1971)) .hasYearMonthDay(-1, 1, 1); assertThat(fromYearMonthDay(0, 5, 12).add(Calendar.YEAR, 1)) .hasYearMonthDay(1, 5, 12); assertThat(fromYearMonthDay(-1, 5, 12).add(Calendar.YEAR, 1)) .hasYearMonthDay(0, 5, 12); assertThat(fromYearMonthDay(-1, 5, 12).add(Calendar.YEAR, 2)) .hasYearMonthDay(1, 5, 12); } @Test(groups = "unit") public void should_add_and_subtract_months() { assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.MONTH, 2)) .hasYearMonthDay(1970, 3, 1); assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.MONTH, 24)) .hasYearMonthDay(1972, 1, 1); assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.MONTH, -5)) .hasYearMonthDay(1969, 8, 1); assertThat(fromYearMonthDay(1, 1, 1).add(Calendar.MONTH, -1)) .hasYearMonthDay(0, 12, 1); assertThat(fromYearMonthDay(0, 1, 1).add(Calendar.MONTH, -1)) .hasYearMonthDay(-1, 12, 1); assertThat(fromYearMonthDay(-1, 12, 1).add(Calendar.MONTH, 1)) .hasYearMonthDay(0, 1, 1); assertThat(fromYearMonthDay(0, 12, 1).add(Calendar.MONTH, 1)) .hasYearMonthDay(1, 1, 1); } @Test(groups = "unit") public void should_add_and_subtract_days() { assertThat(fromYearMonthDay(1970, 1, 1).add(Calendar.DAY_OF_MONTH, 12)) .hasYearMonthDay(1970, 1, 13); assertThat(fromYearMonthDay(1970, 3, 28).add(Calendar.DAY_OF_MONTH, -40)) .hasYearMonthDay(1970, 2, 16); assertThat(fromYearMonthDay(1, 1, 1).add(Calendar.DAY_OF_MONTH, -2)) .hasYearMonthDay(0, 12, 30); assertThat(fromYearMonthDay(0, 1, 1).add(Calendar.DAY_OF_MONTH, -2)) .hasYearMonthDay(-1, 12, 30); assertThat(fromYearMonthDay(-1, 12, 31).add(Calendar.DAY_OF_MONTH, 4)) .hasYearMonthDay(0, 1, 4); assertThat(fromYearMonthDay(0, 12, 25).add(Calendar.DAY_OF_MONTH, 14)) .hasYearMonthDay(1, 1, 8); } }