def test_text_renders_correctly_inside_tags(self): test_str = "Testing" self.assertEqual( HtmlTag([], test_str ).render(), f"<htmltag>{test_str}</htmltag>" ) self.assertEqual( Div([], test_str, test_str ).render(), f"<div>{test_str}{test_str}</div>" ) self.assertEqual( Div([], test_str, A(), test_str ).render(), f"<div>{test_str}<a></a>{test_str}</div>" )
def test_pretty_render(self): def build_html_text(nesting_level, current_level=1): if current_level>nesting_level: return html_text = '' html_text += " "*current_level + "<htmltag>" result = build_html_text(nesting_level, current_level+1) if result: html_text += "\n" + result html_text += "\n" + " "*current_level + "</htmltag>\n" else: html_text += "</htmltag>\n" html_text += " "*current_level + "<htmltag></htmltag>\n" html_text += " "*current_level + "<selfclosinghtmltag/>\n" html_text += " "*current_level + f"level {current_level}" return html_text root_element = Html() current_element = root_element for i in range(1,10): inner_div = HtmlTag() current_element.inner_html = [ inner_div, HtmlTag(), SelfClosingHtmlTag(), f"level {i}" ] self.assertEqual( f"<!DOCTYPE html>\n<html>\n{build_html_text(nesting_level=i)}\n</html>\n", root_element.render(pretty=True, doctype=True), ) current_element = inner_div
def setUp(self): self.not_self_closing_tags = filter(lambda tag: tag is not SelfClosingHtmlTag, HtmlTag.__subclasses__()) self.self_closing_tags = SelfClosingHtmlTag.__subclasses__()
def test_render_with_doctype_option(self): self.assertEqual("<!DOCTYPE html><htmltag></htmltag>", HtmlTag().render(doctype=True)) self.assertEqual("<!DOCTYPE html><selfclosinghtmltag/>", SelfClosingHtmlTag().render(doctype=True))
def test_raise_error_when_invalid_type_is_provided(self): with self.assertRaises(HtmlBuildError): HtmlTag(["invalid_attribute"]) with self.assertRaises(HtmlBuildError): HtmlTag([HtmlTag])
def test_html_tag_params_must_be_an_html_tag_or_str_instance(self): HtmlTag([], Div()) HtmlTag([], "Test") with self.assertRaises(HtmlBuildError): HtmlTag([], Div)
def test_render_style_attribute_from_named_params(self): self.assertEqual( HtmlTag([InlineStyle(custom_param1='test', custom_param2='test')]).render(), f"<htmltag style='custom-param1: test; custom-param2: test'></htmltag>" )
def test_render_data_attribute(self): self.assertEqual( HtmlTag([Data_("test-value", "Testing")]).render(), "<htmltag data-test-value='Testing'></htmltag>" )
def test_render_style_attribute_from_value_str(self): self.assertEqual( HtmlTag([InlineStyle("custom-param1: test; custom-param2: test")]).render(), f"<htmltag style='custom-param1: test; custom-param2: test'></htmltag>" )
def setUp(self): self.all_attributes = HtmlTagAttribute.__subclasses__() self.all_tags = HtmlTag.__subclasses__()
def test_element_types(self): tag: HtmlTag = HtmlTag() self.assertEquals(tag.times(2), [tag, tag])
def test_returned_list_length(self): self.assertEquals(len(HtmlTag().times(10)), 10)
def test_returns_list(self): self.assertIsInstance(HtmlTag().times(1), list)