From ffd1e0da6b73e2737f5cad0a6d3e82dbc3de206f Mon Sep 17 00:00:00 2001 From: Andreas Fitzek Date: Fri, 29 Aug 2014 15:09:54 +0200 Subject: Integrated PDF-AS Testing library --- .../ParameterizedSignatureTestSuite.java | 137 +++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 pdf-as-tests/src/test/java/at/gv/egiz/param_tests/ParameterizedSignatureTestSuite.java (limited to 'pdf-as-tests/src/test/java/at/gv/egiz/param_tests/ParameterizedSignatureTestSuite.java') diff --git a/pdf-as-tests/src/test/java/at/gv/egiz/param_tests/ParameterizedSignatureTestSuite.java b/pdf-as-tests/src/test/java/at/gv/egiz/param_tests/ParameterizedSignatureTestSuite.java new file mode 100644 index 00000000..a8e03b5e --- /dev/null +++ b/pdf-as-tests/src/test/java/at/gv/egiz/param_tests/ParameterizedSignatureTestSuite.java @@ -0,0 +1,137 @@ +package at.gv.egiz.param_tests; + +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.PrintStream; +import java.net.URL; + +import org.apache.commons.io.output.TeeOutputStream; +import org.apache.log4j.PropertyConfigurator; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.Description; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.model.InitializationError; + +import at.gv.egiz.param_tests.serialization.SerializiationManager; +import at.gv.egiz.param_tests.serialization.html.HTMLTestSummaryWriter; + +/** + * Test suite which groups all available parameterized tests in + * Suite.SuiteClasses-annotation. + * + * @author mtappler + * + */ +@RunWith(Suite.class) +@Suite.SuiteClasses({ PDFASignatureTest.class, SignaturePositionTest.class }) +public class ParameterizedSignatureTestSuite { + /** + * variable to save the standard output PrintStream after + * redirecting it, to be able to reset it afterwards, this should only be + * necessary if this class is loaded and run dynamically (not using right + * mouse -> Run As -> JUnit Test) + */ + private static PrintStream stdOutSave; + /** + * variable to save the standard error PrintStream after + * redirecting it + */ + private static PrintStream stderrSave; + /** + * stream which logs everything which is written to stdout during test + * execution + */ + private static ByteArrayOutputStream stdoutLog; + /** + * stream which logs everything which is written to stderr during test + * execution + */ + private static ByteArrayOutputStream stderrLog; + + /** + * the location of the log4j configuration + */ + private static final URL log4j = ParameterizedSignatureTestSuite.class + .getResource("/log4j.properties"); + /** + * If set to true, logging will be configured, when this class is loaded. + * This ensures that logging will be available in tests before logging is + * configured by pdf-as. + */ + private static final boolean CONFIGURE_LOGGING = true; + + /** + * Getter + * + * @return the byte array output stream which captures stdout + */ + public static ByteArrayOutputStream getStdoutLog() { + // to avoid null NPE, if a test is started without testsuite + return stdoutLog != null ? stdoutLog : new ByteArrayOutputStream(); + } + + /** + * Getter + * + * @return the byte array output stream which captures stderr + */ + public static ByteArrayOutputStream getStderrLog() { + // to avoid null NPE + return stderrLog != null ? stderrLog : new ByteArrayOutputStream(); + } + + static { + String testDir = System.getProperty("test.dir"); + System.out.println("Running Tests from: " + testDir); + } + + /** + * Sets up the test run by redirecting stdout and stderr such that both are + * written to the console and to a byte array output stream and configures + * logging if the corresponding flag is set. + * + * @throws InitializationError + * if no test directory is given via the system property + * "test.dir" + */ + @BeforeClass + public static void setUpClass() throws InitializationError { + stdoutLog = new ByteArrayOutputStream(); + TeeOutputStream teeStdOut = new TeeOutputStream(System.out, stdoutLog); + stdOutSave = System.out; + System.setOut(new PrintStream(teeStdOut)); + stderrLog = new ByteArrayOutputStream(); + TeeOutputStream teeStdErr = new TeeOutputStream(System.err, stderrLog); + stderrSave = System.err; + System.setErr(new PrintStream(teeStdErr)); + if (CONFIGURE_LOGGING && log4j != null) { + try { + PropertyConfigurator.configure(new FileInputStream(log4j + .getFile())); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + String testDir = System.getProperty("test.dir"); + if (testDir == null) + throw new InitializationError("Test directory is not set"); + + SerializiationManager.getInstance().setTestSummaryWriter( + new HTMLTestSummaryWriter(testDir)); + } + + /** + * Resets stdout and stderr redirection and serializes all test results. + */ + @AfterClass + public static void tearDownClass() { + System.setOut(stdOutSave); + System.setErr(stderrSave); + SerializiationManager.getInstance().serializeAll(); + } + +} -- cgit v1.2.3