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}