aboutsummaryrefslogtreecommitdiff
path: root/tests/styles/parser/document_matcher_parser_tests.py
blob: bec2368d690b32370551c738420c2948f5f2d236 (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
from nose.tools import istest, assert_equal

from mammoth import documents, document_matchers
from mammoth.styles.parser.document_matcher_parser import parse_document_matcher
from mammoth.styles.parser.errors import LineParseError
from mammoth.styles.parser.tokeniser import tokenise
from mammoth.styles.parser.token_iterator import TokenIterator
from ...testing import assert_raises


@istest
def unrecognised_document_element_raises_error():
    error = assert_raises(LineParseError, lambda: read_document_matcher("x"))
    assert_equal("Unrecognised document element: x", str(error))


@istest
def reads_plain_paragraph():
    assert_equal(
        document_matchers.paragraph(),
        read_document_matcher("p")
    )


@istest
def reads_paragraph_with_style_id():
    assert_equal(
        document_matchers.paragraph(style_id="Heading1"),
        read_document_matcher("p.Heading1")
    )


@istest
def reads_paragraph_with_exact_style_name():
    assert_equal(
        document_matchers.paragraph(style_name=document_matchers.equal_to("Heading 1")),
        read_document_matcher("p[style-name='Heading 1']")
    )


@istest
def reads_paragraph_ordered_list():
    assert_equal(
        document_matchers.paragraph(numbering=documents.numbering_level(1, is_ordered=True)),
        read_document_matcher("p:ordered-list(2)")
    )


@istest
def reads_paragraph_unordered_list():
    assert_equal(
        document_matchers.paragraph(numbering=documents.numbering_level(1, is_ordered=False)),
        read_document_matcher("p:unordered-list(2)")
    )


@istest
def unrecognised_list_type_raises_error():
    error = assert_raises(LineParseError, lambda: read_document_matcher("p:blah"))
    assert_equal("Unrecognised list type: blah", str(error))


@istest
def reads_plain_run():
    assert_equal(
        document_matchers.run(),
        read_document_matcher("r")
    )


@istest
def reads_run_with_style_id():
    assert_equal(
        document_matchers.run(style_id="Emphasis"),
        read_document_matcher("r.Emphasis")
    )


@istest
def reads_run_with_style_name():
    assert_equal(
        document_matchers.run(style_name=document_matchers.equal_to("Emphasis")),
        read_document_matcher("r[style-name='Emphasis']")
    )

@istest
def reads_bold():
    assert_equal(
        document_matchers.bold,
        read_document_matcher("b")
    )

@istest
def reads_italic():
    assert_equal(
        document_matchers.italic,
        read_document_matcher("i")
    )

@istest
def reads_underline():
    assert_equal(
        document_matchers.underline,
        read_document_matcher("u")
    )

@istest
def reads_strikethrough():
    assert_equal(
        document_matchers.strikethrough,
        read_document_matcher("strike")
    )

@istest
def reads_comment_reference():
    assert_equal(
        document_matchers.comment_reference,
        read_document_matcher("comment-reference")
    )


def read_document_matcher(string):
    return parse_document_matcher(TokenIterator(tokenise(string)))