net.padaf.preflight.TestIsartorValidationFromClasspath.java Source code

Java tutorial

Introduction

Here is the source code for net.padaf.preflight.TestIsartorValidationFromClasspath.java

Source

/*******************************************************************************
  * Copyright 2010 Atos Worldline SAS
  *
  * Licensed by Atos Worldline SAS under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * Atos Worldline SAS licenses this file to You under the Apache 
License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
  *       http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ******************************************************************************/
package net.padaf.preflight;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;

import junit.framework.Assert;
import net.padaf.preflight.ValidationResult.ValidationError;
import net.padaf.preflight.util.ByteArrayDataSource;

import org.apache.commons.io.IOUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class TestIsartorValidationFromClasspath {

    protected static FileOutputStream isartorResultFile = null;

    protected static PdfAValidator validator = null;

    protected String expectedError;

    protected String path;

    public TestIsartorValidationFromClasspath(String path, String error) {
        this.path = path;
        this.expectedError = error;
    }

    @BeforeClass
    public static void beforeClass() throws Exception {
        validator = new PdfAValidatorFactory().createValidatorInstance(PdfAValidatorFactory.PDF_A_1_b);

        String irp = System.getProperty("isartor.results.path");
        if (irp != null) {
            File f = new File(irp);
            if (f.exists() && f.isFile()) {
                f.delete();
                isartorResultFile = new FileOutputStream(f);
            } else if (!f.exists()) {
                isartorResultFile = new FileOutputStream(f);
            } else {
                throw new IllegalArgumentException("Invalid result file : " + irp);
            }
        }
    }

    @AfterClass
    public static void afterClass() throws Exception {
        if (isartorResultFile != null) {
            IOUtils.closeQuietly(isartorResultFile);
        }
    }

    @Test()
    public void validate() throws Exception {
        ValidationResult result = null;
        try {
            InputStream input = this.getClass().getResourceAsStream(path);
            ByteArrayDataSource bds = new ByteArrayDataSource(input);
            result = validator.validate(bds);
            Assert.assertFalse(path + " : Isartor file should be invalid (" + path + ")", result.isValid());
            Assert.assertTrue(path + " : Should find at least one error", result.getErrorsList().size() > 0);
            // could contain more than one error
            boolean found = false;
            for (ValidationError error : result.getErrorsList()) {
                if (error.getErrorCode().equals(this.expectedError)) {
                    found = true;
                }
                if (isartorResultFile != null) {
                    String log = path.replace(".pdf", "") + "#" + error.getErrorCode() + "#" + error.getDetails()
                            + "\n";
                    isartorResultFile.write(log.getBytes());
                }
            }

            if (result.getErrorsList().size() > 1) {
                if (!found) {
                    StringBuilder message = new StringBuilder(100);
                    message.append(path).append(" : Invalid error code returned. Expected ");
                    message.append(this.expectedError).append(", found ");
                    for (ValidationError error : result.getErrorsList()) {
                        message.append(error.getErrorCode()).append(" ");
                    }
                    Assert.fail(message.toString());
                }
            } else {
                Assert.assertEquals(path + " : Invalid error code returned.", this.expectedError,
                        result.getErrorsList().get(0).getErrorCode());
            }
        } catch (ValidationException e) {
            throw new Exception(path + " :" + e.getMessage(), e);
        } finally {
            if (result != null) {
                result.closePdf();
            }
        }
    }

    @Parameters
    public static Collection<Object[]> initializeParameters() throws Exception {
        // load expected errors
        InputStream expected = IsartorTargetFileInformation.class.getResourceAsStream("/expected_errors.txt");
        Properties props = new Properties();
        props.load(expected);
        IOUtils.closeQuietly(expected);
        // prepare config
        List<Object[]> data = new ArrayList<Object[]>();
        InputStream is = Class.class.getResourceAsStream("/Isartor testsuite.list");
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line = reader.readLine();
        while (line != null) {
            String fn = new File(line).getName();
            String error = new StringTokenizer(props.getProperty(fn), "//").nextToken().trim();
            Object[] tmp = new Object[] { "/" + line, error };
            data.add(tmp);
            line = reader.readLine();
        }
        return data;
    }
}