package org.jolokia.converter.json;
/*
* 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.InvocationTargetException;
import java.util.Date;
import java.util.Stack;
import javax.management.AttributeNotFoundException;
import mockit.Mock;
import mockit.MockUp;
import org.jolokia.util.DateUtil;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
/**
* @author roland
* @since 18.04.11
*/
public class DateExtractorTest {
private DateExtractor extractor;
private ObjectToJsonConverter converter;
@BeforeMethod
public void setup() {
extractor = new DateExtractor();
new MockUp<ObjectToJsonConverter>() {
@Mock
public ValueFaultHandler getValueFaultHandler() {
return new PathAttributeFilterValueFaultHandler(ValueFaultHandler.THROWING_VALUE_FAULT_HANDLER);
}
};
// Needed for subclassing final object
converter = new ObjectToJsonConverter(null, null);
}
@Test
public void type() {
assertEquals(extractor.getType(),Date.class);
}
@Test
public void canSetValue() {
assertTrue(extractor.canSetValue());
}
@Test
public void directExtract() throws AttributeNotFoundException {
Date date = new Date();
Stack stack = new Stack();
Object result = extractor.extractObject(null,date,stack,false);
assertEquals(result,date);
stack.add("time");
result = extractor.extractObject(null,date,stack,false);
assertEquals(result,date);
}
@Test
public void simpleJsonExtract() throws AttributeNotFoundException {
Date date = new Date();
Stack stack = new Stack();
Object result = extractor.extractObject(null,date,stack,true);
assertEquals(result, DateUtil.toISO8601(date));
stack.add("time");
result = extractor.extractObject(null,date,stack,true);
assertEquals(result,date.getTime());
}
@Test(enabled = true, expectedExceptions = ValueFaultHandler.AttributeFilteredException.class)
public void simpleJsonExtractWithWrongPath() throws AttributeNotFoundException {
Date date = new Date();
Stack stack = new Stack();
stack.add("blablub");
extractor.extractObject(converter, date, stack, true);
}
@Test
public void timeSet() throws InvocationTargetException, IllegalAccessException {
Date date = new Date();
long currentTime = date.getTime();
Object oldVal = extractor.setObjectValue(null,date,"time",0L);
assertEquals(oldVal,currentTime);
assertEquals(date.getTime(),0L);
oldVal = extractor.setObjectValue(null,date,"time","1000");
assertEquals(oldVal,0L);
assertEquals(date.getTime(),1000L);
}
@Test
public void iso8601Set() throws InvocationTargetException, IllegalAccessException {
Date date = new Date();
String current = DateUtil.toISO8601(date);
Object oldVal = extractor.setObjectValue(null,date,"iso8601",DateUtil.toISO8601(new Date(0)));
assertEquals(oldVal,current);
assertEquals(date.getTime(),0L);
}
@Test(expectedExceptions = { UnsupportedOperationException.class })
public void invalidSet() throws InvocationTargetException, IllegalAccessException {
Object oldVal = extractor.setObjectValue(null,new Date(),"blubbla",0L);
}
}