File: test_site.py

package info (click to toggle)
mkdocs-macros-plugin 1.4.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 336 kB
  • sloc: python: 1,235; makefile: 4
file content (123 lines) | stat: -rw-r--r-- 3,791 bytes parent folder | download
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
"""
Testing the project

(C) Laurent Franceschetti 2024
"""


import pytest
import re

from mkdocs_test.common import find_after
from test.fixture import MacrosDocProject

CURRENT_project = '.'



def test_pages():
    project = MacrosDocProject(CURRENT_project)
    project.build()
    # did not fail
    assert not project.build_result.returncode

    # ----------------
    # Check that the chatter works
    # ----------------
    entries = project.find_entries(source='main')
    assert len(entries) > 0
    # the post-built worked:
    assert project.find_entry(source='main', title='post_build')

    # ----------------
    # First page
    # ----------------
    page = project.get_page('index')
    assert page.is_markdown_rendered()

    VARIABLE_NAME = 'unit_price'

    # it is defined in the config file (extra)
    assert VARIABLE_NAME in project.config.extra
    price = project.config.extra.unit_price


    # check the page meta
    # those meta are not in the config file
    meta = page.meta
    assert 'user' in meta
    assert 'bottles' in meta
    assert 'announcement' in meta

    assert meta.user == 'Joe'
    assert page.find_text(meta.user, header='Installed', header_level=4)
    assert page.find_text(meta.announcement, header='Accessing meta')
    assert page.find_text(meta.bottles.lemonade, header='Dot notation')
    assert not page.find_text(meta.user * 2, header='Macro') # negative test

    assert 'bottles' not in project.config.extra
    assert 'bottles' not in project.variables

    # check that the `greeting` variable is rendered:
    assert VARIABLE_NAME in project.variables
    assert f"{price} euros" in page.markdown

    assert f"{project.macros_plugin.include_dir}" in page.markdown

    # check that both on_pre/post_page_macro() worked
    assert "Added Footer (Pre-macro)" in page.markdown, f"Not in {page.markdown}"
    assert page.find_text(r'is \d{4}-\d{2}-\d{2}', header='Pre-macro')

    assert "Added Footer (Post-macro)" in page.markdown
    assert find_after(page.plain_text, 'name of the page', 'home')
    assert page.find_text('Home', header='Post-macro')
    # ----------------
    # Environment page
    # ----------------
    page = project.get_page('environment')

    # read a few things that are in the tables
    assert page.find_text('unit_price = 50', header='General list')
    # there are two headers containing 'Macros':
    assert page.find_text('say_hello', header='Macros$') 


    # test the `include_file()` method (used for the mkdocs.yaml file)
    HEADER = r"^mkdocs.*portion"
    assert page.find_text('site_name:', header=HEADER)
    assert page.find_text('name: material', header=HEADER)
    assert not page.find_text('foobar 417', header=HEADER) # negative control

    # ----------------
    # Literal page
    # ----------------
    page = project.get_page('literal')
    # instruction not to render:
    assert page.meta.render_macros == False

    assert page.is_markdown_rendered() == False, f"Target: {page.markdown}, \nSource:{page.source_page.markdown}"

    # Latex is not interpreted:
    latex = re.escape(r"\begin{tabular}{|ccc|}")
    assert page.find_text(latex, header='Offending Latex')

    # Footer is processed (but not rendered)
    assert page.find_text(r'now()', header='Pre-macro')
    assert page.find_text('Not interpreted', header='Post-macro')


def test_strict():
    "This project must fail"
    project = MacrosDocProject(CURRENT_project)

    # it must fail with the --strict option,
    # because the second page contains an error
    project.build(strict=True)
    assert not project.build_result.returncode
    warning = project.find_entry("Macro Rendering", 
                              severity='warning')
    assert not warning, "Warning found, shouldn't!"