/*
* $Id$
*
* Copyright 2006 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.model.utests;
import java.util.List;
import junit.framework.TestCase;
import ome.conditions.ApiUsageException;
import ome.model.containers.Dataset;
import ome.model.containers.Project;
import ome.model.containers.ProjectDatasetLink;
import ome.model.core.Channel;
import ome.model.core.Image;
import ome.model.core.OriginalFile;
import ome.model.core.Pixels;
import ome.model.core.PlaneInfo;
import ome.model.display.Thumbnail;
import ome.model.jobs.ImportJob;
import ome.model.jobs.JobOriginalFileLink;
import ome.model.meta.Experimenter;
import ome.model.meta.ExperimenterGroup;
import ome.model.meta.GroupExperimenterMap;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class SetsAndLinksTest extends TestCase {
Project p;
Dataset d;
Image i;
Pixels pix;
@Override
@BeforeMethod
protected void setUp() throws Exception {
p = new Project();
d = new Dataset();
i = new Image();
pix = new Pixels();
}
@Test
public void test_linking() throws Exception {
p.linkDataset(d);
assertTrue(p.linkedDatasetList().size() == 1);
assertTrue(p.linkedDatasetIterator().next().equals(d));
}
@Test
public void test_unlinking() throws Exception {
p.linkDataset(d);
p.unlinkDataset(d);
assertTrue(p.linkedDatasetList().size() == 0);
p.linkDataset(d);
p.clearDatasetLinks();
assertTrue(p.linkedDatasetList().size() == 0);
}
@Test
public void test_retrieving() throws Exception {
p.linkDataset(d);
List l = p.eachLinkedDataset(null);
assertTrue(l.size() == 1);
assertTrue(l.get(0).equals(d));
}
@Test
public void test_adding_a_placeholder() throws Exception {
Project p = new Project();
Dataset d = new Dataset(new Long(1L), false);
p.linkDataset(d);
}
@Test(groups = "ticket:60")
public void test_cantLinkNullSet() throws Exception {
p.putAt(Project.DATASETLINKS, null); // This is a workaround.
try {
p.linkDataset(d);
fail("Should not be allowed.");
} catch (ApiUsageException api) {
// ok.
}
}
@Test(groups = "ticket:60")
public void test_butWeStillWantToUseUnloadeds() throws Exception {
d.unload();
p.linkDataset(d);
}
@Test(groups = "ticket:60")
public void test_andTheReverseToo() throws Exception {
d.putAt(Dataset.PROJECTLINKS, null); // This is a workaround.
try {
p.linkDataset(d);
fail("Should not be allowed.");
} catch (ApiUsageException api) {
// ok.
}
}
// Default Experimenter Group
@Test
public void test_one_way_to_default_link() throws Exception {
Experimenter experimenter = new Experimenter();
ExperimenterGroup defaultGroup = new ExperimenterGroup();
ExperimenterGroup defaultGroup2 = new ExperimenterGroup();
experimenter.linkExperimenterGroup(defaultGroup);
testIsDefault(experimenter, defaultGroup);
GroupExperimenterMap map = experimenter
.linkExperimenterGroup(defaultGroup2);
experimenter.setPrimaryGroupExperimenterMap(map);
testIsDefault(experimenter, defaultGroup2);
}
@Test(groups = { "broken", "ticket:346" })
public void testAddingFillsContainer() throws Exception {
Pixels p = new Pixels();
Thumbnail tb = new Thumbnail();
tb.setPixels(p);
assertTrue(p.iterateThumbnails().hasNext());
}
@Test(groups = { "broken", "ticket:346" })
public void testLinkingFillsContainer() throws Exception {
Project p = new Project();
Dataset d = new Dataset();
ProjectDatasetLink link = new ProjectDatasetLink();
link.link(p, d);
assertNotNull(link.parent());
assertNotNull(link.child());
assertTrue(link.parent().sizeOfDatasetLinks() == 1);
assertTrue(link.child().sizeOfProjectLinks() == 1);
}
@Test(groups = "jobs")
public void testUnidirectionalLinks() throws Exception {
ImportJob job = new ImportJob();
OriginalFile file = new OriginalFile();
job.linkOriginalFile(file);
assertTrue(job.sizeOfOriginalFileLinks() == 1);
job.unlinkOriginalFile(file);
assertTrue(job.sizeOfOriginalFileLinks() == 0);
JobOriginalFileLink link = new JobOriginalFileLink();
link.link(job, file);
job.addJobOriginalFileLink(link, true);
assertTrue(job.sizeOfOriginalFileLinks() == 1);
job.clearOriginalFileLinks();
assertTrue(job.sizeOfOriginalFileLinks() == 0);
}
@Test
public void testOrderedRelationshipsCanHaveUnloadedAdd() {
Pixels p = new Pixels();
Channel c = new Channel(1L, false);
p.addChannel(c);
PlaneInfo pi = new PlaneInfo(1L, false);
try {
p.addPlaneInfo(pi);
fail("This should not be accepted.");
} catch (IllegalStateException ise) {
// good.
}
}
// This is now allowed? (ticket:2067)
// Wed Aug 4 09:04:28 BST 2010 <callan@blackcat.ca>
@Test(groups={"broken"}, expectedExceptions = NullPointerException.class)
public void testNullArentAddableToOrderedCollections() {
Pixels p = new Pixels();
p.addChannel(null);
assertEquals(1, p.sizeOfChannels());
}
// ~ Private helpers
// ===========================================================================
private void testIsDefault(Experimenter user, ExperimenterGroup group) {
ExperimenterGroup t = user.getPrimaryGroupExperimenterMap().parent();
assertEquals(group, t);
}
}