/* * This file is part of the Sejda source code * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.sejda.core.service; import static org.junit.Assert.assertTrue; import java.io.IOException; import org.junit.Ignore; import org.junit.Test; import org.sejda.core.TestListenerFactory; import org.sejda.core.TestListenerFactory.TestListenerFailed; import org.sejda.core.notification.context.ThreadLocalNotificationContext; import org.sejda.model.optimization.OptimizationPolicy; import org.sejda.model.output.ExistingOutputPolicy; import org.sejda.model.parameter.ExtractByOutlineParameters; import org.sejda.model.pdf.PdfVersion; @Ignore public abstract class ExtractByOutlineTaskTest extends BaseTaskTest<ExtractByOutlineParameters> { private ExtractByOutlineParameters setUpParameters(int level) { return setUpParameters(level, "pdf/extract_by_outline_sample.pdf", null); } private ExtractByOutlineParameters setUpParameters(int level, String regEx) { return setUpParameters(level, "pdf/extract_by_outline_sample.pdf", regEx); } private ExtractByOutlineParameters setUpParameters(int level, String sourceFile, String regEx) { ExtractByOutlineParameters parameters = new ExtractByOutlineParameters(level); parameters.setMatchingTitleRegEx(regEx); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(customInput(sourceFile, "file1.pdf")); parameters.setOutputPrefix("[FILENUMBER]_[BOOKMARK_NAME_STRICT]"); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); return parameters; } @Test public void testSplitDeeperLevel() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(3); testContext.directoryOutputTo(parameters); execute(parameters); testContext .assertOutputContainsFilenames("1_Creating Assemblies.pdf", "2_Using Profiles.pdf", "3_Using Profiles by OS.pdf", "4_Setting Source Code Control System.pdf", "5_Versioning.pdf", "6_Using internal Repositories.pdf", "7_Installing Artifact in Remote Repository.pdf", "8_Install 3rdParty jar to Remote Repository.pdf", "9_Preparing Releases.pdf", "10_Performing Releases.pdf", "11_IntegrationTest with tomcat.pdf", "12_Online webdevelopment with Jetty plugin.pdf", "13_Online webdevelopment and automatic deployment with tomcat plugin.pdf") .assertOutputSize(13); } @Test public void testSplitAtTopLevel() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(2); parameters.setIncludePageAfter(true); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertOutputContainsFilenames("1_Invoking Maven.pdf", "2_Creating a new Project jar.pdf", "3_Creating a new Project war.pdf", "4_Standard Project Structure.pdf", "5_Compiling.pdf", "6_Running Unit Tests Code Coverage.pdf", "7_Packaging jar war.pdf", "8_Installing Artifact in Local Repository.pdf", "9_Installing 3rdParty jar in local Repository.pdf", "10_Cleaning Up.pdf", "11_Creating Eclipse Project Structure.pdf", "12_Maven Project file pomxml.pdf", "13_Adding Dependencies.pdf", "14_Adding Developers.pdf", "15_Setting Compiler Version.pdf", "16_Assemblies and Profiles.pdf", "17_Versioning Repositories and Releases.pdf", "18_WebDevelopment.pdf" ).assertOutputSize(18).assertPages("17_Versioning Repositories and Releases.pdf", 2); } @Test public void testBatchFilesWithConflictingOutputFiles() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(2); parameters.addSource(customInput("pdf/extract_by_outline_sample.pdf", "file2.pdf")); parameters.setOutputPrefix("[BASENAME]_[FILENUMBER]_[BOOKMARK_NAME_STRICT]"); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertOutputContainsFilenames("file1_1_Invoking Maven.pdf", "file2_1_Invoking Maven.pdf"); testContext.assertOutputSize(36); } @Test public void testWithMatchingText() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(3, "(Using)+.+"); parameters.setIncludePageAfter(true); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertOutputSize(3).assertPages("1_Using Profiles.pdf", 2) .assertPages("2_Using Profiles by OS.pdf", 2).assertPages("3_Using internal Repositories.pdf", 2); } @Test public void testWithMatchingTextAndOptimization() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(3, "(Using)+.+"); parameters.setOptimizationPolicy(OptimizationPolicy.YES); parameters.setIncludePageAfter(true); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertOutputSize(3).assertPages("1_Using Profiles.pdf", 2) .assertPages("2_Using Profiles by OS.pdf", 2).assertPages("3_Using internal Repositories.pdf", 2); } @Test public void testNotMatchingregEx() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(1, ".+(Chuck)+.+"); testContext.directoryOutputTo(parameters); TestListenerFailed failListener = TestListenerFactory.newFailedListener(); ThreadLocalNotificationContext.getContext().addListener(failListener); execute(parameters); assertTrue(failListener.isFailed()); } @Test public void testNonExistingLevel() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(4); testContext.directoryOutputTo(parameters); TestListenerFailed failListener = TestListenerFactory.newFailedListener(); ThreadLocalNotificationContext.getContext().addListener(failListener); execute(parameters); assertTrue(failListener.isFailed()); } @Test public void testIncludingPageAfterOff() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(1, "pdf/payslip_with_bookmarks.pdf", null); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertOutputContainsFilenames("1_Employee One.pdf", "3_Employee Three.pdf", "2_Employee Two.pdf"); testContext.assertOutputSize(3); testContext.assertPages("1_Employee One.pdf", 1); } @Test public void testIncludingPageAfterOn() throws IOException { ExtractByOutlineParameters parameters = setUpParameters(1, "pdf/payslip_with_bookmarks.pdf", null); parameters.setIncludePageAfter(true); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertOutputContainsFilenames("1_Employee One.pdf", "3_Employee Three.pdf", "2_Employee Two.pdf"); testContext.assertOutputSize(3); testContext.assertPages("1_Employee One.pdf", 2); } }