/* * Copyright 2017 Laszlo Balazs-Csiki * * This file is part of Pixelitor. Pixelitor is free software: you * can redistribute it and/or modify it under the terms of the GNU * General Public License, version 3 as published by the Free * Software Foundation. * * Pixelitor 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 Pixelitor. If not, see <http://www.gnu.org/licenses/>. */ package pixelitor; import org.junit.Test; import pixelitor.colors.FillType; import pixelitor.io.OpenRaster; import pixelitor.io.OpenSaveManager; import pixelitor.layers.AdjustmentLayer; import pixelitor.layers.BlendingMode; import pixelitor.layers.ImageLayer; import pixelitor.layers.Layer; import pixelitor.layers.TextLayer; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; public class CompositionCreationTest { @Test public void testNewImage() { Composition comp = NewImage.createNewComposition(FillType.WHITE, 20, 20, "New Image"); comp.checkInvariant(); assertThat(comp.getNumLayers()).isEqualTo(1); assertThat(comp.getCanvasWidth()).isEqualTo(20); assertThat(comp.getCanvasHeight()).isEqualTo(20); assertThat(comp.getCompositeImage()).isNotNull(); } private static void testSingleLayerRead(File f) { Composition comp = OpenSaveManager.createCompositionFromFile(f); comp.checkInvariant(); assertThat(comp.getNumLayers()).isEqualTo(1); assertThat(comp.getCanvasWidth()).isEqualTo(10); assertThat(comp.getCanvasHeight()).isEqualTo(10); assertThat(comp.getCompositeImage()).isNotNull(); } private static Composition testMultiLayerRead(File f, Consumer<Layer> secondLayerChecker) { Composition comp = OpenSaveManager.createCompositionFromFile(f); comp.checkInvariant(); assertThat(comp.getNumLayers()).isEqualTo(2); assertThat(comp.getCanvasWidth()).isEqualTo(10); assertThat(comp.getCanvasHeight()).isEqualTo(10); assertThat(comp.getCompositeImage()).isNotNull(); Layer secondLayer = comp.getLayer(1); secondLayerChecker.accept(secondLayer); return comp; } @Test public void testReadJPEG() { File f = new File("src/test/resources/jpeg_test_input.jpg"); testSingleLayerRead(f); } @Test public void testReadPNG() { File f = new File("src/test/resources/png_test_input.png"); testSingleLayerRead(f); } @Test public void testReadBMP() { File f = new File("src/test/resources/bmp_test_input.bmp"); testSingleLayerRead(f); } @Test public void testReadGIF() { File f = new File("src/test/resources/gif_test_input.gif"); testSingleLayerRead(f); } @Test public void testReadWritePXC() { // read and test String[] fileNames = { "src/test/resources/pxc_test_input.pxc", "src/test/resources/pxc_file_w_layer_mask.pxc", "src/test/resources/pxc_file_w_text_layer.pxc", "src/test/resources/pxc_file_w_adj_layer.pxc", }; List<Consumer<Layer>> extraChecks = new ArrayList<>(); // extra check for simple pxc file extraChecks.add(secondLayer -> { assert secondLayer instanceof ImageLayer; assertSame(BlendingMode.MULTIPLY, secondLayer.getBlendingMode()); assertEquals(0.75, secondLayer.getOpacity(), 0.0001); }); // extra check for pxc with layer mask extraChecks.add(secondLayer -> { assert secondLayer instanceof ImageLayer; assert secondLayer.hasMask(); assert secondLayer.getMask().isLinked(); assert secondLayer.isMaskEnabled(); }); // extra check for pxc with text layer extraChecks.add(secondLayer -> { assert !secondLayer.hasMask(); assert secondLayer instanceof TextLayer; assertThat(((TextLayer) secondLayer).getSettings().getText()).isEqualTo("T"); }); // extra check for pxc with adjustment layer extraChecks.add(secondLayer -> { assert !secondLayer.hasMask(); assert secondLayer instanceof AdjustmentLayer; }); for (int i = 0; i < fileNames.length; i++) { String fileName = fileNames[i]; try { File f = new File(fileName); Composition comp = testMultiLayerRead(f, extraChecks.get(i)); // write to tmp file File tmp = File.createTempFile("pix_tmp", ".pxc"); OpenSaveManager.serializePXC(comp, tmp); // read back and test testMultiLayerRead(tmp, extraChecks.get(i)); tmp.delete(); } catch (Exception e) { throw new IllegalStateException("Error while testing " + fileName, e); } } } @Test public void testReadWriteORA() throws IOException { Consumer<Layer> extraCheck = secondLayer -> { assert secondLayer instanceof ImageLayer; assertSame(BlendingMode.MULTIPLY, secondLayer.getBlendingMode()); assertEquals(0.75, secondLayer.getOpacity(), 0.0001); }; // read and test File f = new File("src/test/resources/gimp_ora_test_input.ora"); Composition comp = testMultiLayerRead(f, extraCheck); File tmp = File.createTempFile("pix_tmp", ".ora"); OpenRaster.writeOpenRaster(comp, tmp, true); // read back and test testMultiLayerRead(tmp, extraCheck); tmp.delete(); } }