package org.limewire.core.impl.mozilla;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.atomic.AtomicReference;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.limewire.util.AssignParameterAction;
import org.limewire.util.BaseTestCase;
import org.limewire.util.ExecuteRunnableAction;
import org.mozilla.interfaces.nsIDownload;
import org.mozilla.interfaces.nsIDownloadManager;
import org.mozilla.interfaces.nsILocalFile;
import org.mozilla.interfaces.nsISimpleEnumerator;
import com.limegroup.gnutella.DownloadManager;
import com.limegroup.gnutella.downloader.CoreDownloader;
import com.limegroup.mozilla.MozillaDownload;
public class LimeMozillaDownloadManagerListenerImplTest extends BaseTestCase {
public LimeMozillaDownloadManagerListenerImplTest(String name) {
super(name);
}
public void testResumeDownloads() {
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
final ScheduledExecutorService scheduledExecutorService = context
.mock(ScheduledExecutorService.class);
final DownloadManager downloadManager = context.mock(DownloadManager.class);
final XPComUtility xComUtility = context.mock(XPComUtility.class);
final nsIDownloadManager nsIDownloadManager = context.mock(nsIDownloadManager.class);
final nsISimpleEnumerator nsISimpleEnumerator = context.mock(nsISimpleEnumerator.class);
final nsIDownload nsIDownload = context.mock(nsIDownload.class);
final long downloadID = 1;
context.checking(new Expectations() {
{
allowing(xComUtility).getServiceProxy(
LimeMozillaDownloadManagerListenerImpl.NS_IDOWNLOADMANAGER_CID,
nsIDownloadManager.class);
will(returnValue(nsIDownloadManager));
one(nsIDownloadManager).getActiveDownloads();
will(returnValue(nsISimpleEnumerator));
one(nsISimpleEnumerator).hasMoreElements();
will(returnValue(true));
one(nsISimpleEnumerator).getNext();
will(returnValue(nsIDownload));
one(xComUtility).proxy(nsIDownload, nsIDownload.class);
will(returnValue(nsIDownload));
one(nsIDownload).getId();
will(returnValue(downloadID));
one(nsIDownloadManager).resumeDownload(downloadID);
one(nsISimpleEnumerator).hasMoreElements();
will(returnValue(false));
}
});
LimeMozillaDownloadManagerListenerImpl limeMozillaDownloadManagerListenerImpl = new LimeMozillaDownloadManagerListenerImpl(
scheduledExecutorService, downloadManager, xComUtility);
limeMozillaDownloadManagerListenerImpl.resumeDownloads();
context.assertIsSatisfied();
}
public void testAddMissingDownloads() {
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
final ScheduledExecutorService scheduledExecutorService = context
.mock(ScheduledExecutorService.class);
final DownloadManager downloadManager = context.mock(DownloadManager.class);
final XPComUtility xComUtility = context.mock(XPComUtility.class);
final nsIDownloadManager nsIDownloadManager = context.mock(nsIDownloadManager.class);
final nsISimpleEnumerator nsISimpleEnumerator = context.mock(nsISimpleEnumerator.class);
final nsIDownload nsIDownload = context.mock(nsIDownload.class);
final long downloadID = 1;
final long downloadSize = 111;
final CoreDownloader downloader = context.mock(CoreDownloader.class);
final nsILocalFile targetFile = context.mock(nsILocalFile.class);
final AtomicReference<LimeMozillaDownloadProgressListenerImpl> progressListener = new AtomicReference<LimeMozillaDownloadProgressListenerImpl>();
context.checking(new Expectations() {
{
allowing(xComUtility).getServiceProxy(
LimeMozillaDownloadManagerListenerImpl.NS_IDOWNLOADMANAGER_CID,
nsIDownloadManager.class);
will(returnValue(nsIDownloadManager));
one(nsIDownloadManager).getActiveDownloads();
will(returnValue(nsISimpleEnumerator));
one(nsISimpleEnumerator).hasMoreElements();
will(returnValue(true));
one(nsISimpleEnumerator).getNext();
will(returnValue(nsIDownload));
one(xComUtility).proxy(nsIDownload, nsIDownload.class);
will(returnValue(nsIDownload));
allowing(nsIDownload).getId();
will(returnValue(downloadID));
one(nsISimpleEnumerator).hasMoreElements();
will(returnValue(false));
one(nsIDownload).getSize();
will(returnValue(downloadSize));
one(nsIDownload).getTargetFile();
will(returnValue(targetFile));
one(targetFile).getPath();
will(returnValue("/tmp/somefile"));
one(nsIDownloadManager).addListener(with(any(LimeMozillaDownloadProgressListenerImpl.class)));
will(new AssignParameterAction<LimeMozillaDownloadProgressListenerImpl>(progressListener, 0));
one(downloadManager).downloadFromMozilla(with(any(MozillaDownload.class)));
will(returnValue(downloader));
one(scheduledExecutorService).execute(with(any(Runnable.class)));
will(new ExecuteRunnableAction());
}
});
LimeMozillaDownloadManagerListenerImpl limeMozillaDownloadManagerListenerImpl = new LimeMozillaDownloadManagerListenerImpl(
scheduledExecutorService, downloadManager, xComUtility);
limeMozillaDownloadManagerListenerImpl.addMissingDownloads();
assertNotNull(progressListener.get());
assertEquals(downloadID, progressListener.get().getDownloadId());
context.assertIsSatisfied();
}
}