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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
|
import os
import unittest
import warnings
from iotas.html_generator_configuration import HtmlGeneratorConfiguration
from iotas.markdown_helpers import parse_to_tokens
from iotas.note import Note
from iotas.template_html_generator import TemplateHtmlGenerator, TemplateDetails
warnings.filterwarnings("ignore", "version")
class _TestHtmlGeneratorConfig(HtmlGeneratorConfiguration):
tex_support = False
@property
def markdown_tex_support(self) -> bool:
"""Get whether markdown TeX rendering is supported.
:return: Markdown TeX supported
:rtype: bool
"""
return self.tex_support
@property
def line_length(self) -> int:
"""Get line length.
:return: Size in pixels
:rtype: int
"""
return 800
@property
def markdown_use_monospace_font(self) -> bool:
"""Get whether to use a monospace font for the markdown render.
:return: Using monospace font
:rtype: bool
"""
return False
@property
def use_monospace_font(self) -> bool:
"""Get whether to use a monospace font.
:return: Using monospace font
:rtype: bool
"""
return True
@property
def font_size(self) -> int:
"""Get font size.
:return: Size
:rtype: int
"""
return 14
@property
def high_contrast(self) -> bool:
"""Get whether high contrast output should be used for screen rendering.
:return: Whether visible
:rtype: bool
"""
return False
@property
def markdown_render_monospace_font_ratio(self) -> float:
"""Get the adjustment in size from proportional to fixed width font.
:return: Ratio
:rtype: float
"""
return 1.0
@property
def editor_header_bar_visible_for_window_state(self) -> bool:
"""Get whether the header bar is configured visible for the window maximised state."
:return: Whether visible
:rtype: bool
"""
return False
class Test(unittest.TestCase):
def test_generate(self) -> None:
note = Note(new_note=True)
note.content = "content"
note.id = 1
note.title = "Test Note Title"
generator = self.__reset()
parser, tokens = parse_to_tokens(note, exporting=False, tex_support=False)
html = generator.generate(
note,
tokens,
parser.renderer.render,
parser.options,
searching=False,
export_format=None,
)
self.assertTrue(note.content in html)
self.assertTrue(note.title in html)
self.assertFalse("katex" in html)
self.assertFalse("<style>" in html)
self.assertFalse("scrollTop = " in html)
self.assertTrue("/mock/data/path" in html)
generator = self.__reset(tex_support=True)
parser, tokens = parse_to_tokens(note, exporting=False, tex_support=True)
html = generator.generate(
note,
tokens,
parser.renderer.render,
parser.options,
searching=False,
export_format=None,
)
self.assertTrue("katex" in html)
generator = self.__reset()
parser, tokens = parse_to_tokens(note, exporting=False, tex_support=False)
html = generator.generate(
note,
tokens,
parser.renderer.render,
parser.options,
searching=False,
export_format=None,
scroll_position=100.0,
)
self.assertTrue("scrollTop = 100.0" in html)
note.content = ""
generator = self.__reset()
parser, tokens = parse_to_tokens(note, exporting=False, tex_support=False)
html = generator.generate(
note,
tokens,
parser.renderer.render,
parser.options,
searching=False,
export_format=None,
)
self.assertTrue('loading="lazy"' in html)
note.content = ""
generator = self.__reset()
parser, tokens = parse_to_tokens(note, exporting=False, tex_support=False)
html = generator.generate(
note,
tokens,
parser.renderer.render,
parser.options,
searching=False,
export_format=None,
)
self.assertTrue('src="image.png"' in html)
generator = self.__reset()
parser, tokens = parse_to_tokens(note, exporting=True, tex_support=False)
html = generator.generate(
note,
tokens,
parser.renderer.render,
parser.options,
searching=False,
export_format="html",
)
self.assertTrue('src="attachments/image.png"' in html)
generator = self.__reset()
parser, tokens = parse_to_tokens(note, exporting=True, tex_support=False)
html = generator.generate(
note,
tokens,
parser.renderer.render,
parser.options,
searching=False,
export_format="html",
)
self.assertFalse("scrollTop = " in html)
self.assertTrue("font-size: 14pt" in html)
self.assertTrue("max-width: 800px" in html)
self.assertTrue("padding-top: 47px" in html)
self.assertFalse("::selection {" in html)
self.assertFalse("/mock/data/path" in html)
self.assertFalse('loading="lazy"' in html)
def test_generate_user_stylesheet(self) -> None:
generator = self.__reset()
css = generator.generate_user_stylesheet(searching=False)
self.assertTrue("font-size: 14pt" in css)
self.assertTrue("max-width: 800px" in css)
self.assertTrue("padding-top: 47px" in css)
self.assertFalse("::selection {" in css)
css = generator.generate_user_stylesheet(searching=True)
self.assertTrue("::selection {" in css)
def test_update_font_family(self) -> None:
generator = self.__reset()
generator.update_font_family("unique")
css = generator.generate_user_stylesheet(searching=False)
self.assertTrue("font-family: unique" in css)
def __reset(self, tex_support=False) -> TemplateHtmlGenerator:
config = _TestHtmlGeneratorConfig()
config.tex_support = tex_support
data_path = "/mock/data/path"
header_bar_height = 47
return TemplateHtmlGenerator(config, data_path, header_bar_height, self.__template_loader)
def __template_loader(self) -> TemplateDetails:
file_dir = os.path.dirname(__file__)
templates_path = os.path.join(file_dir, os.pardir, "data", "render-template")
with open(os.path.join(templates_path, "template.html"), "r") as f:
html = f.read()
with open(os.path.join(templates_path, "binding.js"), "r") as f:
js = f.read()
with open(os.path.join(templates_path, "configurable.css"), "r") as f:
css = f.read()
with open(os.path.join(templates_path, "searching.css"), "r") as f:
search_css = f.read()
return TemplateDetails(html, js, css, search_css)
|