mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-12-16 07:51:08 +01:00
Rework XMPP Date/Time related code
- Fix "packet.Time is not thread-safe" (SMACK-543) - Update packet.Time to XEP-0202 Add SDM.supportsFeature(), since this is a pattern that repeats over and over again in Smack. Also add abstract Manager class, that takes care of the weak reference to Connection, as this is also a repeating pattern in Smack.
This commit is contained in:
parent
768700b301
commit
585e20e93e
21 changed files with 904 additions and 678 deletions
|
|
@ -0,0 +1,26 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2014 Florian Schmaus
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.jivesoftware.smackx;
|
||||
|
||||
public class InitExtensions {
|
||||
|
||||
static {
|
||||
(new ExtensionsProviderInitializer()).initialize();
|
||||
(new ExtensionsStartupClasses()).initialize();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -27,7 +27,7 @@ import java.util.GregorianCalendar;
|
|||
import java.util.Properties;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.jivesoftware.smack.util.XmppDateTime;
|
||||
import org.jivesoftware.smackx.delay.packet.DelayInfo;
|
||||
import org.jivesoftware.smackx.delay.packet.DelayInformation;
|
||||
import org.jivesoftware.smackx.delay.provider.DelayInfoProvider;
|
||||
|
|
@ -218,7 +218,7 @@ public class DelayInformationTest {
|
|||
.asString(outputProperties);
|
||||
|
||||
delayInfo = (DelayInfo) p.parseExtension(getParser(control, "delay"));
|
||||
Date controlDate = StringUtils.parseXEP0082Date("2008-06-08T09:16:20.0Z");
|
||||
Date controlDate = XmppDateTime.parseXEP0082Date("2008-06-08T09:16:20.0Z");
|
||||
|
||||
assertEquals(controlDate, delayInfo.getStamp());
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,98 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2014 Florian Schmaus
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
package org.jivesoftware.smackx.time.packet;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import org.jivesoftware.smack.DummyConnection;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.test.util.TestUtils;
|
||||
import org.jivesoftware.smack.util.PacketParserUtils;
|
||||
import org.jivesoftware.smackx.InitExtensions;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TimeTest extends InitExtensions {
|
||||
|
||||
@Test
|
||||
public void parseCurrentTimeTest() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
Time time = new Time(calendar);
|
||||
|
||||
Date date = time.getTime();
|
||||
Date calendarDate = calendar.getTime();
|
||||
|
||||
assertEquals(calendarDate, date);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void negativeTimezoneTest() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeZone(TimeZone.getTimeZone("GMT-830"));
|
||||
Time time = new Time(calendar);
|
||||
|
||||
assertEquals("-8:30", time.getTzo());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void positiveTimezoneTest() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeZone(TimeZone.getTimeZone("GMT+830"));
|
||||
Time time = new Time(calendar);
|
||||
|
||||
assertEquals("+8:30", time.getTzo());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseTimeWithIntrospectionTest() throws Exception {
|
||||
DummyConnection connection = new DummyConnection();
|
||||
|
||||
// @formatter:off
|
||||
final String request =
|
||||
"<iq type='get'"
|
||||
+ "from='romeo@montague.net/orchard'"
|
||||
+ "to='juliet@capulet.com/balcony'"
|
||||
+ "id='time_1'>"
|
||||
+ "<time xmlns='urn:xmpp:time'/>"
|
||||
+ "</iq>";
|
||||
// @formatter:on
|
||||
IQ iqRequest = PacketParserUtils.parseIQ(TestUtils.getIQParser(request), connection);
|
||||
assertTrue(iqRequest instanceof Time);
|
||||
|
||||
// @formatter:off
|
||||
final String response =
|
||||
"<iq type='result'"
|
||||
+ "from='juliet@capulet.com/balcony'"
|
||||
+ "to='romeo@montague.net/orchard'"
|
||||
+ "id='time_1'>"
|
||||
+ "<time xmlns='urn:xmpp:time'>"
|
||||
+ "<tzo>-06:00</tzo>"
|
||||
+ "<utc>2006-12-19T17:58:35Z</utc>"
|
||||
+ "</time>"
|
||||
+ "</iq>";
|
||||
// @formatter:on
|
||||
IQ iqResponse = PacketParserUtils.parseIQ(TestUtils.getIQParser(response), connection);
|
||||
assertTrue(iqResponse instanceof Time);
|
||||
Time time = (Time) iqResponse;
|
||||
assertEquals("-06:00", time.getTzo());
|
||||
assertEquals("2006-12-19T17:58:35Z", time.getUtc());
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue