summaryrefslogtreecommitdiff
path: root/tests/html/collapse_tests.py
blob: 5dc7e6c9ed6822545051a41bd2133810d092c4ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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")
        ]))


@istest
def when_separator_is_present_then_separator_is_prepended_to_collapsed_element():
    assert_equal(
        [
            html.element("pre", collapsible=False, children=[
                html.text("Hello"),
                html.text("\n"),
                html.text(" the"),
                html.text("re")
            ])
        ],
        html.collapse([
            html.element("pre", collapsible=False, children=[html.text("Hello")]),
            html.element("pre", collapsible=True, separator="\n", children=[html.text(" the"), html.text("re")]),
        ]),
    )