/*
* Copyright 2000-2006 JetBrains s.r.o.
*
* 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 jetbrains.communicator.idea.monitor;
import jetbrains.communicator.core.IDEtalkOptions;
import jetbrains.communicator.core.Pico;
import jetbrains.communicator.core.impl.BaseTestCase;
import jetbrains.communicator.core.users.PresenceMode;
import jetbrains.communicator.mock.MockTransport;
import jetbrains.communicator.util.WaitFor;
/**
* @author Kir
*/
public class UserActivityMonitorTest extends BaseTestCase {
private Thread myThread;
private UserActivityMonitor myMonitor;
private MockTransport myTransport;
public UserActivityMonitorTest(String string) {
super(string);
}
@Override
protected void setUp() throws Exception {
super.setUp();
myTransport = new MockTransport();
Pico.getInstance().registerComponentInstance(myTransport);
myMonitor = new UserActivityMonitor();
myMonitor.setRefreshInterval(100);
myThread = new Thread(myMonitor, "UserActivityMonitorTest-" + getName());
}
public void testOfflineTransport() throws Exception {
myTransport.setOnline(false);
startThread();
assertNull(myTransport.getPresence());
}
public void testNotAvailable() throws Exception {
startThread();
assertNotNull(myTransport.getPresence());
assertEquals(PresenceMode.EXTENDED_AWAY, myTransport.getPresence().getPresenceMode());
}
public void testAvailable() throws Exception {
myMonitor.activity();
startThread();
assertNotNull(myTransport.getPresence());
assertEquals(PresenceMode.AVAILABLE, myTransport.getPresence().getPresenceMode());
}
public void testAway() throws Exception {
myOptions.setNumber(IDEtalkOptions.TIMEOUT_AWAY_MIN, 1.0/60/20);
myOptions.setNumber(IDEtalkOptions.TIMEOUT_XA_MIN, 1.0/60/5);
myMonitor.activity();
Thread.sleep(100);
startThread();
assertNotNull(myTransport.getPresence());
assertEquals(PresenceMode.AWAY, myTransport.getPresence().getPresenceMode());
}
public void testExtendedAway() throws Exception {
myMonitor.activity();
myOptions.setNumber(IDEtalkOptions.TIMEOUT_AWAY_MIN, 1.0/60/20);
myOptions.setNumber(IDEtalkOptions.TIMEOUT_XA_MIN, 1.0/60/5);
Thread.sleep(250);
startThread();
assertNotNull(myTransport.getPresence());
assertEquals(PresenceMode.EXTENDED_AWAY, myTransport.getPresence().getPresenceMode());
}
private void startThread() {
myThread.start();
new WaitFor(500) {
@Override
protected boolean condition() {
return myTransport.getPresence() != null;
}
};
}
@Override
protected void tearDown() throws Exception {
try {
myMonitor.disposeComponent();
myThread.join();
}
finally {
super.tearDown();
}
}
}