/* * Geotoolkit.org - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2015, Geomatys * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. */ package org.geotoolkit.image.io.plugin.yaml; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.geotoolkit.coverage.Category; import org.geotoolkit.coverage.GridSampleDimension; import org.geotoolkit.coverage.SampleDimensionUtils; import org.geotoolkit.image.io.plugin.yaml.internal.YamlBuilder; import org.geotoolkit.image.io.plugin.yaml.internal.YamlCategory; import org.geotoolkit.image.io.plugin.yaml.internal.YamlImageInfo; import org.geotoolkit.image.io.plugin.yaml.internal.YamlReaderBuilder; import org.geotoolkit.image.io.plugin.yaml.internal.YamlSampleCategory; import org.geotoolkit.image.io.plugin.yaml.internal.YamlSampleDimension; import org.geotoolkit.image.io.plugin.yaml.internal.YamlWriterBuilder; import org.junit.Assert; import org.junit.Test; import org.opengis.coverage.SampleDimension; /** * Test reading / writing yaml image informations. * * @author Remi Marechal (Geomatys). * @since 4.0 * @see YamlFiles * @see YamlBuilder * @see YamlCategory * @see YamlImageInfo * @see YamlReaderBuilder * @see YamlWriterBuilder * @see YamlSampleCategory * @see YamlSampleDimension */ public class YamlUtilsTest extends org.geotoolkit.test.TestBase { /** * Simply yaml binding of only one {@link SampleDimension}. * * @throws IOException if problem during yaml file writing. */ @Test public void oneSampleDimensionTest() throws IOException { final String dumpResult = "version: '1.0'\n" + "sampleDimension:\n" + "- description: band_0\n" + " categories:\n" + " - name: No data\n" + " value: 0.0\n" + " - name: data\n" + " minSampleValue: 1.0\n" + " isMinInclusive: true\n" + " maxSampleValue: 255.0\n" + " isMaxInclusive: true\n" + " scale: 1.0\n" + " offset: 0.0\n"; final File fil = File.createTempFile("yamlTest", "txt"); Category[] catsb0 = new Category[2]; final Category noDataCatb0 = SampleDimensionUtils.buildSingleNoDataCategory(Double.class, 0); final Category dataCatb0 = SampleDimensionUtils.buildCategory("data", Double.class, null, 1, true, 255, true, 1, 0); catsb0[0] = noDataCatb0; catsb0[1] = dataCatb0; final SampleDimension sampDimb0 = new GridSampleDimension("band_0", catsb0, null); YamlWriterBuilder yamBuild = YamlFiles.getBuilder(); yamBuild.setSampleDimensions(Collections.singletonList(sampDimb0)); // System.out.println(YamlFiles.dump(yamBuild)); Assert.assertEquals(dumpResult, YamlFiles.dump(yamBuild)); YamlFiles.write(fil, yamBuild); List<SampleDimension> lsd = YamlFiles.read(fil, Double.class); Assert.assertEquals(lsd.get(0), sampDimb0); fil.delete(); } /** * Test binding of multi {@link SampleDimension} with multi {@link Category} build. * * @throws IOException if problem during yaml file writing. */ @Test public void multiSampleDimensionTest() throws IOException { final String dumpResult = "version: '1.0'\n" + "sampleDimension:\n" + "- description: band_0\n" + " categories:\n" + " - name: No data\n" + " value: 0.0\n" + " - name: data\n" + " minSampleValue: 1.0\n" + " isMinInclusive: true\n" + " maxSampleValue: 255.0\n" + " isMaxInclusive: true\n" + " scale: 1.0\n" + " offset: 0.0\n" + "- description: band_1\n" + " categories:\n" + " - name: data\n" + " minSampleValue: 0.0\n" + " isMinInclusive: true\n" + " maxSampleValue: 125.0\n" + " isMaxInclusive: true\n" + " scale: 1.0\n" + " offset: 0.0\n" + " - name: No data\n" + " minSampleValue: 125.0\n" + " isMinInclusive: false\n" + " maxSampleValue: 254.0\n" + " isMaxInclusive: true\n" + " - name: data\n" + " value: 255.0\n" + " scale: 1.0\n" + " offset: 0.0\n" + "- description: band_2\n" + " categories:\n" + " - name: data\n" + " minSampleValue: 0.0\n" + " isMinInclusive: true\n" + " maxSampleValue: 254.0\n" + " isMaxInclusive: false\n" + " scale: 1.0\n" + " offset: 0.0\n" + " - name: No data\n" + " value: 254.0\n" + " - name: data\n" + " value: 255.0\n" + " scale: 1.0\n" + " offset: 0.0\n"; final File fil = File.createTempFile("yamlTest", "txt"); //-- Sample dimension band 0 Category[] catsb0 = new Category[2]; final Category noDataCatb0 = SampleDimensionUtils.buildSingleNoDataCategory(Double.class, 0); final Category dataCatb0 = SampleDimensionUtils.buildCategory("data", Double.class, null, 1, true, 255, true, 1, 0); catsb0[0] = noDataCatb0; catsb0[1] = dataCatb0; final SampleDimension sampDimb0 = new GridSampleDimension("band_0", catsb0, null); //-- Sample dimension band 1 Category[] catsb1 = new Category[3]; final Category noDataCatb1 = SampleDimensionUtils.buildNoDataCategory(Double.class, 125, false, 254, true); final Category dataCatb10 = SampleDimensionUtils.buildCategory("data", Double.class, null, 0, true, 125, true, 1, 0); final Category dataCatb11 = SampleDimensionUtils.buildCategory("data", Double.class, null, 255, true, 255, true, 1, 0); catsb1[0] = noDataCatb1; catsb1[1] = dataCatb10; catsb1[2] = dataCatb11; final SampleDimension sampDimb1 = new GridSampleDimension("band_1", catsb1, null); //-- Sample dimension band 1 Category[] catsb2 = new Category[3]; final Category noDataCatb2 = SampleDimensionUtils.buildSingleNoDataCategory(Double.class, 254); final Category dataCatb2 = SampleDimensionUtils.buildCategory("data", Double.class, null, 0, true, 254, false, 1, 0); final Category dataCatb21 = SampleDimensionUtils.buildCategory("data", Double.class, null, 255, true, 255, true, 1, 0); catsb2[0] = noDataCatb2; catsb2[1] = dataCatb2; catsb2[2] = dataCatb21; final SampleDimension sampDimb2 = new GridSampleDimension("band_2", catsb2, null); List<SampleDimension> sampDims = new ArrayList<>(); sampDims.add(sampDimb0); sampDims.add(sampDimb1); sampDims.add(sampDimb2); final YamlWriterBuilder yamBuild = YamlFiles.getBuilder(); yamBuild.setSampleDimensions(sampDims); YamlFiles.write(fil, yamBuild); // System.out.println(YamlFiles.dump(yamBuild)); Assert.assertEquals(dumpResult, YamlFiles.dump(yamBuild)); List<SampleDimension> lsd = YamlFiles.read(fil, Double.class); int i = 0; for (SampleDimension lsd1 : lsd) { Assert.assertEquals(lsd.get(i++), lsd1); } fil.delete(); } /** * Teets yaml read / load with bad version file. * * @throws IOException if problem during yaml file writing. */ @Test public void badVersionTest() throws IOException { final String dumpResult = "version: '2.0'\n" + "sampleDimension:\n" + "- description: band_0\n" + " categories:\n" + " - name: No data\n" + " value: 0.0\n" + " - name: data\n" + " minSampleValue: 1.0\n" + " isMinInclusive: true\n" + " maxSampleValue: 255.0\n" + " isMaxInclusive: true\n" + " scale: 1.0\n" + " offset: 0.0\n"; try { final List<SampleDimension> sDim = YamlFiles.load(dumpResult, Double.class); Assert.fail("test should have fail for bad version reason."); } catch (IllegalStateException ex) { //-- expected comportement Assert.assertEquals(ex.getMessage(), "Current file version does not match expected : 1.0. Found : 2.0"); } } }