package org.jivesoftware.openfire.handler;
import org.dom4j.Element;
import org.jivesoftware.util.XMPPDateTimeFormat;
import org.junit.Test;
import org.xmpp.packet.IQ;
import javax.xml.bind.DatatypeConverter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @author csh
*/
public class IQEntityTimeHandlerTest {
@Test
public void testIQInfo() {
IQEntityTimeHandler iqEntityTimeHandler = new IQEntityTimeHandler();
assertTrue(iqEntityTimeHandler.getFeatures().hasNext());
assertEquals(iqEntityTimeHandler.getFeatures().next(), "urn:xmpp:time");
assertEquals(iqEntityTimeHandler.getInfo().getNamespace(), "urn:xmpp:time");
assertEquals(iqEntityTimeHandler.getInfo().getName(), "time");
}
@Test
public void testTimeZone() {
IQEntityTimeHandler iqEntityTimeHandler = new IQEntityTimeHandler();
assertEquals(iqEntityTimeHandler.formatsTimeZone(TimeZone.getTimeZone("GMT-8:00")), "-08:00");
}
@Test
public void testUtcDate() {
IQEntityTimeHandler iqEntityTimeHandler = new IQEntityTimeHandler();
Date date = new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
assertEquals(iqEntityTimeHandler.getUtcDate(date), DatatypeConverter.printDateTime(calendar));
}
@Test
public void testPerformanceDatatypeConvertVsXMPPDateFormat() {
Date date = new Date();
Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
calendar.setTime(date);
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
DatatypeConverter.printDateTime(calendar);
}
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
XMPPDateTimeFormat.format(date);
}
System.out.println(System.currentTimeMillis() - start);
}
@Test
public void testIQ() {
IQEntityTimeHandler iqEntityTimeHandler = new IQEntityTimeHandler();
IQ input = new IQ(IQ.Type.get, "1");
IQ result = iqEntityTimeHandler.handleIQ(input);
assertEquals(result.getChildElement().getName(), "time");
assertEquals(result.getChildElement().getNamespace().getText(), "urn:xmpp:time");
assertEquals(result.getChildElement().content().size(), 2);
assertTrue(result.getChildElement().content().get(0) instanceof Element);
assertTrue(result.getChildElement().content().get(1) instanceof Element);
assertEquals(((Element) result.getChildElement().content().get(0)).getName(), "tzo");
assertEquals(((Element) result.getChildElement().content().get(1)).getName(), "utc");
}
}