/* * Created on 18 set 2015 * Copyright 2015 by Andrea Vacondio (andrea.vacondio@gmail.com). * This file is part of Sejda. * * Sejda 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. * * Sejda 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 Sejda. If not, see <http://www.gnu.org/licenses/>. */ package org.sejda.impl.sambox.component; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collection; import org.junit.Before; import org.junit.Test; import org.sejda.sambox.cos.COSDictionary; import org.sejda.sambox.cos.COSName; import org.sejda.sambox.pdmodel.PDDocument; import org.sejda.sambox.pdmodel.interactive.annotation.PDAnnotation; import org.sejda.sambox.pdmodel.interactive.annotation.PDAnnotationLink; import org.sejda.sambox.pdmodel.interactive.annotation.PDAnnotationWidget; import org.sejda.sambox.pdmodel.interactive.form.PDAcroForm; import org.sejda.sambox.pdmodel.interactive.form.PDField; import org.sejda.sambox.pdmodel.interactive.form.PDFieldFactory; /** * @author Andrea Vacondio * */ public class SignatureClipperTest { private COSDictionary dictionary; @Before public void setUp() { dictionary = new COSDictionary(); dictionary.setItem(COSName.FT, COSName.SIG); dictionary.setItem(COSName.V, COSName.getPDFName("value")); dictionary.setItem(COSName.SV, COSName.getPDFName("seed")); dictionary.setItem(COSName.LOCK, COSName.getPDFName("lock")); } @Test public void nullCollectionDoesntFail() { SignatureClipper.clipSignatures((Collection<PDAnnotation>) null); } @Test public void nullFieldDoesntFail() { assertFalse(SignatureClipper.clipSignature(null)); } @Test public void clipWidget() { PDAnnotationWidget widget = new PDAnnotationWidget(dictionary); SignatureClipper.clipSignatures(Arrays.asList(widget)); assertFalse(widget.getCOSObject().containsKey(COSName.V)); assertFalse(widget.getCOSObject().containsKey(COSName.SV)); assertFalse(widget.getCOSObject().containsKey(COSName.LOCK)); } @Test public void clipNonWidget() { PDAnnotationLink widget = new PDAnnotationLink(dictionary); SignatureClipper.clipSignatures(Arrays.asList(widget)); assertTrue(widget.getCOSObject().containsKey(COSName.V)); assertTrue(widget.getCOSObject().containsKey(COSName.SV)); assertTrue(widget.getCOSObject().containsKey(COSName.LOCK)); } @Test public void clipWidgetNonSign() { dictionary.setItem(COSName.FT, COSName.BTN); PDAnnotationWidget widget = new PDAnnotationWidget(dictionary); SignatureClipper.clipSignatures(Arrays.asList(widget)); assertTrue(widget.getCOSObject().containsKey(COSName.V)); assertTrue(widget.getCOSObject().containsKey(COSName.SV)); assertTrue(widget.getCOSObject().containsKey(COSName.LOCK)); } @Test public void clipField() { PDField field = PDFieldFactory.createFieldAddingChildToParent(new PDAcroForm(new PDDocument()), dictionary, null); assertTrue(SignatureClipper.clipSignature(field)); assertFalse(field.getCOSObject().containsKey(COSName.V)); assertFalse(field.getCOSObject().containsKey(COSName.SV)); assertFalse(field.getCOSObject().containsKey(COSName.LOCK)); } @Test public void clipFieldNotSignature() { dictionary.setItem(COSName.FT, COSName.BTN); PDField field = PDFieldFactory.createFieldAddingChildToParent(new PDAcroForm(new PDDocument()), dictionary, null); SignatureClipper.clipSignature(field); assertTrue(field.getCOSObject().containsKey(COSName.V)); assertTrue(field.getCOSObject().containsKey(COSName.SV)); assertTrue(field.getCOSObject().containsKey(COSName.LOCK)); } }