// CSE 143, Homework 3: HTML Validator // // Instructor-provided code. // This program is a very simple test for your HTML validator object. // Please feel free to modify this file to create your own simple test cases. import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.LinkedList; import java.util.Queue; import org.junit.Test; /** A basic JUnit test for some methods of your HTML validator. */ public class SimpleTest { // shared timeout in milliseconds, used by each test private static final int TIMEOUT_MS = 2000; @Test(timeout = TIMEOUT_MS) public void test1_ValidGetTags() { // first test for short valid code // hellohow are you
Queue tags = new LinkedList(); tags.add(new HtmlTag("html", true)); // tags.add(new HtmlTag("body", true)); // tags.add(new HtmlTag("b", true)); // tags.add(new HtmlTag("b", false)); // tags.add(new HtmlTag("i", true)); // tags.add(new HtmlTag("b", true)); // tags.add(new HtmlTag("b", false)); // tags.add(new HtmlTag("br")); //
tags.add(new HtmlTag("i", false)); //
tags.add(new HtmlTag("body", false)); // tags.add(new HtmlTag("html", false)); // Queue tags2 = new LinkedList(tags); HtmlValidator validator = new HtmlValidator(tags); assertEquals("getTags", tags2, validator.getTags()); } @Test(timeout = TIMEOUT_MS) public void test2_ValidValidate() { // first test for short valid code // hellohow are you
Queue tags = new LinkedList(); tags.add(new HtmlTag("html", true)); // tags.add(new HtmlTag("body", true)); // tags.add(new HtmlTag("b", true)); // tags.add(new HtmlTag("b", false)); // tags.add(new HtmlTag("i", true)); // tags.add(new HtmlTag("b", true)); // tags.add(new HtmlTag("b", false)); // tags.add(new HtmlTag("br")); //
tags.add(new HtmlTag("i", false)); //
tags.add(new HtmlTag("body", false)); // tags.add(new HtmlTag("html", false)); // HtmlValidator validator = new HtmlValidator(tags); OutputCapturer.start(); validator.validate(); String output = OutputCapturer.stop(); String expectedOutput = "\n \n \n \n \n \n \n
\n
\n \n\n"; assertEquals("validate output", expectedOutput, output); } @Test(timeout = TIMEOUT_MS) public void test3_InvalidAddTag() { // second test for invalid code and setTags HtmlValidator validator = new HtmlValidator(); Queue tags = new LinkedList(); tags.add(new HtmlTag("html", true)); // tags.add(new HtmlTag("body", true)); // tags.add(new HtmlTag("b", true)); // tags.add(new HtmlTag("body", false)); // tags.add(new HtmlTag("b", false)); // tags.add(new HtmlTag("html", false)); // // students should not use a for-each loop over a Queue! for (HtmlTag tag : tags) { validator.addTag(tag); } assertEquals("getTags", tags, validator.getTags()); } @Test(timeout = TIMEOUT_MS) public void test4_InvalidValidate() { HtmlValidator validator = new HtmlValidator(); Queue tags = new LinkedList(); tags.add(new HtmlTag("html", true)); // tags.add(new HtmlTag("body", true)); // tags.add(new HtmlTag("b", true)); // tags.add(new HtmlTag("body", false)); // tags.add(new HtmlTag("b", false)); // tags.add(new HtmlTag("html", false)); // // students should not use a for-each loop over a Queue! for (HtmlTag tag : tags) { validator.addTag(tag); } OutputCapturer.start(); validator.validate(); String output = OutputCapturer.stop(); String expectedOutput = "\n \n \nERROR unexpected tag: \n \nERROR unexpected tag: \nERROR unclosed tag: \nERROR unclosed tag: \n"; assertEquals("validate output", expectedOutput, output); OutputCapturer.start(); validator.validate(); output = OutputCapturer.stop(); assertEquals("validate output (2nd call in a row)", expectedOutput, output); } /** * This class has static methods for capturing console output (for methods * that do printlns). You can use it in your own tests if you like. */ public static class OutputCapturer { private static final PrintStream SYSTEM_OUT = java.lang.System.out; private static final PrintStream SYSTEM_ERR = java.lang.System.err; private static ByteArrayOutputStream outputStream = null; /** Returns true if output is currently being captured. */ public static boolean isCapturing() { return outputStream != null; } /** Begins capturing output. */ public static synchronized void start() { if (isCapturing()) { stop(); } outputStream = new ByteArrayOutputStream(65536); PrintStream out = new PrintStream(outputStream); System.setOut(out); System.setErr(out); } /** Stops capturing output and returns the string of captured output. */ public static synchronized String stop() { String actualOutput = ""; if (isCapturing()) { System.out.flush(); System.err.flush(); System.setOut(SYSTEM_OUT); System.setErr(SYSTEM_ERR); if (isCapturing()) { actualOutput = outputStream.toString().replace("\r", ""); } outputStream = null; } return actualOutput; } } }