/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.content;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;
import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import org.dspace.AbstractUnitTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.* ;
import static org.hamcrest.CoreMatchers.*;
/**
*
* @author pvillega
*/
public class DCDateTest extends AbstractUnitTest
{
/** log4j category */
private static Logger log = Logger.getLogger(DCDateTest.class);
/**
* Object to use in the tests
*/
private DCDate dc;
/**
* Object to use in the tests
*/
private Calendar c;
/**
* This method will be run before every test as per @Before. It will
* initialize resources required for the tests.
*
* Other methods can be annotated with @Before here or in subclasses
* but no execution order is guaranteed
*/
@Before
@Override
public void init()
{
super.init();
TimeZone.setDefault(TimeZone.getTimeZone("GMT-8"));
}
/**
* This method will be run after every test as per @After. It will
* clean resources initialized by the @Before methods.
*
* Other methods can be annotated with @After here or in subclasses
* but no execution order is guaranteed
*/
@After
@Override
public void destroy()
{
dc = null;
c = null;
super.destroy();
}
/**
* Test of DCDate constructor, of class DCDate.
*/
@Test
public void testDCDateDate()
{
dc = new DCDate((String)null);
assertThat("testDCDateDate 1", dc.getYear(), equalTo(-1));
assertThat("testDCDateDate 2", dc.getMonth(), equalTo(-1));
assertThat("testDCDateDate 3", dc.getDay(), equalTo(-1));
assertThat("testDCDateDate 4", dc.getHour(), equalTo(-1));
assertThat("testDCDateDate 5", dc.getMinute(), equalTo(-1));
assertThat("testDCDateDate 6", dc.getSecond(), equalTo(-1));
assertThat("testDCDateDate 7", dc.getYearUTC(), equalTo(-1));
assertThat("testDCDateDate 8", dc.getMonthUTC(), equalTo(-1));
assertThat("testDCDateDate 9", dc.getDayUTC(), equalTo(-1));
assertThat("testDCDateDate 10", dc.getHourUTC(), equalTo(-1));
assertThat("testDCDateDate 11", dc.getMinuteUTC(), equalTo(-1));
assertThat("testDCDateDate 12", dc.getSecondUTC(), equalTo(-1));
// NB. Months begin at 0 in GregorianCalendar so 0 is January.
c = new GregorianCalendar(2010,0,1);
dc = new DCDate(c.getTime());
assertThat("testDCDateDate 1 ", dc.getYear(), equalTo(2010));
assertThat("testDCDateDate 2 ", dc.getMonth(), equalTo(1));
assertThat("testDCDateDate 3 ", dc.getDay(), equalTo(1));
assertThat("testDCDateDate 4 ", dc.getHour(), equalTo(0));
assertThat("testDCDateDate 5 ", dc.getMinute(), equalTo(0));
assertThat("testDCDateDate 6 ", dc.getSecond(), equalTo(0));
assertThat("testDCDateDate 7 ", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateDate 8 ", dc.getMonthUTC(), equalTo(1));
assertThat("testDCDateDate 9 ", dc.getDayUTC(), equalTo(1));
assertThat("testDCDateDate 10 ", dc.getHourUTC(), equalTo(8));
assertThat("testDCDateDate 11 ", dc.getMinuteUTC(), equalTo(0));
assertThat("testDCDateDate 12 ", dc.getSecondUTC(), equalTo(0));
c = new GregorianCalendar(2009,11,31,18,30);
dc = new DCDate(c.getTime());
assertThat("testDCDateDate 13 ", dc.getYear(), equalTo(2009));
assertThat("testDCDateDate 14 ", dc.getMonth(), equalTo(12));
assertThat("testDCDateDate 15 ", dc.getDay(), equalTo(31));
assertThat("testDCDateDate 16 ", dc.getHour(), equalTo(18));
assertThat("testDCDateDate 17 ", dc.getMinute(), equalTo(30));
assertThat("testDCDateDate 18 ", dc.getSecondUTC(), equalTo(0));
assertThat("testDCDateDate 19 ", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateDate 20 ", dc.getMonthUTC(), equalTo(1));
assertThat("testDCDateDate 21 ", dc.getDayUTC(), equalTo(1));
assertThat("testDCDateDate 22 ", dc.getHourUTC(), equalTo(2));
assertThat("testDCDateDate 23 ", dc.getMinuteUTC(), equalTo(30));
assertThat("testDCDateDate 24 ", dc.getSecondUTC(), equalTo(0));
}
/**
* Test of DCDate constructor, of class DCDate.
*/
@Test
public void testDCDateIntBits()
{
dc = new DCDate(2010,1,1,-1,-1,-1);
assertThat("testDCDateIntBits 1", dc.getYear(), equalTo(2010));
assertThat("testDCDateIntBits 2", dc.getMonth(), equalTo(1));
assertThat("testDCDateIntBits 3", dc.getDay(), equalTo(1));
assertThat("testDCDateIntBits 4", dc.getHour(), equalTo(-1));
assertThat("testDCDateIntBits 5", dc.getMinute(), equalTo(-1));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(-1));
assertThat("testDCDateIntBits 7", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateIntBits 8", dc.getMonthUTC(), equalTo(1));
assertThat("testDCDateIntBits 9", dc.getDayUTC(), equalTo(1));
assertThat("testDCDateIntBits 10", dc.getHourUTC(), equalTo(-1));
assertThat("testDCDateIntBits 11", dc.getMinuteUTC(), equalTo(-1));
assertThat("testDCDateIntBits 12", dc.getSecondUTC(), equalTo(-1));
dc = new DCDate(2009,12,31,18,30,5);
assertThat("testDCDateIntBits 13", dc.getYear(), equalTo(2009));
assertThat("testDCDateIntBits 14", dc.getMonth(), equalTo(12));
assertThat("testDCDateIntBits 15", dc.getDay(), equalTo(31));
assertThat("testDCDateIntBits 16", dc.getHour(), equalTo(18));
assertThat("testDCDateIntBits 17", dc.getMinute(), equalTo(30));
assertThat("testDCDateIntBits 18", dc.getSecond(), equalTo(5));
assertThat("testDCDateIntBits 19", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateIntBits 20", dc.getMonthUTC(), equalTo(1));
assertThat("testDCDateIntBits 21", dc.getDayUTC(), equalTo(1));
assertThat("testDCDateIntBits 22", dc.getHourUTC(), equalTo(2));
assertThat("testDCDateIntBits 23", dc.getMinuteUTC(), equalTo(30));
assertThat("testDCDateIntBits 24", dc.getSecondUTC(), equalTo(5));
}
/**
* Test of DCDate constructor, of class DCDate.
*/
@Test
public void testDCDateString()
{
dc = new DCDate((String)null);
assertThat("testDCDateString 1", dc.getYear(), equalTo(-1));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(-1));
assertThat("testDCDateString 3", dc.getDay(), equalTo(-1));
assertThat("testDCDateString 4", dc.getHour(), equalTo(-1));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(-1));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(-1));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(-1));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(-1));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(-1));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(-1));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(-1));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(-1));
dc = new DCDate("");
assertThat("testDCDateString 1", dc.getYear(), equalTo(-1));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(-1));
assertThat("testDCDateString 3", dc.getDay(), equalTo(-1));
assertThat("testDCDateString 4", dc.getHour(), equalTo(-1));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(-1));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(-1));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(-1));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(-1));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(-1));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(-1));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(-1));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(-1));
dc = new DCDate("2010");
assertThat("testDCDateString 1", dc.getYear(), equalTo(2010));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(-1));
assertThat("testDCDateString 3", dc.getDay(), equalTo(-1));
assertThat("testDCDateString 4", dc.getHour(), equalTo(-1));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(-1));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(-1));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(-1));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(-1));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(-1));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(-1));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(-1));
dc = new DCDate("2010-04");
assertThat("testDCDateString 1", dc.getYear(), equalTo(2010));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(04));
assertThat("testDCDateString 3", dc.getDay(), equalTo(-1));
assertThat("testDCDateString 4", dc.getHour(), equalTo(-1));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(-1));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(-1));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(04));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(-1));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(-1));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(-1));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(-1));
dc = new DCDate("2010-04-14");
assertThat("testDCDateString 1", dc.getYear(), equalTo(2010));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(04));
assertThat("testDCDateString 3", dc.getDay(), equalTo(14));
assertThat("testDCDateString 4", dc.getHour(), equalTo(-1));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(-1));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(-1));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(04));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(14));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(-1));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(-1));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(-1));
dc = new DCDate("2010-04-14T01");
assertThat("testDCDateString 1", dc.getYear(), equalTo(2010));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(04));
assertThat("testDCDateString 3", dc.getDay(), equalTo(13));
assertThat("testDCDateString 4", dc.getHour(), equalTo(17));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(0));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(0));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(04));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(14));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(1));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(0));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(0));
dc = new DCDate("2010-04-14T00:01");
assertThat("testDCDateString 1", dc.getYear(), equalTo(2010));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(04));
assertThat("testDCDateString 3", dc.getDay(), equalTo(13));
assertThat("testDCDateString 4", dc.getHour(), equalTo(16));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(1));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(0));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(04));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(14));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(0));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(1));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(0));
dc = new DCDate("2010-04-14T00:00:01Z");
assertThat("testDCDateString 1", dc.getYear(), equalTo(2010));
assertThat("testDCDateString 2", dc.getMonth(), equalTo(04));
assertThat("testDCDateString 3", dc.getDay(), equalTo(13));
assertThat("testDCDateString 4", dc.getHour(), equalTo(16));
assertThat("testDCDateString 5", dc.getMinute(), equalTo(0));
assertThat("testDCDateIntBits 6", dc.getSecond(), equalTo(1));
assertThat("testDCDateString 7", dc.getYearUTC(), equalTo(2010));
assertThat("testDCDateString 8", dc.getMonthUTC(), equalTo(04));
assertThat("testDCDateString 9", dc.getDayUTC(), equalTo(14));
assertThat("testDCDateString 10", dc.getHourUTC(), equalTo(0));
assertThat("testDCDateString 11", dc.getMinuteUTC(), equalTo(0));
assertThat("testDCDateString 12", dc.getSecondUTC(), equalTo(1));
}
/**
* Test of toString method, of class DCDate.
*/
@Test
public void testToString()
{
dc = new DCDate((String)null);
assertThat("testToString 0", dc.toString(), equalTo("null"));
dc = new DCDate("");
assertThat("testToString 1", dc.toString(), equalTo("null"));
dc = new DCDate("2010");
assertThat("testToString 2", dc.toString(), equalTo("2010"));
dc = new DCDate("2010-04");
assertThat("testToString 3", dc.toString(), equalTo("2010-04"));
dc = new DCDate("2010-04-14");
assertThat("testToString 4", dc.toString(), equalTo("2010-04-14"));
dc = new DCDate("2010-04-14T01");
assertThat("testToString 5", dc.toString(), equalTo("2010-04-14T01:00:00Z"));
dc = new DCDate("2010-04-14T00:01");
assertThat("testToString 6", dc.toString(),
equalTo("2010-04-14T00:01:00Z"));
dc = new DCDate("2010-04-14T00:00:01Z");
assertThat("testToString 7", dc.toString(),
equalTo("2010-04-14T00:00:01Z"));
}
/**
* Test of toDate method, of class DCDate.
*/
@Test
public void testToDate()
{
dc = new DCDate((Date)null);
assertThat("testToDate 0", dc.toDate(), nullValue());
c = new GregorianCalendar(2010,0,0);
dc = new DCDate(c.getTime());
assertThat("testToDate 1", dc.toDate(), equalTo(c.getTime()));
c = new GregorianCalendar(2010,4,0);
dc = new DCDate(c.getTime());
assertThat("testToDate 2", dc.toDate(), equalTo(c.getTime()));
c = new GregorianCalendar(2010,4,14);
dc = new DCDate(c.getTime());
assertThat("testToDate 3", dc.toDate(), equalTo(c.getTime()));
c = new GregorianCalendar(2010,4,14,0,0,1);
dc = new DCDate(c.getTime());
assertThat("testToDate 4", dc.toDate(), equalTo(c.getTime()));
}
/**
* Test of displayDate method, of class DCDate.
*/
@Test
public void testDisplayDate()
{
dc = new DCDate("2010");
assertThat("testDisplayDate 1 ", dc.displayDate(true, true,
new Locale("en_GB")),
equalTo("2010"));
dc = new DCDate("2010-04");
assertThat("testDisplayDate 2 ", dc.displayDate(true, true,
new Locale("en_GB")),
equalTo("Apr-2010"));
dc = new DCDate("2010-04-14");
assertThat("testDisplayDate 3 ", dc.displayDate(true, true,
new Locale("en_GB")),
equalTo("14-Apr-2010"));
dc = new DCDate("2010-04-14T00:00:01Z");
assertThat("testDisplayDate 4 ", dc.displayDate(true, true,
new Locale("en_GB")),
equalTo("13-Apr-2010 16:00:01"));
dc = new DCDate("2010-04-14T00:00:01Z");
assertThat("testDisplayDate 5 ", dc.displayDate(false, true,
new Locale("en_GB")),
equalTo("13-Apr-2010"));
dc = new DCDate("2010-04-14T00:00:01Z");
assertThat("testDisplayDate 6 ", dc.displayDate(true, false,
new Locale("es")),
equalTo("14-abr-2010 00:00:01"));
dc = new DCDate("2010-04-14T00:00:01Z");
assertThat("testDisplayDate 7 ", dc.displayDate(false, false,
new Locale("en_GB")),
equalTo("14-Apr-2010"));
}
/**
* Test of getCurrent method, of class DCDate.
*/
@Test
public void testGetCurrent()
{
assertTrue("testGetCurrent 0", DateUtils.isSameDay(DCDate.getCurrent().toDate(), new Date()));
}
/**
* Test of getMonthName method, of class DCDate.
*/
@Test
public void testGetMonthName()
{
assertThat("testGetMonthName 0", DCDate.getMonthName(-1, new Locale("en")),
equalTo("Unspecified"));
assertThat("testGetMonthName 1", DCDate.getMonthName(0, new Locale("en")),
equalTo("Unspecified"));
assertThat("testGetMonthName 2", DCDate.getMonthName(13, new Locale("en")),
equalTo("Unspecified"));
assertThat("testGetMonthName 3", DCDate.getMonthName(14, new Locale("en")),
equalTo("Unspecified"));
assertThat("testGetMonthName 4", DCDate.getMonthName(1, new Locale("en")),
equalTo("January"));
assertThat("testGetMonthName 5", DCDate.getMonthName(2, new Locale("en")),
equalTo("February"));
assertThat("testGetMonthName 6", DCDate.getMonthName(3, new Locale("en")),
equalTo("March"));
assertThat("testGetMonthName 7", DCDate.getMonthName(4, new Locale("en")),
equalTo("April"));
assertThat("testGetMonthName 8", DCDate.getMonthName(5, new Locale("en")),
equalTo("May"));
assertThat("testGetMonthName 9", DCDate.getMonthName(6, new Locale("en")),
equalTo("June"));
assertThat("testGetMonthName 10", DCDate.getMonthName(7, new Locale("en")),
equalTo("July"));
assertThat("testGetMonthName 11", DCDate.getMonthName(8, new Locale("en")),
equalTo("August"));
assertThat("testGetMonthName 12", DCDate.getMonthName(9, new Locale("en")),
equalTo("September"));
assertThat("testGetMonthName 13", DCDate.getMonthName(10, new Locale("en")),
equalTo("October"));
assertThat("testGetMonthName 14", DCDate.getMonthName(11, new Locale("en")),
equalTo("November"));
assertThat("testGetMonthName 15", DCDate.getMonthName(12, new Locale("en")),
equalTo("December"));
assertThat("testGetMonthName 16", DCDate.getMonthName(1, new Locale("es")),
equalTo("enero"));
assertThat("testGetMonthName 17", DCDate.getMonthName(2, new Locale("es")),
equalTo("febrero"));
assertThat("testGetMonthName 18", DCDate.getMonthName(3, new Locale("es")),
equalTo("marzo"));
assertThat("testGetMonthName 19", DCDate.getMonthName(4, new Locale("es")),
equalTo("abril"));
assertThat("testGetMonthName 20", DCDate.getMonthName(5, new Locale("es")),
equalTo("mayo"));
assertThat("testGetMonthName 21", DCDate.getMonthName(6, new Locale("es")),
equalTo("junio"));
assertThat("testGetMonthName 22", DCDate.getMonthName(7, new Locale("es")),
equalTo("julio"));
assertThat("testGetMonthName 23", DCDate.getMonthName(8, new Locale("es")),
equalTo("agosto"));
assertThat("testGetMonthName 24", DCDate.getMonthName(9, new Locale("es")),
equalTo("septiembre"));
assertThat("testGetMonthName 25", DCDate.getMonthName(10, new Locale("es")),
equalTo("octubre"));
assertThat("testGetMonthName 26", DCDate.getMonthName(11, new Locale("es")),
equalTo("noviembre"));
assertThat("testGetMonthName 27", DCDate.getMonthName(12, new Locale("es")),
equalTo("diciembre"));
}
/**
* Tests concurrency issues with date
* JIRA: DS-594
* Code by Andrew Taylor
* @author Andrew Taylor
*/
/**
public void testDCDateStringConcurrency() throws InterruptedException {
ExecutorService exec = Executors.newFixedThreadPool(8);
List<Callable<Void>> callables = new ArrayList<Callable<Void>>(10000);
for (int i = 0; i < 10000; i++) {
callables.add(new Callable<Void>() {
public Void call() throws Exception {
DCDate date = new DCDate("2010-08-01T23:01:34Z");
date.toDate();
return null;
}
});
}
List<Future<Void>> invoked = exec.invokeAll(callables, 10, TimeUnit.SECONDS);
for (Future<Void> future : invoked) {
try {
future.get();
} catch (ExecutionException e) {
log.error(e.toString(),e);
fail("Exception encountered (see stderr)");
}
}
}
*/
}