package uws.job.parameters;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.text.ParseException;
import org.junit.Before;
import org.junit.Test;
public class TestDurationParamController {
@Before
public void setUp() throws Exception{}
@Test
public void testCheck(){
// min < value < max => value (in ms):
DurationParamController controller = new DurationParamController();
try{
controller.reset(10, 5, controller.parseDuration("1M"));
assertEquals(23l, controller.check(23));
assertEquals(23l, controller.check("23"));
assertEquals(1987200000l, controller.check("23D"));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
// value < min < max => min:
controller = new DurationParamController();
try{
controller.reset(10, 5, controller.parseDuration("1M"));
assertEquals(5l, controller.check(2));
assertEquals(5l, controller.check("5"));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
// value > max => max:
controller = new DurationParamController();
try{
controller.reset(10, 5, controller.parseDuration("1M"));
assertEquals(2592000000l, controller.check(31536000000l));
assertEquals(2592000000l, controller.check("31536000000"));
assertEquals(2592000000l, controller.check("2 months"));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
// NULL value => default
controller = new DurationParamController();
try{
controller.reset(10, 5, controller.parseDuration("1M"));
assertEquals(10l, controller.check(null));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
}
@Test
public void testToStringLong(){
DurationParamController controller = new DurationParamController();
try{
assertEquals(0, controller.toString(null).length());
assertEquals("0ms", controller.toString(0l));
assertEquals("23ms", controller.toString(23l));
assertEquals("1s", controller.toString(1000l));
assertEquals("60001ms", controller.toString(60001l));
assertEquals("1m", controller.toString(60000l));
assertEquals("1D", controller.toString(controller.parseDuration("24 hours")));
assertEquals("23h", controller.toString(controller.parseDuration("23 hours")));
assertEquals("23D", controller.toString(controller.parseDuration("23 days")));
assertEquals("2W", controller.toString(controller.parseDuration("14 days")));
assertEquals("23W", controller.toString(controller.parseDuration("23 weeks")));
assertEquals("1M", controller.toString(controller.parseDuration("30 days")));
assertEquals("23M", controller.toString(controller.parseDuration("23 months")));
assertEquals("1Y", controller.toString(controller.parseDuration("365 days")));
assertEquals("23Y", controller.toString(controller.parseDuration("23 years")));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
}
@Test
public void testParseDuration(){
// NULL => -1
DurationParamController controller = new DurationParamController();
try{
assertEquals(-1, controller.parseDuration(null));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
// Negative duration:
controller = new DurationParamController();
try{
assertEquals(-1, controller.parseDuration("-23"));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
// Duration without unit:
controller = new DurationParamController();
try{
assertEquals(23, controller.parseDuration("23"));
assertEquals(23, controller.parseDuration(" 23"));
assertEquals(23, controller.parseDuration("23 "));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
// Duration with unit:
controller = new DurationParamController();
try{
// MILLISECONDS
String[] units = new String[]{"ms","milliseconds"," ms"," milliseconds "};
for(String u : units)
assertEquals(23, controller.parseDuration("23" + u));
// SECONDS
units = new String[]{"s","sec","seconds"," s","sec "," seconds "};
for(String u : units)
assertEquals(23000, controller.parseDuration("23" + u));
// MINUTES
units = new String[]{"m","min","minutes"," m","min "," minutes "};
for(String u : units)
assertEquals(1380000, controller.parseDuration("23" + u));
// HOURS
units = new String[]{"h","hours"," h"," hours "};
for(String u : units)
assertEquals(82800000, controller.parseDuration("23" + u));
// DAYS
units = new String[]{"D","days"," D"," days "};
for(String u : units)
assertEquals(1987200000, controller.parseDuration("23" + u));
// WEEKS
units = new String[]{"W","weeks"," W"," weeks "};
for(String u : units)
assertEquals(13910400000l, controller.parseDuration("23" + u));
// MONTHS
units = new String[]{"M","months"," M"," months "};
for(String u : units)
assertEquals(59616000000l, controller.parseDuration("23" + u));
// YEARS
units = new String[]{"Y","years"," Y"," years "};
for(String u : units)
assertEquals(725328000000l, controller.parseDuration("23" + u));
}catch(Exception e){
e.printStackTrace(System.err);
fail("Unexpected error! See the console for more details about the error.");
}
// Duration with an unknown unit:
controller = new DurationParamController();
String[] units = new String[]{"MS","Seconds","H","foo"};
for(String u : units){
try{
controller.parseDuration("23" + u);
fail("This unit (" + u + ") is not supported! An error should have been thrown.");
}catch(Exception e){
assertEquals(ParseException.class, e.getClass());
assertEquals("Unexpected format for a duration: \"23" + u + "\"! Cause: it does not match the following Regular Expression: " + DurationParamController.PATTERN_DURATION.pattern(), e.getMessage());
}
}
}
}