ExamplesTest.java revision 6a63b4507494cbf0d458674f0c091fff9dca2591
1// Copyright (c) 2011, Mike Samuel
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions
6// are met:
7//
8// Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// Redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution.
13// Neither the name of the OWASP nor the names of its contributors may
14// be used to endorse or promote products derived from this software
15// without specific prior written permission.
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27// POSSIBILITY OF SUCH DAMAGE.
28
29package org.owasp.html;
30
31import java.io.ByteArrayInputStream;
32import java.io.ByteArrayOutputStream;
33import java.io.InputStream;
34import java.io.PrintStream;
35import java.lang.reflect.Method;
36
37import com.google.common.base.Throwables;
38
39import junit.framework.TestCase;
40
41public class ExamplesTest extends TestCase {
42  public final void testExamplesRun() throws Exception {
43    InputStream stdin = System.in;
44    PrintStream stdout = System.out;
45    PrintStream stderr = System.err;
46    for (Class<?> exampleClass : AllExamples.CLASSES) {
47      InputStream emptyIn = new ByteArrayInputStream(new byte[0]);
48      ByteArrayOutputStream captured = new ByteArrayOutputStream();
49      PrintStream capturingOut = new PrintStream(captured, true, "UTF-8");
50      System.setIn(emptyIn);
51      System.setOut(capturingOut);
52      System.setErr(capturingOut);
53
54      Method main;
55      try {
56        main = exampleClass.getDeclaredMethod("main", String[].class);
57        // Invoke with no arguments to sanitize empty input stream to output.
58        main.invoke(null, new Object[] { new String[0] });
59      } catch (Exception ex) {
60        capturingOut.flush();
61        System.err.println(
62            "Example " + exampleClass.getSimpleName() + "\n"
63            + captured.toString("UTF-8"));
64        Throwables.propagate(ex);
65      } finally {
66        System.setIn(stdin);
67        System.setOut(stdout);
68        System.setErr(stderr);
69      }
70    }
71  }
72}
73