summaryrefslogtreecommitdiff
path: root/tests/styles/parser/html_path_parser_tests.py
blob: 1e34ea1e05f6a13257b1485d3c794f80f3409018 (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
from nose.tools import istest, assert_equal

from mammoth import html_paths
from mammoth.styles.parser.html_path_parser import parse_html_path
from mammoth.styles.parser.tokeniser import tokenise
from mammoth.styles.parser.token_iterator import TokenIterator


@istest
def can_read_empty_path():
    assert_equal(
        html_paths.empty,
        read_html_path("")
    )

@istest
def can_read_single_element():
    assert_equal(
        html_paths.path([html_paths.element(["p"])]),
        read_html_path("p")
    )


@istest
def can_read_choice_of_two_elements():
    assert_equal(
        html_paths.path([html_paths.element(["ul", "ol"])]),
        read_html_path("ul|ol")
    )


@istest
def can_read_choice_of_three_elements():
    assert_equal(
        html_paths.path([html_paths.element(["ul", "ol", "p"])]),
        read_html_path("ul|ol|p")
    )


@istest
def can_read_nested_elements():
    assert_equal(
        html_paths.path([html_paths.element(["ul"]), html_paths.element(["li"])]),
        read_html_path("ul > li")
    )


@istest
def can_read_class_on_element():
    assert_equal(
        html_paths.path([html_paths.element(["p"], class_names=["tip"])]),
        read_html_path("p.tip")
    )


@istest
def can_read_multiple_classes_on_element():
    assert_equal(
        html_paths.path([html_paths.element(["p"], class_names=["tip", "help"])]),
        read_html_path("p.tip.help")
    )


@istest
def can_read_when_element_must_be_fresh():
    assert_equal(
        html_paths.path([html_paths.element(["p"], fresh=True)]),
        read_html_path("p:fresh")
    )


@istest
def can_read_separator_for_elements():
    assert_equal(
        html_paths.path([html_paths.element(["p"], separator="x")]),
        read_html_path("p:separator('x')")
    )


@istest
def can_read_ignore_element():
    assert_equal(
        html_paths.ignore,
        read_html_path("!")
    )

def read_html_path(string):
    return parse_html_path(TokenIterator(tokenise(string)))