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