diff --git a/.gitignore b/.gitignore index 0b5a49d..926b625 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .DS_Store target +.idea diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..30ee23d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,22 @@ +stages: + - build + - test + +build-package: + stage: build + tags: + - matlab-R2017b + script: + - mvn install + artifacts: + paths: + - target/*.zip + - target/*.tar.gz + +test-package: + stage: test + tags: + - matlab-R2017b + script: + - PATH=/usr/local/MATLAB/R2017b/bin:$PATH + - mvn -P test-matlab diff --git a/pom.xml b/pom.xml index 459915b..a9159be 100644 --- a/pom.xml +++ b/pom.xml @@ -7,11 +7,11 @@ ome bio-formats-matlab - 5.8.1-SNAPSHOT + 5.8.2 pom - Bio-Formats bundle collection - Create matlab of Bio-Formats jars and tools for distribution. + Bio-Formats matlab package + Create matlab package of Bio-Formats jars and tools for distribution. https://www.openmicroscopy.org/bio-formats 2005 @@ -23,10 +23,13 @@ When possible, we advise using the relevant groupId and version properties for your dependencies rather than hardcoding them. --> + ${basedir}/target/matlab-test-results + ${test.output.dir}/report.xml + ${maven.build.timestamp} 2018 ${basedir} - 5.8.1-SNAPSHOT + 5.8.2 ${bioformats.version} 1.48s 1.2.17 @@ -51,7 +54,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.0.0-M1 + 3.0.0-M2 enforce-maven @@ -70,12 +73,7 @@ maven-clean-plugin - 3.0.0 - - - - maven-dependency-plugin - 3.0.2 + 3.1.0 @@ -90,7 +88,7 @@ maven-plugin-plugin - 3.5.1 + 3.5.2 @@ -107,7 +105,12 @@ maven-resources-plugin - 3.0.2 + 3.1.0 + + + + maven-site-plugin + 3.7.1 @@ -136,6 +139,7 @@ org.apache.maven.plugins maven-dependency-plugin + 3.1.1 unpack-ome-xml @@ -289,7 +293,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.0.2 + 3.1.1 unpack @@ -312,6 +316,26 @@ + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + create-test-output-dir + test + + + + + + + + run + + + + org.codehaus.mojo exec-maven-plugin @@ -329,13 +353,13 @@ matlab ${java.io.tmpdir} - ${project.build.directory}/test-matlab/bio-formats-matlab-${project.version} + ${project.build.directory}/test-matlab/bio-formats-matlab-${project.version}${path.separator}${basedir}/test -nodesktop -nosplash -r - runtests ${project.rootdir}/test + runbfxunit ${test.output} diff --git a/test/ReaderTest.m b/test/ReaderTest.m index a3fe440..2c42307 100644 --- a/test/ReaderTest.m +++ b/test/ReaderTest.m @@ -26,7 +26,7 @@ % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. classdef ReaderTest < TestBfMatlab - + properties reader sizeX @@ -35,14 +35,9 @@ sizeC sizeT end - - methods - function self = ReaderTest(name) - self = self@TestBfMatlab(name); - end - - function setUp(self) - setUp@TestBfMatlab(self) + + methods (TestMethodSetup) + function ReaderTestSetUp(self) javaaddpath(self.jarPath); self.reader = loci.formats.in.FakeReader(); self.sizeX = self.reader.DEFAULT_SIZE_X; @@ -53,13 +48,14 @@ function setUp(self) loci.common.DebugTools.setRootLevel('ERROR'); import ome.units.UNITS.*; end - - function tearDown(self) + end + + methods (TestMethodTeardown) + function ReaderTestTearDown(self) if ~isempty(self.reader), self.reader.close(); self.reader = []; end - tearDown@TestBfMatlab(self) end end end diff --git a/test/TestBfCheckJavaMemory.m b/test/TestBfCheckJavaMemory.m index a295b9e..5d416ab 100644 --- a/test/TestBfCheckJavaMemory.m +++ b/test/TestBfCheckJavaMemory.m @@ -26,48 +26,46 @@ % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. classdef TestBfCheckJavaMemory < TestBfMatlab - + properties minMemory warning_id = '' end - + methods - function self = TestBfCheckJavaMemory(name) - self = self@TestBfMatlab(name); - end - % Dimension size tests function runJavaMemoryCheck(self) lastwarn(''); bfCheckJavaMemory(self.minMemory) [last_warning_msg, last_warning_id] = lastwarn; - assertEqual(last_warning_id, self.warning_id); + self.assertEqual(last_warning_id, self.warning_id); lastwarn(''); end - + end + + methods (Test) function testZero(self) self.minMemory = 0; self.runJavaMemoryCheck() end - + function testMaxMemory(self) self.minMemory = self.getRuntime(); self.runJavaMemoryCheck() end - + function testLowMemory(self) self.minMemory = round(self.getRuntime() + 100); self.warning_id = 'BF:lowJavaMemory'; self.runJavaMemoryCheck() end end + methods(Static) - function memory = getRuntime() runtime = java.lang.Runtime.getRuntime(); memory = runtime.maxMemory() / (1024 * 1024); end end - + end diff --git a/test/TestBfCheckJavaPath.m b/test/TestBfCheckJavaPath.m index 16bbae2..bf3dec4 100644 --- a/test/TestBfCheckJavaPath.m +++ b/test/TestBfCheckJavaPath.m @@ -27,39 +27,37 @@ classdef TestBfCheckJavaPath < TestBfMatlab - + properties status version maxTime = .1 end - - methods - function self = TestBfCheckJavaPath(name) - self = self@TestBfMatlab(name); - end - + + methods (Test) function testDefault(self) + javaaddpath(self.jarPath); self.status = bfCheckJavaPath(); - assertTrue(self.status); + self.assertTrue(self.status); end - + function testAutoloadBioformats(self) + javaaddpath(self.jarPath); self.status = bfCheckJavaPath(true); - assertTrue(self.status); + self.assertTrue(self.status); end - + function testNoAutoloadBioformats(self) isStatic = ismember(self.jarPath,... javaclasspath('-static')); self.status = bfCheckJavaPath(false); if isStatic - assertTrue(self.status); + self.assertTrue(self.status); else - assertFalse(self.status); + self.assertFalse(self.status); end end - + function testPerformance(self) nCounts = 10; times = zeros(nCounts); @@ -68,27 +66,28 @@ function testPerformance(self) bfCheckJavaPath(); times(i) = toc; end - + % First call should be the longest as the Bio-Formats JAR file is % added to the javaclasspath - assertTrue(times(1) > times(2)); + self.assertTrue(times(1) > times(2)); % Second call should still be longer than all the following % ones. Profiling reveals some amount of time is spent while % computing javaclasspath.local_get_static_path - assertTrue(all(times(2) > times(3:end))); + self.assertTrue(all(times(2) > times(3:end))); % From the third call and onwards, javaclasspath and thus % bfCheckJavaPath should return fast - assertTrue(mean(times(3:end)) < self.maxTime); + self.assertTrue(mean(times(3:end)) < self.maxTime); end - + function testJavaMethod(self) + javaaddpath(self.jarPath); self.status = bfCheckJavaPath(true); version = char(loci.formats.FormatTools.VERSION); [self.status self.version]= bfCheckJavaPath(false); - assertEqual(self.version,version); + self.assertEqual(self.version,version); if (exist ('OCTAVE_VERSION', 'builtin')) version = char(java_get('loci.formats.FormatTools', 'VERSION')); - assertEqual( self.version, version); + self.assertEqual( self.version, version); end end end diff --git a/test/TestBfGetPlane.m b/test/TestBfGetPlane.m index adc7c40..671b876 100644 --- a/test/TestBfGetPlane.m +++ b/test/TestBfGetPlane.m @@ -26,7 +26,7 @@ % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. classdef TestBfGetPlane < ReaderTest - + properties iPlane = 1 x @@ -37,134 +37,134 @@ sgn fp end - - methods - function self = TestBfGetPlane(name) - self = self@ReaderTest(name); - end - - function setUp(self) - setUp@ReaderTest(self) + + methods (TestMethodSetup) + function GetPlaneSetUp(self) self.reader.setId('test.fake'); self.x = 1; self.y = 1; self.width = self.sizeX; self.height = self.sizeY; end - + end + + methods + %% Tile input tests + function checkInvalidTileInput(self, varargin) + f = @() bfGetPlane(self.reader, 1, varargin{:}); + self.assertError(f,... + 'MATLAB:InputParser:ArgumentFailedValidation'); + end + + function checkInvalidInput(self) + f = @() bfGetPlane(self.reader, self.iPlane); + self.assertError(f,... + 'MATLAB:InputParser:ArgumentFailedValidation'); + end + + % Pixel type tests + function checkPixelsType(self, pixelsType) + self.reader.setId([pixelsType '-test&pixelType=' pixelsType '.fake']); + I = bfGetPlane(self.reader, self.iPlane); + if strcmp(pixelsType, 'float') + self.assertEqual(class(I), 'single'); + else + self.assertEqual(class(I), pixelsType); + end + end + end + + + methods (Test) % Input check tests function testNoInput(self) - assertExceptionThrown(@() bfGetPlane(), 'MATLAB:minrhs'); + self.assertError(@() bfGetPlane(), 'MATLAB:minrhs'); end - + function testReaderClass(self) - assertExceptionThrown(@() bfGetPlane([]),... + self.assertError(@() bfGetPlane([]),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - + function testInvalidReader(self) self.reader.close(); - assertExceptionThrown(@() bfGetPlane(self.reader),... + self.assertError(@() bfGetPlane(self.reader),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - + function testNoInputPlane(self) f = @() bfGetPlane(self.reader); - assertExceptionThrown(f, 'MATLAB:InputParser:notEnoughInputs'); - end - - function checkInvalidInput(self) - f = @() bfGetPlane(self.reader, self.iPlane); - assertExceptionThrown(f,... - 'MATLAB:InputParser:ArgumentFailedValidation'); + self.assertError(f, 'MATLAB:InputParser:notEnoughInputs'); end - + function testZeroPlane(self) - assertExceptionThrown(@() bfGetPlane(self.reader, 0),... + self.assertError(@() bfGetPlane(self.reader, 0),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - + function testOversizedPlaneIndex(self) nmax = self.reader.getImageCount(); - assertExceptionThrown(@() bfGetPlane(self.reader, nmax + 1),... + self.assertError(@() bfGetPlane(self.reader, nmax + 1),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - + function testPlaneIndexArray(self) - assertExceptionThrown(@() bfGetPlane(self.reader, [1 1]),... + self.assertError(@() bfGetPlane(self.reader, [1 1]),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - - %% Tile input tests - function checkInvalidTileInput(self, varargin) - f = @() bfGetPlane(self.reader, 1, varargin{:}); - assertExceptionThrown(f,... - 'MATLAB:InputParser:ArgumentFailedValidation'); - end - + function testZeroTileX(self) self.x = 0; self.checkInvalidTileInput(self.x) end - + function testOversizedTileX(self) self.x = self.sizeX + 1; self.checkInvalidTileInput(self.x); end - + function testZeroTileY(self) self.y = 0; self.checkInvalidTileInput(self.x, self.y); end - + function testOversizedTileY(self) self.y = self.sizeY + 1; self.checkInvalidTileInput(self.x, self.y); end - + function testZeroTileWidth(self) self.width = 0; self.checkInvalidTileInput(self.x, self.y, self.width); end - + function testOversizedTileWidth(self) self.width = self.sizeX + 1; self.checkInvalidTileInput(self.x, self.y, self.width); end - + function testOversizedTileWidth2(self) self.x = 2; self.width = self.sizeX; self.checkInvalidTileInput(self.x, self.y, self.width); end - + function testZeroTileHeight(self) self.height = 0; self.checkInvalidTileInput(self.x, self.y, self.width, self.height); end - + function testOversizedTileHeight(self) self.height = self.sizeY + 1; self.checkInvalidTileInput(self.x, self.y, self.width, self.height); end - + function testOversizedTileHeight2(self) self.y = 2; self.height = self.sizeY; self.checkInvalidTileInput(self.x, self.y, self.width, self.height); end - - % Pixel type tests - function checkPixelsType(self, pixelsType) - self.reader.setId([pixelsType '-test&pixelType=' pixelsType '.fake']); - I = bfGetPlane(self.reader, self.iPlane); - if strcmp(pixelsType, 'float') - assertEqual(class(I), 'single'); - else - assertEqual(class(I), pixelsType); - end - end - + function testINT8(self) self.checkPixelsType('int8'); end @@ -189,39 +189,39 @@ function testSINGLE(self) function testDOUBLE(self) self.checkPixelsType('double'); end - + % Dimension size tests function testSizeX(self) self.sizeX = 200; self.reader.setId(['sizeX-test&sizeX=' num2str(self.sizeX) '.fake']); I = bfGetPlane(self.reader, self.iPlane); - assertEqual(size(I, 2), self.sizeX); - assertEqual(size(I, 1), self.sizeY); + self.assertEqual(size(I, 2), self.sizeX); + self.assertEqual(size(I, 1), self.sizeY); end - + function testSizeY(self) self.sizeY = 200; self.reader.setId(['sizeY-test&sizeY=' num2str(self.sizeY) '.fake']); I = bfGetPlane(self.reader, self.iPlane); - assertEqual(size(I, 2), self.sizeX); - assertEqual(size(I, 1), self.sizeY); + self.assertEqual(size(I, 2), self.sizeX); + self.assertEqual(size(I, 1), self.sizeY); end - + % Tile tests function checkTile(self) % Retrieve full plane and tile I = bfGetPlane(self.reader, self.iPlane); I2 = bfGetPlane(self.reader, self.iPlane, self.x, self.y,... self.width, self.height); - - assertEqual(I2, I(self.y : self.y + self.height - 1,... + + self.assertEqual(I2, I(self.y : self.y + self.height - 1,... self.x : self.x + self.width - 1)); end - + function testFullTile(self) self.checkTile() end - + function testSquareTile(self) self.x = self.sizeX / 4; self.y = self.sizeY / 4; @@ -229,7 +229,7 @@ function testSquareTile(self) self.height = self.sizeY / 2; self.checkTile() end - + function testRectangularTile(self) self.x = 1; self.y = self.sizeY / 4; @@ -237,7 +237,7 @@ function testRectangularTile(self) self.height = self.sizeY / 2; self.checkTile() end - + function testSingleTile(self) self.x = self.sizeX / 2; self.y = self.sizeY / 4; @@ -245,7 +245,7 @@ function testSingleTile(self) self.height = 1; self.checkTile() end - + function testRectangularImageTile(self) self.sizeX = 100; self.reader.setId(['test&sizeX=' num2str(self.sizeX) '.fake']); @@ -254,7 +254,7 @@ function testRectangularImageTile(self) self.width = 100; self.checkTile() end - + function testRectangularImageTile2(self) self.sizeY = 100; self.reader.setId(['test&sizeY=' num2str(self.sizeY) '.fake']); @@ -263,24 +263,24 @@ function testRectangularImageTile2(self) self.height = 100; self.checkTile() end - + function testJavaMethod(self) pixelType = self.reader.getPixelType(); - + self.bpp = javaMethod('getBytesPerPixel', 'loci.formats.FormatTools', pixelType); self.fp = javaMethod('isFloatingPoint', 'loci.formats.FormatTools', pixelType); self.sgn = javaMethod('isSigned', 'loci.formats.FormatTools', pixelType); - + bpp = loci.formats.FormatTools.getBytesPerPixel(pixelType); fp = loci.formats.FormatTools.isFloatingPoint(pixelType); sgn = loci.formats.FormatTools.isSigned(pixelType); - - assertEqual(self.bpp, bpp); - assertEqual(self.fp,fp); - assertEqual(self.sgn,sgn); - + + self.assertEqual(self.bpp, bpp); + self.assertEqual(self.fp,fp); + self.assertEqual(self.sgn,sgn); + end - + end end diff --git a/test/TestBfGetReader.m b/test/TestBfGetReader.m index 916cce5..149b8c0 100644 --- a/test/TestBfGetReader.m +++ b/test/TestBfGetReader.m @@ -26,46 +26,52 @@ % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. classdef TestBfGetReader < ReaderTest - + methods - function self = TestBfGetReader(name) - self = self@ReaderTest(name); + % Pixel type tests + function checkPixelsType(self, type) + self.reader = bfGetReader([type '-test&pixelType=' type '.fake']); + pixelType = self.reader.getPixelType(); + class = char(loci.formats.FormatTools.getPixelTypeString(pixelType)); + self.assertEqual(class, type); end - + end + + methods (Test) % Input check tests function testInputClass(self) - assertExceptionThrown(@() bfGetReader(0),... + self.assertError(@() bfGetReader(0),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - + function testNoInput(self) self.reader = bfGetReader(); - assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); - assertTrue(isempty(self.reader.getCurrentFile())); + self.assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); + self.assertTrue(isempty(self.reader.getCurrentFile())); end - + function testEmptyInput(self) self.reader = bfGetReader(''); - assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); - assertTrue(isempty(self.reader.getCurrentFile())); + self.assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); + self.assertTrue(isempty(self.reader.getCurrentFile())); end - + function testFakeInput(self) self.reader = bfGetReader('test.fake'); - assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); - assertEqual(char(self.reader.getCurrentFile()), 'test.fake'); + self.assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); + self.assertEqual(char(self.reader.getCurrentFile()), 'test.fake'); end - + function testNonExistingInput(self) - assertExceptionThrown(@() bfGetReader('nonexistingfile'),... + self.assertError(@() bfGetReader('nonexistingfile'),... 'bfGetReader:FileNotFound'); end - + function testFormatTypeInput(self) self.reader = bfGetReader('test.fake'); - assertEqual(char(self.reader.getFormat),'Simulated data'); + self.assertEqual(char(self.reader.getFormat),'Simulated data'); end - + function testFileInput(self) % Create fake file mkdir(self.tmpdir); @@ -74,18 +80,10 @@ function testFileInput(self) fclose(fid); self.reader = bfGetReader(filepath); rmdir(self.tmpdir, 's'); - assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); - assertEqual(char(self.reader.getCurrentFile()), filepath); - end - - % Pixel type tests - function checkPixelsType(self, type) - self.reader = bfGetReader([type '-test&pixelType=' type '.fake']); - pixelType = self.reader.getPixelType(); - class = char(loci.formats.FormatTools.getPixelTypeString(pixelType)); - assertEqual(class, type); + self.assertTrue(isa(self.reader, 'loci.formats.ReaderWrapper')); + self.assertEqual(char(self.reader.getCurrentFile()), filepath); end - + function testINT8(self) self.checkPixelsType('int8'); end @@ -110,127 +108,127 @@ function testSINGLE(self) function testDOUBLE(self) self.checkPixelsType('double'); end - + % Dimension size tests function testSizeX(self) sizeX = 200; self.reader = bfGetReader(['sizeX-test&sizeX=' num2str(sizeX) '.fake']); - assertEqual(self.reader.getSizeX(), sizeX); + self.assertEqual(self.reader.getSizeX(), sizeX); end - + function testSizeY(self) sizeY = 200; self.reader = bfGetReader(['sizeY-test&sizeY=' num2str(sizeY) '.fake']); - assertEqual(self.reader.getSizeY(), sizeY); + self.assertEqual(self.reader.getSizeY(), sizeY); end - + function testSizeZ(self) sizeZ = 200; self.reader = bfGetReader(['sizeZ-test&sizeZ=' num2str(sizeZ) '.fake']); - assertEqual(self.reader.getSizeZ(), sizeZ); + self.assertEqual(self.reader.getSizeZ(), sizeZ); end - + function testSizeC(self) sizeC = 200; self.reader = bfGetReader(['sizeC-test&sizeC=' num2str(sizeC) '.fake']); - assertEqual(self.reader.getSizeC(), sizeC); + self.assertEqual(self.reader.getSizeC(), sizeC); end - + function testSizeT(self) sizeT = 200; self.reader = bfGetReader(['sizeT-test&sizeT=' num2str(sizeT) '.fake']); - assertEqual(self.reader.getSizeT(), sizeT); + self.assertEqual(self.reader.getSizeT(), sizeT); end - + % Endianness tests function testLittleEndian(self) self.reader = bfGetReader('little-test&little=true.fake'); - assertTrue(self.reader.isLittleEndian()); + self.assertTrue(self.reader.isLittleEndian()); end - + function testBigEndian(self) self.reader = bfGetReader('bigendian-test&little=false.fake'); - assertFalse(self.reader.isLittleEndian()); + self.assertFalse(self.reader.isLittleEndian()); end - + % Series tests function testMonoSeries(self) nSeries = 1; self.reader = bfGetReader(['series-test&series=' num2str(nSeries) '.fake']); - assertEqual(self.reader.getSeriesCount(), nSeries); + self.assertEqual(self.reader.getSeriesCount(), nSeries); end - + function testMultiSeries(self) nSeries = 10; self.reader = bfGetReader(['series-test&series=' num2str(nSeries) '.fake']); - assertEqual(self.reader.getSeriesCount(), nSeries); + self.assertEqual(self.reader.getSeriesCount(), nSeries); end - + function testInterleaved(self) self.reader = bfGetReader('interleaved-test&interleaved=true.fake'); - assertTrue(self.reader.isInterleaved()); + self.assertTrue(self.reader.isInterleaved()); end - + function testNoInterleaved(self) self.reader = bfGetReader('interleaved-test&interleaved=false.fake'); - assertFalse(self.reader.isInterleaved()); + self.assertFalse(self.reader.isInterleaved()); end - + function testGetPixelsPhysicalSizeX(self) self.reader = bfGetReader('pixelSize-test&physicalSizeX=.3.fake'); metadata = self.reader.getMetadataStore(); physicalSizeX = metadata.getPixelsPhysicalSizeX(0); - assertFalse(isempty(physicalSizeX)); - assertEqual(physicalSizeX.value().doubleValue(), .3); - assertEqual(char(physicalSizeX.unit().getSymbol()), 'µm'); - assertElementsAlmostEqual(physicalSizeX.value(ome.units.UNITS.NANOMETER).doubleValue(), 300.0); + self.assertFalse(isempty(physicalSizeX)); + self.assertEqual(physicalSizeX.value().doubleValue(), .3); + self.assertEqual(char(physicalSizeX.unit().getSymbol()), 'µm'); + self.assertEqual(physicalSizeX.value(ome.units.UNITS.NANOMETER).doubleValue(), 300.0, 'absTol', 1e-4); end - + function testGetPixelsPhysicalSizeY(self) self.reader = bfGetReader('pixelSize-test&physicalSizeY=.3.fake'); metadata = self.reader.getMetadataStore(); physicalSizeY = metadata.getPixelsPhysicalSizeY(0); - assertFalse(isempty(physicalSizeY)); - assertEqual(physicalSizeY.value().doubleValue(), .3); - assertEqual(char(physicalSizeY.unit().getSymbol()), 'µm'); - assertElementsAlmostEqual(physicalSizeY.value(ome.units.UNITS.NANOMETER).doubleValue(), 300.0); + self.assertFalse(isempty(physicalSizeY)); + self.assertEqual(physicalSizeY.value().doubleValue(), .3); + self.assertEqual(char(physicalSizeY.unit().getSymbol()), 'µm'); + self.assertEqual(physicalSizeY.value(ome.units.UNITS.NANOMETER).doubleValue(), 300.0, 'absTol', 1e-4); end - + function testGetPixelsPhysicalSizeZ(self) self.reader = bfGetReader('pixelSize-test&physicalSizeZ=.3.fake'); metadata = self.reader.getMetadataStore(); physicalSizeZ = metadata.getPixelsPhysicalSizeZ(0); - assertFalse(isempty(physicalSizeZ)); - assertEqual(physicalSizeZ.value().doubleValue(), .3); - assertEqual(char(physicalSizeZ.unit().getSymbol()), 'µm'); - assertElementsAlmostEqual(physicalSizeZ.value(ome.units.UNITS.NANOMETER).doubleValue(), 300.0); + self.assertFalse(isempty(physicalSizeZ)); + self.assertEqual(physicalSizeZ.value().doubleValue(), .3); + self.assertEqual(char(physicalSizeZ.unit().getSymbol()), 'µm'); + self.assertEqual(physicalSizeZ.value(ome.units.UNITS.NANOMETER).doubleValue(), 300.0, 'absTol', 1e-4); end - + function testJavaMethod(self) self.reader = loci.formats.ChannelFiller(); self.reader = loci.formats.ChannelSeparator(self.reader); - + reader = javaObject('loci.formats.ChannelSeparator', ... javaObject('loci.formats.ChannelFiller')); - assertEqual(self.reader.getClass(),reader.getClass()); - + self.assertEqual(self.reader.getClass(),reader.getClass()); + OMEXMLService = loci.formats.services.OMEXMLServiceImpl(); OMEXMLService1 = javaObject('loci.formats.services.OMEXMLServiceImpl'); - assertEqual(OMEXMLService.getClass(),OMEXMLService1.getClass()); - + self.assertEqual(OMEXMLService.getClass(),OMEXMLService1.getClass()); + self.reader.setMetadataStore(OMEXMLService1.createOMEXMLMetadata()); end - + %Test Default Thumb Size function testThumbSizeX(self) self.reader = bfGetReader('test.fake'); - assertEqual(self.reader.getThumbSizeX(),128); + self.assertEqual(self.reader.getThumbSizeX(),128); end - + function testThumbSizeY(self) self.reader = bfGetReader('test.fake'); - assertEqual(self.reader.getThumbSizeY(),128); + self.assertEqual(self.reader.getThumbSizeY(),128); end - + end end diff --git a/test/TestBfInitLogging.m b/test/TestBfInitLogging.m index 144591d..c0d6ad7 100644 --- a/test/TestBfInitLogging.m +++ b/test/TestBfInitLogging.m @@ -27,98 +27,101 @@ classdef TestBfInitLogging < TestBfMatlab - + properties root end - - methods - function self = TestBfInitLogging(name) - self = self@TestBfMatlab(name); + + methods (TestMethodSetup) + function InitLogging(self) + % WIP: Is this strictly necessary? + javaaddpath(self.jarPath); import org.apache.log4j.Logger; self.root = Logger.getRootLogger(); end - + end + + methods (Test) function disableLogging(self) self.root.removeAllAppenders(); bfCheckJavaPath(); - assertFalse(loci.common.DebugTools.isEnabled()); + self.assertFalse(loci.common.DebugTools.isEnabled()); end - + function testDefault(self) self.disableLogging(); bfInitLogging(); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'WARN'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'WARN'); bfInitLogging('INFO'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'WARN'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'WARN'); end - + function testALL(self) self.disableLogging(); bfInitLogging('ALL'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'ALL'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'ALL'); end - + function testERROR(self) self.disableLogging(); bfInitLogging('ERROR'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'ERROR'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'ERROR'); end - + function testDEBUG(self) self.disableLogging(); bfInitLogging('DEBUG'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'DEBUG'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'DEBUG'); end - + function testINFO(self) self.disableLogging(); bfInitLogging('INFO'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'INFO'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'INFO'); end - + function testFATAL(self) self.disableLogging(); bfInitLogging('FATAL'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'FATAL'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'FATAL'); end - + function testOFF(self) self.disableLogging(); bfInitLogging('OFF'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'OFF'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'OFF'); end - + function testTRACE(self) self.disableLogging(); bfInitLogging('TRACE'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'TRACE'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'TRACE'); end - + function testWARN(self) self.disableLogging(); bfInitLogging('WARN'); - assertTrue(loci.common.DebugTools.isEnabled()); - assertEqual(char(self.root.getLevel.toString()), 'WARN'); + self.assertTrue(loci.common.DebugTools.isEnabled()); + self.assertEqual(char(self.root.getLevel.toString()), 'WARN'); end function testSetRootLevel(self) self.disableLogging(); loci.common.DebugTools.enableLogging(); - assertTrue(loci.common.DebugTools.isEnabled()); + self.assertTrue(loci.common.DebugTools.isEnabled()); loci.common.DebugTools.setRootLevel('INFO'); - assertEqual(char(self.root.getLevel.toString()), 'INFO'); + self.assertEqual(char(self.root.getLevel.toString()), 'INFO'); loci.common.DebugTools.setRootLevel('DEBUG'); - assertEqual(char(self.root.getLevel.toString()), 'DEBUG'); + self.assertEqual(char(self.root.getLevel.toString()), 'DEBUG'); end end end diff --git a/test/TestBfMatlab.m b/test/TestBfMatlab.m index 259866d..f9d2c38 100644 --- a/test/TestBfMatlab.m +++ b/test/TestBfMatlab.m @@ -25,34 +25,36 @@ % with this program; if not, write to the Free Software Foundation, Inc., % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -classdef TestBfMatlab < TestCase - +classdef TestBfMatlab < matlab.unittest.TestCase + properties jarPath tmpdir end - - methods - function self = TestBfMatlab(name) - self = self@TestCase(name); - end - - function setUp(self) + + methods (TestMethodSetup) + function BFTestSetUp(self) + % Disable upgrade check + javaMethod('setProperty', 'java.lang.System', ... + 'bioformats_can_do_upgrade_check', 'false'); + % Get path to Bio-Formats JAR file (assuming it is in Matlab path) self.jarPath = which('bioformats_package.jar'); assert(~isempty(self.jarPath)); - + % Remove Bio-Formats JAR file from dynamic class path if ismember(self.jarPath,javaclasspath('-dynamic')) javarmpath(self.jarPath); end - + java_tmpdir = char(java.lang.System.getProperty('java.io.tmpdir')); uuid = char(java.util.UUID.randomUUID().toString()); self.tmpdir = fullfile(java_tmpdir, uuid); end - - function tearDown(self) + end + + methods (TestMethodTeardown) + function BFTestTearDown(self) % Remove Bio-Formats JAR file from dynamic class path if ismember(self.jarPath,javaclasspath('-dynamic')) javarmpath(self.jarPath); diff --git a/test/TestBfUpgradeCheck.m b/test/TestBfUpgradeCheck.m index 6d6ca76..3cf56d7 100644 --- a/test/TestBfUpgradeCheck.m +++ b/test/TestBfUpgradeCheck.m @@ -26,29 +26,26 @@ % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. classdef TestBfUpgradeCheck < ReaderTest - + properties upgrader end - - methods - - function self = TestBfUpgradeCheck(name) - self = self@ReaderTest(name); - end - - function tearDown(self) + + + methods (TestMethodTeardown) + function UpgradeTearDown(self) self.upgrader = []; upgrader = []; - tearDown@ReaderTest(self); end - + end + + methods (Test) function testJavaMethod(self) self.upgrader = javaObject('loci.formats.UpgradeChecker'); upgrader = loci.formats.UpgradeChecker(); - assertEqual( self.upgrader.getClass, upgrader.getClass); + self.assertEqual( self.upgrader.getClass, upgrader.getClass); end - + end - -end \ No newline at end of file + +end diff --git a/test/TestBfopen.m b/test/TestBfopen.m index 5f9ab89..7c07e7c 100644 --- a/test/TestBfopen.m +++ b/test/TestBfopen.m @@ -26,7 +26,7 @@ % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. classdef TestBfopen < ReaderTest - + properties filepath data @@ -38,25 +38,22 @@ y = 10; bpp end - - methods - function self = TestBfopen(name) - self = self@ReaderTest(name); - end - - function tearDown(self) + + methods (TestMethodTeardown) + function BfopenTearDown(self) if exist(self.tmpdir, 'dir') == 7, rmdir(self.tmpdir, 's'); end self.data = []; - tearDown@ReaderTest(self); end - + end + + methods function checkFake(self, fakefilename) % Create fake file mkdir(self.tmpdir); self.filepath = fullfile(self.tmpdir, fakefilename); fid = fopen(self.filepath, 'w+'); fclose(fid); - + for flag = 1:2 self.flag = flag; % Read fake file using bfopen @@ -67,88 +64,90 @@ function checkFake(self, fakefilename) elseif (self.flag == 2) self.data = bfopen(self.filepath,self.x,self.y,self.width,self.height); end - + % Test dimensions of bfopen output and core metadata nPlanes = self.sizeZ * self.sizeC * self.sizeT; - assertEqual(size(self.data), [self.nSeries 4]); + self.assertEqual(size(self.data), [self.nSeries 4]); for i = 1 : self.nSeries - assertEqual(size(self.data{i, 1}), [nPlanes 2]); + self.assertEqual(size(self.data{i, 1}), [nPlanes 2]); m = self.data{i,4}; TileSize = size(self.data{1,1}{1,1}); - assertEqual(m.getImageCount(), self.nSeries); - assertEqual(m.getPixelsSizeZ(i-1).getValue(), self.sizeZ); - assertEqual(m.getPixelsSizeC(i-1).getValue(), self.sizeC); - assertEqual(m.getPixelsSizeT(i-1).getValue(), self.sizeT); - assertEqual(m.getPixelsSizeX(i-1).getValue(), self.sizeX); - assertEqual(m.getPixelsSizeY(i-1).getValue(), self.sizeY); - assertEqual(TileSize(1), self.x); - assertEqual(TileSize(2), self.y); - + self.assertEqual(m.getImageCount(), self.nSeries); + self.assertEqual(m.getPixelsSizeZ(i-1).getValue(), self.sizeZ); + self.assertEqual(m.getPixelsSizeC(i-1).getValue(), self.sizeC); + self.assertEqual(m.getPixelsSizeT(i-1).getValue(), self.sizeT); + self.assertEqual(m.getPixelsSizeX(i-1).getValue(), self.sizeX); + self.assertEqual(m.getPixelsSizeY(i-1).getValue(), self.sizeY); + self.assertEqual(TileSize(1), self.x); + self.assertEqual(TileSize(2), self.y); + end - + self.x = 10; self.y = 10; end end - + end + + methods (Test) % Dimension tests function testDefault(self) self.checkFake('test.fake') end - + function testMultiSeries(self) self.nSeries = 3; self.checkFake(['test&series=' num2str(self.nSeries) '.fake']) end - + function testSizeZ(self) self.sizeZ = 3; self.checkFake(['test&sizeZ=' num2str(self.sizeZ) '.fake']) end - + function testSizeC(self) self.sizeC = 3; self.checkFake(['test&sizeC=' num2str(self.sizeC) '.fake']) end - + function testSizeT(self) self.sizeT = 3; self.checkFake(['test&sizeT=' num2str(self.sizeT) '.fake']) end - - + + function testJavaMethod(self) logLevel = loci.common.DebugTools.enableLogging('INFO'); logLevel1 = javaMethod('enableLogging', 'loci.common.DebugTools', 'INFO'); - - assertEqual(logLevel,logLevel1); - + + self.assertEqual(logLevel,logLevel1); + self.reader = bfGetReader('test.fake', 0); pixelType = self.reader.getPixelType(); self.bpp = loci.formats.FormatTools.getBytesPerPixel(pixelType); bpp = javaMethod('getBytesPerPixel', 'loci.formats.FormatTools', ... pixelType); - - assertEqual(self.bpp,bpp); - + + self.assertEqual(self.bpp,bpp); + end - + % Colormap tests function testNoColormap(self) self.sizeC = 3; self.checkFake('test&indexed=true&falseColor=false.fake'); - assertTrue(isempty(self.data{3}{1})); + self.assertTrue(isempty(self.data{3}{1})); end - + function test8BitColormap(self) self.checkFake('test&indexed=true&falseColor=true&pixelType=uint8.fake'); - assertTrue(isa(self.data{3}{1}, 'single')); + self.assertTrue(isa(self.data{3}{1}, 'single')); end - + function test16BitColormap(self) self.checkFake('test&indexed=true&falseColor=true&pixelType=uint16.fake'); - assertTrue(isa(self.data{3}{1}, 'single')); + self.assertTrue(isa(self.data{3}{1}, 'single')); end - + end end diff --git a/test/TestBfsave.m b/test/TestBfsave.m index 5849fb6..6a8accc 100644 --- a/test/TestBfsave.m +++ b/test/TestBfsave.m @@ -26,73 +26,90 @@ % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. classdef TestBfsave < ReaderTest - + properties path I dimensionOrder = 'XYZCT' end - - methods - function self = TestBfsave(name) - self = self@ReaderTest(name); - end - - function setUp(self) - setUp@ReaderTest(self); + + methods (TestMethodSetup) + function BfsaveSetUp(self) mkdir(self.tmpdir); self.path = fullfile(self.tmpdir, 'test.ome.tif'); end - - function tearDown(self) + end + + methods (TestMethodTeardown) + function BfsaveTearDown(self) if exist(self.tmpdir, 'dir') == 7, rmdir(self.tmpdir, 's'); end - tearDown@ReaderTest(self); end - + end + + methods + % Pixel type tests + function checkPixelType(self, type) + self.I = zeros(100, 100, type); + bfsave(self.I, self.path); + self.assertEqual(imread(self.path), self.I); + end + + % Compression type tests + function checkCompression(self, type, nonlossy) + self.reader = bfGetReader('plane.fake'); + self.I = bfGetPlane(self.reader, 1); + bfsave(self.I, self.path, 'Compression', type); + if nonlossy + self.assertEqual(imread(self.path), self.I); + end + end + function checkMinimalMetadata(self) % Check dimensions of saved ome-tiff self.reader = bfGetReader(self.path); d = size(self.I); - assertEqual(self.reader.getSizeX(), d(2)); - assertEqual(self.reader.getSizeY(), d(1)); - assertEqual(self.reader.getSizeZ(), d(self.dimensionOrder=='Z')); - assertEqual(self.reader.getSizeC(), d(self.dimensionOrder=='C')); - assertEqual(self.reader.getSizeT(), d(self.dimensionOrder=='T')); - assertEqual(char(self.reader.getDimensionOrder()), self.dimensionOrder); + self.assertEqual(self.reader.getSizeX(), d(2)); + self.assertEqual(self.reader.getSizeY(), d(1)); + self.assertEqual(self.reader.getSizeZ(), d(self.dimensionOrder=='Z')); + self.assertEqual(self.reader.getSizeC(), d(self.dimensionOrder=='C')); + self.assertEqual(self.reader.getSizeT(), d(self.dimensionOrder=='T')); + self.assertEqual(char(self.reader.getDimensionOrder()), self.dimensionOrder); metadataStore = self.reader.getMetadataStore(); - assertEqual(char(metadataStore.getImageID(0)), 'Image:0'); - assertEqual(char(metadataStore.getPixelsID(0)), 'Pixels:0'); + self.assertEqual(char(metadataStore.getImageID(0)), 'Image:0'); + self.assertEqual(char(metadataStore.getPixelsID(0)), 'Pixels:0'); for i = 1 : d(self.dimensionOrder=='C') - assertEqual(char(metadataStore.getChannelID(0, i - 1)),... + self.assertEqual(char(metadataStore.getChannelID(0, i - 1)),... sprintf('Channel:0:%g', i - 1)); end end - + end + + methods (Test) % Input check tests function testNoInput(self) - assertExceptionThrown(@() bfsave(),... + self.assertError(@() bfsave(),... 'MATLAB:InputParser:notEnoughInputs'); end - + function testNoOutputPath(self) self.I = 1; - assertExceptionThrown(@() bfsave(self.I),... + self.assertError(@() bfsave(self.I),... 'MATLAB:InputParser:notEnoughInputs'); end - + function testInvalidI(self) self.I = 'a'; - assertExceptionThrown(@() bfsave(self.I, self.path),... + self.assertError(@() bfsave(self.I, self.path),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - + function testInvalidDimensionOrder(self) self.I = 1; - assertExceptionThrown(@() bfsave(self.I, self.path, 'XY'),... + self.assertError(@() bfsave(self.I, self.path, 'XY'),... 'MATLAB:InputParser:ArgumentFailedValidation'); end - + % Dimension order tests function testDimensionOrderXYZCT(self) self.dimensionOrder = 'XYZCT'; @@ -100,132 +117,115 @@ function testDimensionOrderXYZCT(self) bfsave(self.I, self.path, self.dimensionOrder); self.checkMinimalMetadata(); end - + function testDimensionOrderXYZTC(self) self.dimensionOrder = 'XYZTC'; self.I = zeros(2, 3, 4, 5, 6); bfsave(self.I, self.path, self.dimensionOrder); self.checkMinimalMetadata(); end - + function testDimensionOrderXYCZT(self) self.dimensionOrder = 'XYCZT'; self.I = zeros(2, 3, 4, 5, 6); bfsave(self.I, self.path, self.dimensionOrder); self.checkMinimalMetadata(); end - + function testDimensionOrderXYCTZ(self) self.dimensionOrder = 'XYCTZ'; self.I = zeros(2, 3, 4, 5, 6); bfsave(self.I, self.path, self.dimensionOrder); self.checkMinimalMetadata(); end - + function testDimensionOrderXYTCZ(self) self.dimensionOrder = 'XYTCZ'; self.I = zeros(2, 3, 4, 5, 6); bfsave(self.I, self.path, self.dimensionOrder); self.checkMinimalMetadata(); end - + function testDimensionOrderXYTZC(self) self.dimensionOrder = 'XYTZC'; self.I = zeros(2, 3, 4, 5, 6); bfsave(self.I, self.path, self.dimensionOrder); self.checkMinimalMetadata(); end - - % Pixel type tests - function checkPixelType(self, type) - self.I = zeros(100, 100, type); - bfsave(self.I, self.path); - assertEqual(imread(self.path), self.I); - end - + function testPixelsTypeUINT8(self) self.checkPixelType('uint8'); end - + function testPixelsTypeINT8(self) self.checkPixelType('int8'); end - + function testPixelsTypeUINT16(self) self.checkPixelType('uint16'); end - + function testPixelsTypeINT16(self) self.checkPixelType('int16'); end - + function testPixelsTypeUINT32(self) self.checkPixelType('uint32'); end - + function testPixelsTypeINT32(self) self.checkPixelType('int32'); end - + function testPixelsTypeFLOAT(self) self.checkPixelType('single'); end - + function testPixelsTypeDOUBLE(self) self.checkPixelType('double'); end - + % Bytes reading tests function testSinglePoint(self) self.I = 1; bfsave(self.I, self.path); - assertEqual(imread(self.path), self.I); + self.assertEqual(imread(self.path), self.I); end - + function testSinglePlane(self) self.reader = bfGetReader('plane.fake'); self.I = bfGetPlane(self.reader, 1); bfsave(self.I, self.path); - assertEqual(imread(self.path), self.I); + self.assertEqual(imread(self.path), self.I); end - - % Compression type tests - function checkCompression(self, type, nonlossy) - self.reader = bfGetReader('plane.fake'); - self.I = bfGetPlane(self.reader, 1); - bfsave(self.I, self.path, 'Compression', type); - if nonlossy - assertEqual(imread(self.path), self.I); - end - end - + function testJPEG(self) self.checkCompression('JPEG', false); end - + function testJPEG2000(self) self.checkCompression('JPEG-2000', false); end - + function testJPEG2000Lossy(self) self.checkCompression('JPEG-2000 Lossy', false); end - + function testUncompressed(self) self.checkCompression('Uncompressed', true); end - + function testLZW(self) self.checkCompression('LZW', true); end - + % Big-tiff test function testBigTiff(self) self.I = zeros(100, 100); bfsave(self.I, self.path, 'BigTiff', true); - assertEqual(imread(self.path), self.I); + self.assertEqual(imread(self.path), self.I); end - + % Metadata test function testCreateMinimalOMEXMLMetadata(self) self.I = zeros(2, 3, 4, 5, 6); @@ -233,7 +233,7 @@ function testCreateMinimalOMEXMLMetadata(self) bfsave(self.I, self.path, 'metadata', metadata); self.checkMinimalMetadata(); end - + function testAdditionalOMEXMLMetadata(self) self.I = zeros(2, 3, 4, 5, 6); metadata = createMinimalOMEXMLMetadata(self.I); @@ -241,7 +241,7 @@ function testAdditionalOMEXMLMetadata(self) bfsave(self.I, self.path, 'metadata', metadata); self.checkMinimalMetadata(); d = self.reader.getMetadataStore().getImageDescription(0); - assertEqual(char(d), 'description'); + self.assertEqual(char(d), 'description'); end end end diff --git a/test/TestMemoizer.m b/test/TestMemoizer.m index 0b0fc39..965847e 100644 --- a/test/TestMemoizer.m +++ b/test/TestMemoizer.m @@ -31,25 +31,23 @@ filepath end - methods - function self = TestMemoizer(name) - self = self@ReaderTest(name); - end - - function setUp(self) - setUp@ReaderTest(self); - + methods (TestMethodSetup) + function MemoizerSetUp(self) % Create fake file for testing mkdir(self.tmpdir); self.filepath = fullfile(self.tmpdir, 'test.fake'); fid = fopen(self.filepath, 'w+'); fclose(fid); end - function tearDown(self) + end + + methods (TestMethodTeardown) + function MemoizerTearDown(self) if exist(self.tmpdir, 'dir') == 7, rmdir(self.tmpdir, 's'); end - tearDown@ReaderTest(self); end + end + methods (Test) function testMinimumElapsed(self) % Create memoizer reader with large minimum initialization % time @@ -57,8 +55,8 @@ function testMinimumElapsed(self) self.reader.setId(self.filepath); % Check reader is not saved to memo file - assertFalse(self.reader.isLoadedFromMemo()); - assertFalse(self.reader.isSavedToMemo()); + self.assertFalse(self.reader.isLoadedFromMemo()); + self.assertFalse(self.reader.isSavedToMemo()); self.reader.close(); end @@ -69,8 +67,8 @@ function testInPlaceCaching(self) self.reader.setId(self.filepath); % Check reader has been saved to memo file - assertFalse(self.reader.isLoadedFromMemo()); - assertTrue(self.reader.isSavedToMemo()); + self.assertFalse(self.reader.isLoadedFromMemo()); + self.assertTrue(self.reader.isSavedToMemo()); self.reader.close(); end @@ -84,8 +82,8 @@ function testReinitialization(self) self.reader.setId(self.filepath); % Check reader has been loaded from memo file - assertTrue(self.reader.isLoadedFromMemo()); - assertFalse(self.reader.isSavedToMemo()); + self.assertTrue(self.reader.isLoadedFromMemo()); + self.assertFalse(self.reader.isSavedToMemo()); end function testNewReader(self) @@ -96,8 +94,8 @@ function testNewReader(self) % Construct new memoizer reader2 = loci.formats.Memoizer(bfGetReader(), 0); reader2.setId(self.filepath); - assertTrue(reader2.isLoadedFromMemo()); - assertFalse(reader2.isSavedToMemo()); + self.assertTrue(reader2.isLoadedFromMemo()); + self.assertFalse(reader2.isSavedToMemo()); reader2.close(); self.reader.close() clear reader2 @@ -112,8 +110,8 @@ function testMultiThreaded(self) for i = 1 : 4 r = loci.formats.Memoizer(bfGetReader(), 0); r.setId(localpath); - assertTrue(r.isLoadedFromMemo()); - assertFalse(r.isSavedToMemo()); + self.assertTrue(r.isLoadedFromMemo()); + self.assertFalse(r.isSavedToMemo()); r.close(); end end diff --git a/test/runbfxunit.m b/test/runbfxunit.m new file mode 100644 index 0000000..702c077 --- /dev/null +++ b/test/runbfxunit.m @@ -0,0 +1,39 @@ +function []=runbfxunit(xmlfile) +% OME Bio-Formats package for reading and converting biological file formats. +% +% Copyright (C) 2017 Open Microscopy Environment: +% - Board of Regents of the University of Wisconsin-Madison +% - Glencoe Software, Inc. +% - University of Dundee +% +% 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. + + import matlab.unittest.TestRunner + import matlab.unittest.TestSuite + import matlab.unittest.plugins.XMLPlugin + + dir = fileparts(mfilename('fullpath')); + + suite = TestSuite.fromFolder(dir) + runner = TestRunner.withNoPlugins; + + p = XMLPlugin.producingJUnitFormat(xmlfile); + + runner.addPlugin(p) + results = runner.run(suite); + table(results) + + exit(0) +end