blob: c80e177b075f548f400ab84346ca099fbd220fc1 [file] [log] [blame]
package com.intellij.tasks;
import com.intellij.notification.Notification;
import com.intellij.notification.Notifications;
import com.intellij.notification.NotificationsAdapter;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.util.Ref;
import com.intellij.tasks.impl.LocalTaskImpl;
import com.intellij.tasks.impl.TaskProjectConfiguration;
import com.intellij.tasks.youtrack.YouTrackRepository;
import com.intellij.tasks.youtrack.YouTrackRepositoryType;
import com.intellij.util.xmlb.XmlSerializer;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
/**
* @author Dmitry Avdeev
*/
public class TaskManagerTest extends TaskManagerTestCase {
public void testAddRemoveListener() throws Exception {
TaskListener listener = new TaskListenerAdapter() {
@Override
public void taskActivated(LocalTask task) {
}
};
myTaskManager.addTaskListener(listener);
myTaskManager.removeTaskListener(listener);
}
public void testTaskSwitch() throws Exception {
final Ref<Integer> count = Ref.create(0);
TaskListener listener = new TaskListenerAdapter() {
@Override
public void taskActivated(LocalTask task) {
count.set(count.get() + 1);
}
};
myTaskManager.addTaskListener(listener);
LocalTask localTask = myTaskManager.createLocalTask("foo");
myTaskManager.activateTask(localTask, false);
assertEquals(1, count.get().intValue());
LocalTask other = myTaskManager.createLocalTask("bar");
myTaskManager.activateTask(other, false);
assertEquals(2, count.get().intValue());
myTaskManager.removeTaskListener(listener);
}
public void testNotifications() throws Exception {
final Ref<Notification> notificationRef = new Ref<Notification>();
getProject().getMessageBus().connect(getTestRootDisposable()).subscribe(Notifications.TOPIC, new NotificationsAdapter() {
@Override
public void notify(@NotNull Notification notification) {
notificationRef.set(notification);
}
});
TestRepository repository = new TestRepository() {
@Override
public Task[] getIssues(@Nullable String query, int max, long since) throws Exception {
throw new Exception();
}
};
myTaskManager.setRepositories(Collections.singletonList(repository));
myTaskManager.updateIssues(null);
assertNull(notificationRef.get());
myTaskManager.getIssues("");
assertNotNull(notificationRef.get());
}
public void testSharedServers() throws Exception {
TaskRepository repository = new YouTrackRepository(new YouTrackRepositoryType());
repository.setShared(true);
myTaskManager.setRepositories(Collections.singletonList(repository));
TaskProjectConfiguration configuration = ServiceManager.getService(getProject(), TaskProjectConfiguration.class);
TaskProjectConfiguration state = configuration.getState();
assertNotNull(state);
assertEquals(1, state.servers.size());
Element element = XmlSerializer.serialize(state);
configuration.servers.clear();
myTaskManager.setRepositories(Collections.<TaskRepository>emptyList());
configuration.loadState(XmlSerializer.deserialize(element, TaskProjectConfiguration.class));
assertEquals(1, state.servers.size());
myTaskManager.projectOpened();
TaskRepository[] repositories = myTaskManager.getAllRepositories();
assertEquals(1, repositories.length);
}
public void testIssuesCacheSurvival() throws Exception {
final Ref<Boolean> stopper = new Ref<Boolean>(Boolean.FALSE);
TestRepository repository = new TestRepository(new LocalTaskImpl("foo", "bar")) {
@Override
public Task[] getIssues(@Nullable String query, int max, long since) throws Exception {
if (stopper.get()) throw new Exception();
return super.getIssues(query, max, since);
}
};
myTaskManager.setRepositories(Collections.singletonList(repository));
List<Task> issues = myTaskManager.getIssues("");
assertEquals(1, issues.size());
stopper.set(Boolean.TRUE);
issues = myTaskManager.getIssues("");
assertEquals(1, issues.size());
}
}