diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | build.xml | 15 | ||||
-rw-r--r-- | src/com/isode/stroke/muc/MUCImpl.java | 8 | ||||
-rw-r--r-- | src/com/isode/stroke/network/JavaTimer.java | 47 |
4 files changed, 46 insertions, 26 deletions
@@ -20,7 +20,7 @@ FINDBUGS_VERSION=3.0.1 .PHONY : test test: dist/lib/stroke.jar third-party/cobertura/cobertura.jar third-party/findbugs-$(FINDBUGS_VERSION)/lib/findbugs.jar third-party/pmd/lib/pmd-5.0.0.jar - ant ${DEFINES} -DJUNIT_JAR=${JUNIT} -Dcobertura-jar=third-party/cobertura/cobertura.jar -Djakarta-oro-jar=third-party/cobertura/lib/jakarta-oro-2.0.8.jar -Dlog4j-jar=third-party/cobertura/lib/log4j-1.2.9.jar -Dasm-jar=third-party/cobertura/lib/asm-3.0.jar -Dasm-tree-jar=third-party/cobertura/lib/asm-tree-3.0.jar -Dicu4j-jar=third-party/icu4j.jar -Dfindbugs.home=third-party/findbugs-$(FINDBUGS_VERSION) -Dpmd.home=third-party/pmd test + ant ${DEFINES} -DJUNIT_JAR=${JUNIT} -DHAMCREST_JAR=${HAMCREST} -Dcobertura-jar=third-party/cobertura/cobertura.jar -Djakarta-oro-jar=third-party/cobertura/lib/jakarta-oro-2.0.8.jar -Dlog4j-jar=third-party/cobertura/lib/log4j-1.2.9.jar -Dasm-jar=third-party/cobertura/lib/asm-3.0.jar -Dasm-tree-jar=third-party/cobertura/lib/asm-tree-3.0.jar -Dicu4j-jar=third-party/icu4j.jar -Dfindbugs.home=third-party/findbugs-$(FINDBUGS_VERSION) -Dpmd.home=third-party/pmd test third-party/aalto/aalto-xml.jar: mkdir -p third-party/aalto @@ -117,6 +117,7 @@ <classpath> <pathelement location="${jar}"/> <pathelement location="${JUNIT_JAR}"/> + <pathelement location="${HAMCREST_JAR}"/> <fileset dir="${icu4j-dir}" includes="icu4j.jar"/> </classpath> </javac> @@ -143,6 +144,7 @@ </classpath> <classpath> <pathelement location="${JUNIT_JAR}"/> + <pathelement location="${HAMCREST_JAR}"/> <pathelement location="${jar}"/> <pathelement location="${src.tests}"/> <path refid="classpath"/> @@ -201,7 +203,7 @@ </pmd> </target> - <target name="test" depends="compile-tests, instrument, run-tests, coverage, findbugs, pmd"> + <target name="test" depends="compile-tests, instrument, run-tests, coverage, findbugs, pmd, report-junit-tests"> </target> <target name="clean" @@ -243,4 +245,15 @@ </classpath> </java> </target> + + <target name="report-junit-tests" depends="run-tests"> + <mkdir dir="${test.results}/html"/> + <junitreport todir="${test.results}"> + <fileset dir="${test.results}"> + <include name="TEST-*.xml"/> + </fileset> + <report todir="${test.results}/html"/> + </junitreport> + </target> + </project> diff --git a/src/com/isode/stroke/muc/MUCImpl.java b/src/com/isode/stroke/muc/MUCImpl.java index 26be309..2a45926 100644 --- a/src/com/isode/stroke/muc/MUCImpl.java +++ b/src/com/isode/stroke/muc/MUCImpl.java @@ -106,7 +106,9 @@ public class MUCImpl extends MUC { /** * Change the affiliation of the given Jabber ID. * It must be called with the real JID, not the room JID. - * @param jid real jabber ID, not null + * @param jid real jabber ID, not null. NOTE: This method does not + strip any resource from the JID, as expected by XEP-0045. Callers + wanting to be strictly XEP-0045 conformant should pass in a bare JID * @param affiliation new affiliation, not null */ @Override @@ -114,7 +116,9 @@ public class MUCImpl extends MUC { final MUCAdminPayload mucPayload = new MUCAdminPayload(); MUCItem item = new MUCItem(); item.affiliation = affiliation; - item.realJID = jid.toBare(); + // According to XEP-0045 the JID should be bare, but this isn't being done here because + // to provide support for applications where we do want to set affilations on a per resource basis + item.realJID = jid; mucPayload.addItem(item); GenericRequest<MUCAdminPayload> request = new GenericRequest<MUCAdminPayload>( IQ.Type.Set, getJID(), mucPayload, iqRouter_); diff --git a/src/com/isode/stroke/network/JavaTimer.java b/src/com/isode/stroke/network/JavaTimer.java index ac9e219..2baae3d 100644 --- a/src/com/isode/stroke/network/JavaTimer.java +++ b/src/com/isode/stroke/network/JavaTimer.java @@ -4,21 +4,20 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ /* - * Copyright (c) 2010, Isode Limited, London, England. + * Copyright (c) 2010-2018, Isode Limited, London, England. * All rights reserved. */ package com.isode.stroke.network; -import java.util.Date; - import com.isode.stroke.eventloop.Event; import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.eventloop.EventOwner; class JavaTimer extends Timer { - private class TimerRunnable implements Runnable { + private class TimerRunnable implements Runnable,EventOwner { - boolean running_ = true; + private boolean running_ = true; private final EventLoop eventLoop_; private final long milliseconds_; @@ -28,25 +27,27 @@ class JavaTimer extends Timer { } public void run() { - long endTime = new Date().getTime() + milliseconds_; - while (shouldEmit() && new Date().getTime() < endTime) { + long endTime = System.currentTimeMillis() + milliseconds_; + while (shouldEmit() && System.currentTimeMillis() < endTime) { try { - long timeToWait = endTime - new Date().getTime(); + long timeToWait = endTime - System.currentTimeMillis(); if (timeToWait > 0) { - Thread.sleep(milliseconds_); + Thread.sleep(timeToWait); } } catch (InterruptedException ex) { // Needs to be caught, but won't break out of the loop // unless end time reached or stop() has been called. } - } - if (shouldEmit()) { - eventLoop_.postEvent(new Event.Callback() { - public void run() { - onTick.emit(); - } - }); - } + } + synchronized(this) { + if (shouldEmit()) { + eventLoop_.postEvent(new Event.Callback() { + public void run() { + onTick.emit(); + } + },this); + } + } } @@ -56,6 +57,7 @@ class JavaTimer extends Timer { public synchronized void stop() { running_ = false; + timer_.eventLoop_.removeEventsFromOwner(this); } } @@ -85,14 +87,15 @@ class JavaTimer extends Timer { @Override public void stop() { timer_.stop(); - //FIXME: This needs to clear any remaining events out of the EventLoop queue. } - + @Override public String toString() { - return "JavaTimer for " + timer_.milliseconds_ + - " milliseconds " + - (timer_.running_ ? "running" : "not running"); + synchronized (timer_) { + return "JavaTimer for " + timer_.milliseconds_ + + " milliseconds " + + (timer_.running_ ? "running" : "not running"); + } } private final TimerRunnable timer_; } |