aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mammoth/html_generation.py19
-rw-r--r--tests/html_generation_tests.py22
2 files changed, 39 insertions, 2 deletions
diff --git a/mammoth/html_generation.py b/mammoth/html_generation.py
index a4d716e..563e2d6 100644
--- a/mammoth/html_generation.py
+++ b/mammoth/html_generation.py
@@ -49,6 +49,9 @@ class HtmlGenerator(object):
class _Element(object):
def __init__(self, name, attributes):
+ if attributes is None:
+ attributes = {}
+
self.name = name
self.attributes = attributes
self.written = False
@@ -76,13 +79,25 @@ def satisfy_html_path(generator, path):
for element in path.elements[first_unsatisfied_index:]:
attributes = {}
if element.class_names:
- attributes["class"] = " ".join(element.class_names)
+ attributes["class"] = _generate_class_attribute(element)
generator.start(element.names[0], attributes=attributes)
def _find_first_unsatisfied_index(generator, path):
for index, (generated_element, path_element) in enumerate(zip(generator._stack, path.elements)):
- if generated_element.name not in path_element.names or path_element.fresh:
+ if not _is_element_match(generated_element, path_element):
return index
return len(generator._stack)
+
+
+def _is_element_match(generated_element, path_element):
+ return (
+ not path_element.fresh and
+ generated_element.name in path_element.names and
+ generated_element.attributes.get("class", "") == _generate_class_attribute(path_element)
+ )
+
+
+def _generate_class_attribute(path_element):
+ return " ".join(path_element.class_names)
diff --git a/tests/html_generation_tests.py b/tests/html_generation_tests.py
index c39f886..25b4803 100644
--- a/tests/html_generation_tests.py
+++ b/tests/html_generation_tests.py
@@ -147,3 +147,25 @@ class SatisfyPathTests(object):
satisfy_html_path(generator, path)
generator.text("Hello")
assert_equal('<p class="tip">Hello', generator.html_string())
+
+
+ @istest
+ def elements_do_not_match_if_class_names_do_not_match(self):
+ generator = HtmlGenerator()
+ generator.start("p", {"class": "help"})
+ generator.text("Help")
+ path = html_paths.path([html_paths.element(["p"], class_names=["tip"])])
+ satisfy_html_path(generator, path)
+ generator.text("Tip")
+ assert_equal('<p class="help">Help</p><p class="tip">Tip', generator.html_string())
+
+
+ @istest
+ def class_names_match_if_they_are_the_same(self):
+ generator = HtmlGenerator()
+ generator.start("p", {"class": "tip"})
+ generator.text("Help")
+ path = html_paths.path([html_paths.element(["p"], class_names=["tip"])])
+ satisfy_html_path(generator, path)
+ generator.text("Tip")
+ assert_equal('<p class="tip">HelpTip', generator.html_string())