/*
* Copyright (C) 2014 Armin Häberling
* 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 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.aha.pdftools.model;
import static junitparams.JUnitParamsRunner.$;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import java.util.Set;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.itextpdf.text.pdf.PdfWriter;
@RunWith(JUnitParamsRunner.class)
public class PdfPermissionsTest {
private static final int ALL_PERMISSIONS = 0xfffffffc;
private static final int NO_PERMISSIONS = 0xfffff0c0;
private static final String ASSEMBLY = "assembly";
private static final String COPY = "copy";
private static final String PRINT = "printing";
private static final String FILL_IN = "fillIn";
private static final String DEGRADED_PRINT = "degradedPrinting";
private static final String ANNOTATION = "modifyAnnotation";
private static final String CONTENT = "modifyContents";
private static final String SCREEN = "screenReaders";
@Test
public void checkInitialPermissionValues() {
PdfPermissions perm = new PdfPermissions();
assertTrue(perm.isAssembly());
assertTrue(perm.isCopy());
assertTrue(perm.isDegradedPrinting());
assertTrue(perm.isFillIn());
assertTrue(perm.isModifyAnnotations());
assertTrue(perm.isModifyContents());
assertTrue(perm.isPrinting());
assertTrue(perm.isScreenReaders());
assertEquals(ALL_PERMISSIONS, perm.getPermissionFlags());
}
@Test
@Parameters(method = "permissionValues")
public void permissions(int pdfPerm, Set<String> permissions) {
PdfPermissions perm = new PdfPermissions(pdfPerm);
assertPermission(perm.isAssembly(), ASSEMBLY, permissions);
assertPermission(perm.isCopy(), COPY, permissions);
assertPermission(perm.isDegradedPrinting(), DEGRADED_PRINT, permissions);
assertPermission(perm.isPrinting(), PRINT, permissions);
assertPermission(perm.isFillIn(), FILL_IN, permissions);
assertPermission(perm.isModifyAnnotations(), ANNOTATION, permissions);
assertPermission(perm.isModifyContents(), CONTENT, permissions);
assertPermission(perm.isScreenReaders(), SCREEN, permissions);
assertEquals(pdfPerm, perm.getPermissionFlags());
}
private void assertPermission(boolean actual, String name, Set<String> permissions) {
assertEquals(name, permissions.contains(name), actual);
}
private Set<String> $$(String... permissions) {
HashSet<String> set = new HashSet<String>();
for (int i = 0; i < permissions.length; i++) {
set.add(permissions[i]);
}
return set;
}
Object[] permissionValues() {
return $(
$(ALL_PERMISSIONS, $$(ASSEMBLY, COPY, PRINT, DEGRADED_PRINT, FILL_IN, ANNOTATION, CONTENT, SCREEN)),
$((ALL_PERMISSIONS ^ PdfWriter.ALLOW_PRINTING) & ALL_PERMISSIONS,
$$(ASSEMBLY, COPY, FILL_IN, ANNOTATION, CONTENT, SCREEN)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_ASSEMBLY, $$(ASSEMBLY)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_COPY, $$(COPY)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_DEGRADED_PRINTING, $$(DEGRADED_PRINT)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_FILL_IN, $$(FILL_IN)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_MODIFY_ANNOTATIONS, $$(ANNOTATION)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_MODIFY_CONTENTS, $$(CONTENT)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_PRINTING, $$(PRINT, DEGRADED_PRINT)),
$(NO_PERMISSIONS | PdfWriter.ALLOW_SCREENREADERS, $$(SCREEN)));
}
}