package org.jolokia.util;
/*
* Copyright 2009-2013 Roland Huss
*
* 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.
*/
import java.lang.reflect.Field;
import java.util.Date;
import java.util.TimeZone;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
/**
* @author roland
* @since 19.04.11
*/
public class DateUtilTest {
@Test
public void conversion() {
runTests();
}
@Test(expectedExceptions = {IllegalArgumentException.class})
public void illegalFormat() {
DateUtil.fromISO8601("Bla");
}
@Test(expectedExceptions = {IllegalArgumentException.class})
public void illegalFormat2() throws NoSuchFieldException, IllegalAccessException {
Object oldValue = exchangeDataTypeFactory();
DateUtil.fromISO8601("Bla");
resetDataTypeFactory(oldValue);
}
@Test
public void conversionWithOwnAlgo() throws NoSuchFieldException, IllegalAccessException {
Object oldValue = exchangeDataTypeFactory();
runTests();
resetDataTypeFactory(oldValue);
}
private void resetDataTypeFactory(Object pOldValue) throws NoSuchFieldException, IllegalAccessException {
Field field = DateUtil.class.getDeclaredField("datatypeFactory");
field.setAccessible(true);
field.set(null, pOldValue);
}
private Object exchangeDataTypeFactory() throws IllegalAccessException, NoSuchFieldException {
Field field = DateUtil.class.getDeclaredField("datatypeFactory");
field.setAccessible(true);
Object oldValue = field.get(null);
field.set(null,null);
return oldValue;
}
// ====================================================
private void runTests() {
Date testDate = new Date(1303195711000L);
// Check date formatting
assertEquals(DateUtil.toISO8601(testDate, TimeZone.getTimeZone("Europe/Berlin")),
"2011-04-19T08:48:31+02:00");
assertEquals(DateUtil.toISO8601(testDate, TimeZone.getTimeZone("Europe/London")),
"2011-04-19T07:48:31+01:00");
// Check date parsing
String[] dateStrings = {
"2011-04-19T08:48:31+02:00",
"2011-04-19T06:48:31+00:00",
"2011-04-19T06:48:31Z",
"2011-04-19T07:18:31+00:30",
};
for (String toParse : dateStrings) {
Date date = DateUtil.fromISO8601(toParse);
assertEquals(date, testDate);
}
}
}