/**
* ***************************************************************************
* Copyright (c) 2010 Qcadoo Limited
* Project: Qcadoo Framework
* Version: 1.4
*
* This file is part of Qcadoo.
*
* Qcadoo is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* ***************************************************************************
*/
package com.qcadoo.commons.dateTime;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import java.util.Set;
import org.joda.time.DateTime;
import org.junit.Test;
import com.google.common.collect.Sets;
public class DateRangeTest {
private static final DateTime DATE_FROM_PROTOTYPE = new DateTime(2013, 1, 1, 0, 0, 0, 0);
private static final DateTime DATE_TO_PROTOTYPE = new DateTime(2013, 5, 10, 0, 0, 0, 0);
@Test
public final void shouldGettersReturnDefensiveCopyOfDates() {
// given
Date originalFrom = DATE_FROM_PROTOTYPE.toDate();
Date originalTo = DATE_TO_PROTOTYPE.toDate();
DateRange dateRange = new DateRange(originalFrom, originalTo);
Date returnedFrom = dateRange.getFrom();
Date returnedTo = dateRange.getTo();
// when
originalFrom.setTime(1000);
originalTo.setTime(2000);
returnedFrom.setTime(3000);
returnedTo.setTime(4000);
// then
assertEquals(DATE_FROM_PROTOTYPE.toDate(), dateRange.getFrom());
assertEquals(DATE_TO_PROTOTYPE.toDate(), dateRange.getTo());
assertFalse(originalFrom.equals(dateRange.getFrom()));
assertFalse(originalTo.equals(dateRange.getTo()));
assertFalse(returnedFrom.equals(dateRange.getFrom()));
assertFalse(returnedTo.equals(dateRange.getTo()));
assertFalse(originalFrom.equals(returnedFrom));
assertFalse(originalTo.equals(returnedTo));
}
@Test
public final void shouldHashCodeAndEqualsBeImplementedCorrectly() {
// given
DateRange firstDateRange = new DateRange(DATE_FROM_PROTOTYPE.toDate(), DATE_TO_PROTOTYPE.toDate());
DateRange secondDateRange = new DateRange(DATE_FROM_PROTOTYPE.toDate(), DATE_TO_PROTOTYPE.toDate());
DateRange thirdDateRange = new DateRange(DATE_FROM_PROTOTYPE.plusDays(1).toDate(), DATE_TO_PROTOTYPE.plusDays(3).toDate());
// when
Set<DateRange> dateRangesSet = Sets.newHashSet(firstDateRange, secondDateRange, thirdDateRange);
// then
assertTrue(dateRangesSet.contains(firstDateRange));
assertTrue(dateRangesSet.contains(secondDateRange));
assertTrue(dateRangesSet.contains(thirdDateRange));
assertEquals(2, dateRangesSet.size());
assertEquals(firstDateRange.hashCode(), secondDateRange.hashCode());
assertFalse(firstDateRange.hashCode() == thirdDateRange.hashCode());
assertFalse(secondDateRange.hashCode() == thirdDateRange.hashCode());
assertEquals(firstDateRange.hashCode(), firstDateRange.hashCode());
assertEquals(secondDateRange.hashCode(), secondDateRange.hashCode());
assertEquals(thirdDateRange.hashCode(), thirdDateRange.hashCode());
assertEquals(firstDateRange, firstDateRange);
assertEquals(secondDateRange, secondDateRange);
assertEquals(thirdDateRange, thirdDateRange);
assertEquals(firstDateRange, secondDateRange);
assertEquals(secondDateRange, firstDateRange);
assertFalse(secondDateRange.equals(thirdDateRange));
assertFalse(thirdDateRange.equals(secondDateRange));
assertFalse(thirdDateRange.equals(firstDateRange));
assertFalse(firstDateRange.equals(thirdDateRange));
}
}