From 9eea270aaec82bc38d297f7aa2282877d48cd3c1 Mon Sep 17 00:00:00 2001 From: j-james Date: Mon, 17 Oct 2022 08:45:08 -0700 Subject: Split tests into packages --- src/test/model/html/HtmlParserTest.java | 118 ++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/test/model/html/HtmlParserTest.java (limited to 'src/test/model/html') diff --git a/src/test/model/html/HtmlParserTest.java b/src/test/model/html/HtmlParserTest.java new file mode 100644 index 0000000..a7093e1 --- /dev/null +++ b/src/test/model/html/HtmlParserTest.java @@ -0,0 +1,118 @@ +package model.html; + +import model.html.ElementNode; +import model.html.HtmlParser; +import model.html.TextNode; +import model.util.Node; +import org.javatuples.Pair; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +public class HtmlParserTest { + + String idiomaticHtml = "

Hello, world!

"; + String brokenHtml = "<>"; + + @Test + void testIdiomaticHtml() { + ArrayList expected = new ArrayList<>(); + ArrayList expectedChildren = new ArrayList<>(); + ArrayList expectedGrandChildren = new ArrayList<>(); + ArrayList expectedGreatGrandChildren = new ArrayList<>(); + expected.add(new ElementNode("html", new ArrayList<>(), expectedChildren)); + expectedChildren.add(new ElementNode("head")); + expectedChildren.add(new ElementNode("body", new ArrayList<>(), expectedGrandChildren)); + expectedGrandChildren.add(new ElementNode("p", new ArrayList<>(), expectedGreatGrandChildren)); + expectedGreatGrandChildren.add(new TextNode("Hello, world!")); + + HtmlParser parser = new HtmlParser(); + assertEqualsHtml(parser.parseHtml(idiomaticHtml), expected); + // displayHtmlTree(parser.parseHtml(idiomaticHtml)); + } + + @Test + void testBrokenHtml() { + ArrayList expected = new ArrayList<>(); + ArrayList expectedChildren = new ArrayList<>(); + ArrayList expectedGrandChildren = new ArrayList<>(); + expected.add(new ElementNode("html", new ArrayList<>(), expectedChildren)); + expectedChildren.add(new ElementNode("foo", new ArrayList<>(), expectedGrandChildren)); + expectedGrandChildren.add(new ElementNode("bar", new ArrayList<>())); + expectedGrandChildren.add(new TextNode("<>")); + + HtmlParser parser = new HtmlParser(); + assertEqualsHtml(parser.parseHtml(brokenHtml), expected); + // displayHtmlTree(parser.parseHtml(brokenHtml)); + } + + @Test + void testTrailingTextHtml() { + ArrayList expected = new ArrayList<>(); + ArrayList expectedChildren = new ArrayList<>(); + ArrayList expectedGrandChildren = new ArrayList<>(); + expected.add(new TextNode("bot")); + expected.add(new ElementNode("html", new ArrayList<>(), expectedChildren)); + expected.add(new TextNode("ba")); + expectedChildren.add(new ElementNode("foo", new ArrayList<>(), expectedGrandChildren)); + expectedGrandChildren.add(new ElementNode("bar", new ArrayList<>())); + + HtmlParser parser = new HtmlParser(); + assertEqualsHtml(parser.parseHtml(trailingTextHtml), expected); + // displayHtmlTree(parser.parseHtml(trailingTextHtml)); + } + + @Test + void testAttributesHtml() { + ArrayList expected = new ArrayList<>(); + ArrayList expectedChildren = new ArrayList<>(); + ArrayList> expectedAttributes = new ArrayList<>(); + expected.add(new ElementNode("html", new ArrayList<>(), expectedChildren)); + expectedChildren.add(new ElementNode("attr", expectedAttributes)); + expectedAttributes.add(new Pair<>("hello", "world")); + expectedAttributes.add(new Pair<>("foo", "bar")); + expectedAttributes.add(new Pair<>("strange", "cha\"rm")); + expectedAttributes.add(new Pair<>("up", "do'wn")); + + HtmlParser parser = new HtmlParser(); + var parsed = parser.parseHtml(attributesHtml); + displayHtmlTree(parsed); + assertEqualsHtml(parsed, expected); + } + + /** + * Complicated helper function for tests. + */ + private static void assertEqualsHtml(ArrayList html, ArrayList expected) { + for (int i = 0; i < html.size(); i++) { + assertEquals(html.get(i).getData(), expected.get(i).getData()); + // System.out.println(html.get(i).getData() + " " + expected.get(i).getData()); + if (html.get(i) instanceof ElementNode) { + assertEqualsHtml(((ElementNode) html.get(i)).getChildren(), ((ElementNode) expected.get(i)).getChildren()); + } + } + } + + /** + * Simple helper function for debugging. + * EFFECTS: prints a representation of the tree to the console for debugging purposes + */ + private void displayHtmlTree(ArrayList tree) { + for (Node node : tree) { + if (node instanceof ElementNode) { + System.out.print(((ElementNode) node).getTag() + ": "); + for (Node n : ((ElementNode) node).getChildren()) { + System.out.print(n.getData() + " "); + } + System.out.println(); + displayHtmlTree(((ElementNode) node).getChildren()); + } else { + System.out.println("Text: " + node.getData()); + } + } + } +} -- cgit v1.2.3-70-g09d2