aboutsummaryrefslogtreecommitdiff
path: root/tests/html/collapse_tests.py
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-14 18:56:42 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-14 20:09:13 +0000
commitb34f7280c0754f9fc88725358e22ac46d9a2a598 (patch)
tree350a5563a0cd06bb8c97e932f7f275edc4106705 /tests/html/collapse_tests.py
parent8f3486e5fc69f2402476b830d21b271a93ed0046 (diff)
Add collapsing of HTML nodes
Diffstat (limited to 'tests/html/collapse_tests.py')
-rw-r--r--tests/html/collapse_tests.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/tests/html/collapse_tests.py b/tests/html/collapse_tests.py
new file mode 100644
index 0000000..52cecd2
--- /dev/null
+++ b/tests/html/collapse_tests.py
@@ -0,0 +1,107 @@
+from nose.tools import istest, assert_equal
+
+from mammoth import html
+
+
+@istest
+def collapsing_does_nothing_to_single_text_node():
+ assert_equal(
+ html.collapse([html.text("Bluebells")]),
+ [html.text("Bluebells")])
+
+
+@istest
+def consecutive_fresh_elements_are_not_collapsed():
+ assert_equal(
+ html.collapse([html.element("p"), html.element("p")]),
+ [html.element("p"), html.element("p")])
+
+
+@istest
+def consecutive_collapsible_elements_are_collapsed_if_they_have_the_same_tag_and_attributes():
+ assert_equal(
+ [html.collapsible_element("p", {}, [html.text("One"), html.text("Two")])],
+ html.collapse([
+ html.collapsible_element("p", {}, [html.text("One")]),
+ html.collapsible_element("p", {}, [html.text("Two")])
+ ]))
+
+
+@istest
+def elements_with_different_tag_names_are_not_collapsed():
+ assert_equal(
+ [
+ html.collapsible_element("p", {}, [html.text("One")]),
+ html.collapsible_element("div", {}, [html.text("Two")])
+ ],
+
+ html.collapse([
+ html.collapsible_element("p", {}, [html.text("One")]),
+ html.collapsible_element("div", {}, [html.text("Two")])
+ ]))
+
+
+@istest
+def elements_with_different_attributes_are_not_collapsed():
+ assert_equal(
+ [
+ html.collapsible_element("p", {"id": "a"}, [html.text("One")]),
+ html.collapsible_element("p", {}, [html.text("Two")])
+ ],
+
+ html.collapse([
+ html.collapsible_element("p", {"id": "a"}, [html.text("One")]),
+ html.collapsible_element("p", {}, [html.text("Two")])
+ ]))
+
+
+@istest
+def children_of_collapsed_element_can_collapse_with_children_of_previous_element():
+ assert_equal(
+ [
+ html.collapsible_element("blockquote", {}, [
+ html.collapsible_element("p", {}, [
+ html.text("One"),
+ html.text("Two")
+ ])
+ ]),
+ ],
+
+ html.collapse([
+ html.collapsible_element("blockquote", {}, [
+ html.collapsible_element("p", {}, [html.text("One")])
+ ]),
+ html.collapsible_element("blockquote", {}, [
+ html.collapsible_element("p", {}, [html.text("Two")])
+ ]),
+ ]))
+
+
+@istest
+def collapsible_element_can_collapse_into_previous_fresh_element():
+ assert_equal(
+ [html.element("p", {}, [html.text("One"), html.text("Two")])],
+ html.collapse([
+ html.element("p", {}, [html.text("One")]),
+ html.collapsible_element("p", {}, [html.text("Two")])
+ ]))
+
+
+@istest
+def element_with_choice_of_tag_names_can_collapse_into_previous_element_if_it_has_one_of_those_tag_names_as_its_main_tag_name():
+ assert_equal(
+ [html.collapsible_element(["ol"])],
+ html.collapse([
+ html.collapsible_element("ol"),
+ html.collapsible_element(["ul", "ol"])
+ ]))
+
+ assert_equal(
+ [
+ html.collapsible_element(["ul", "ol"]),
+ html.collapsible_element("ol")
+ ],
+ html.collapse([
+ html.collapsible_element(["ul", "ol"]),
+ html.collapsible_element("ol")
+ ]))