/* * Copyright (C) 2013 Glencoe Software, Inc. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package ome.formats.importer; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.io.File; import loci.formats.ChannelSeparator; import loci.formats.FormatTools; import loci.formats.Memoizer; import loci.formats.MinMaxCalculator; import loci.formats.meta.DummyMetadata; import loci.formats.ome.OMEXMLMetadataImpl; import org.apache.commons.io.FileUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import omero.util.TempFileManager; /** */ public class OMEROWrapperTest { class Bad { class Store extends DummyMetadata { public Store(boolean ThisCantBeDeserialized) { /* * no action */ } } } File fake; File png; OMEROWrapper wrapper; ImportConfig config; @BeforeMethod public void createPNG() throws Exception { fake = TempFileManager.create_path("omerowrappertest.", ".fake"); png = TempFileManager.create_path("omerowrappertest.", ".png"); FileUtils.touch(fake); FormatTools.convert(fake.getAbsolutePath(), png.getAbsolutePath()); } @AfterMethod public void deleteFiles() throws Exception { Memoizer m = new Memoizer(); FileUtils.deleteQuietly(fake); FileUtils.deleteQuietly(png); FileUtils.deleteQuietly(m.getMemoFile(png.toString())); FileUtils.deleteQuietly(m.getMemoFile(fake.toString())); m.close(); } @BeforeMethod public void setUp() { config = new ImportConfig(); wrapper = new OMEROWrapper(config); } @AfterMethod public void tearDown() throws Exception { wrapper.close(); } @Test public void testFake() throws Exception { wrapper.setId(fake.getAbsolutePath()); wrapper.close(); } @Test public void testPNG() throws Exception { wrapper.setId(png.getAbsolutePath()); wrapper.close(); } @Test public void testReuse() throws Exception { wrapper.setId(fake.getAbsolutePath()); wrapper.close(); // wrapper.setMetadataStore(null); // wrapper.setMinMaxStore(null); wrapper.setId(png.getAbsolutePath()); } @Test public void testMatchedWrappers() throws Exception { Memoizer m = new Memoizer(new ChannelSeparator()); try { m.setId(png.getAbsolutePath()); m.close(); assertTrue(m.isSavedToMemo()); m = new Memoizer(new ChannelSeparator()); m.setId(png.getAbsolutePath()); assertTrue(m.isLoadedFromMemo()); } finally { m.close(); } } @Test public void testMismatchedWrappers() throws Exception { for (int i = 0; i < 100; i++) { Memoizer m = new Memoizer(0L /* min elapsed */); try { m.setId(fake.getAbsolutePath()); m.close(); assertTrue(m.isSavedToMemo()); m = new Memoizer(new MinMaxCalculator(), 0L /* min elapsed */); m.setId(fake.getAbsolutePath()); assertFalse(m.isLoadedFromMemo()); } finally { m.close(); } } } @Test public void testOMEXMLMetadataStore() throws Exception { wrapper.setMetadataStore(new OMEXMLMetadataImpl()); wrapper.setId(png.getAbsolutePath()); assertFalse(((Memoizer)wrapper.getReader()).isLoadedFromMemo()); assertTrue(((Memoizer)wrapper.getReader()).isSavedToMemo()); wrapper.setId(png.getAbsolutePath()); assertTrue(((Memoizer)wrapper.getReader()).isLoadedFromMemo()); assertTrue(((Memoizer)wrapper.getReader()).isSavedToMemo()); assertEquals(OMEXMLMetadataImpl.class, wrapper.getMetadataStore().getClass()); } @Test public void testUnserializable() throws Exception { wrapper.setMetadataStore(new Bad().new Store(false)); wrapper.setId(png.getAbsolutePath()); wrapper.close(); wrapper.setId(png.getAbsolutePath()); } }