001package edu.pdx.cs.joy.grader;
002
003import org.junit.jupiter.api.Test;
004
005import java.io.StringWriter;
006
007import static org.hamcrest.MatcherAssert.assertThat;
008import static org.hamcrest.Matchers.containsString;
009import static org.hamcrest.Matchers.equalTo;
010
011public class HtmlGeneratorTest {
012
013  @Test
014  public void doctypeIsWritten() {
015    StringWriter writer = new StringWriter();
016    HtmlGenerator generator = new HtmlGenerator(writer);
017    generator.beginTag("html");
018    generator.endTag();
019
020    String html = writer.toString();
021    assertThat(html, containsString(HtmlGenerator.DOC_TYPE));
022  }
023
024  @Test
025  public void beginningATagOpensThatTag() {
026    StringWriter writer = new StringWriter();
027    HtmlGenerator generator = new HtmlGenerator(writer);
028    generator.beginTag("html");
029
030    String html = writer.toString();
031    assertThat(html, containsString("<html>"));
032  }
033
034  @Test
035  public void endingATagClosesTheLastOpenedTag() {
036    StringWriter writer = new StringWriter();
037    HtmlGenerator generator = new HtmlGenerator(writer);
038    generator.beginTag("html");
039    generator.endTag();
040
041    String html = writer.toString();
042    assertThat(html, containsString("<html>"));
043    assertThat(html, containsString("</html>"));
044  }
045
046  @Test
047  public void nestedTags() {
048    StringWriter writer = new StringWriter();
049    HtmlGenerator generator = new HtmlGenerator(writer);
050    generator.beginTag("html");
051    generator.beginTag("head");
052    generator.endTag();
053    generator.endTag();
054
055    String html = writer.toString();
056    assertThat(html, containsString("<html>"));
057    assertThat(html, containsString("<head>"));
058    assertThat(html, containsString("</head>"));
059    assertThat(html, containsString("</html>"));
060  }
061
062  @Test
063  public void tagsAreOnTheirOwnLine() {
064    StringWriter writer = new StringWriter();
065    HtmlGenerator generator = new HtmlGenerator(writer);
066    generator.beginTag("html");
067    generator.endTag();
068
069    String html = writer.toString();
070    String[] lines = parseIntoLines(html);
071    assertThat(lines[1], equalTo("<html>"));
072    assertThat(lines[2], equalTo("</html>"));
073  }
074
075  private String[] parseIntoLines(String html) {
076    return html.split("\n");
077  }
078
079  @Test
080  public void nestedTagsAreIndented() {
081    StringWriter writer = new StringWriter();
082    HtmlGenerator generator = new HtmlGenerator(writer);
083    generator.beginTag("html");
084    generator.beginTag("head");
085    generator.beginTag("title");
086    generator.endTag();
087    generator.endTag();
088    generator.endTag();
089
090    String html = writer.toString();
091    String[] lines = parseIntoLines(html);
092    assertThat(lines[1], equalTo("<html>"));
093    assertThat(lines[2], equalTo("  <head>"));
094    assertThat(lines[3], equalTo("    <title>"));
095    assertThat(lines[4], equalTo("    </title>"));
096    assertThat(lines[5], equalTo("  </head>"));
097    assertThat(lines[6], equalTo("</html>"));
098  }
099
100  @Test
101  public void textIsWritten() {
102    String text = "This is some text";
103
104    StringWriter writer = new StringWriter();
105    HtmlGenerator generator = new HtmlGenerator(writer);
106    generator.beginTag("html");
107    generator.beginTag("head");
108    generator.beginTag("title");
109    generator.text(text);
110    generator.endTag();
111    generator.endTag();
112    generator.endTag();
113
114    String html = writer.toString();
115    assertThat(html, containsString(text));
116  }
117
118  @Test
119  public void textIsWrittenOnTheSameLineAsOpenTag() {
120    String text = "This is some text";
121
122    StringWriter writer = new StringWriter();
123    HtmlGenerator generator = new HtmlGenerator(writer);
124    generator.beginTag("html");
125    generator.beginTag("head");
126    generator.beginTag("title");
127    generator.text(text);
128    generator.endTag();
129    generator.endTag();
130    generator.endTag();
131
132    String html = writer.toString();
133    assertThat(html, containsString("<title>" + text + "</title>"));
134  }
135
136}