]> git.scottworley.com Git - paperdoorknob/blame_incremental - paperdoorknob_test.py
Bundle the things needed for a run together into a Spec
[paperdoorknob] / paperdoorknob_test.py
... / ...
CommitLineData
1# paperdoorknob: Print glowfic
2#
3# This program is free software: you can redistribute it and/or modify it
4# under the terms of the GNU General Public License as published by the
5# Free Software Foundation, version 3.
6
7
8import unittest
9import io
10import subprocess
11
12import paperdoorknob
13
14from testing.fakeserver import FakeGlowficServer
15from fetch import DirectFetcher
16from spec import Spec
17from texify import DirectTexifier, PandocTexifier, VerifyingTexifier
18
19TIMEOUT = 8
20
21
22class TestPaperDoorknob(unittest.TestCase):
23 def setUp(self) -> None:
24 self._server = self.enterContext(FakeGlowficServer())
25 self._port = self._server.port()
26
27 def testReplies(self) -> None:
28 with DirectFetcher(TIMEOUT) as f:
29 replies = paperdoorknob.replies(
30 paperdoorknob.clean(
31 paperdoorknob.parse(
32 f.fetch(f"http://localhost:{self._port}"))))
33 self.assertEqual([r.text.strip() for r in replies],
34 ["This is glowfic", "You sure?", "Pretty sure."])
35
36 def testProcess(self) -> None:
37 with DirectFetcher(TIMEOUT) as f:
38 buf = io.BytesIO()
39 spec = Spec(
40 f"http://localhost:{self._port}",
41 f,
42 PandocTexifier('pandoc'),
43 buf)
44 paperdoorknob.process(spec)
45 self.assertEqual(buf.getvalue(), b'''\\documentclass{article}
46\\begin{document}
47This is glowfic
48You \\emph{sure}?
49Pretty sure.
50\\end{document}
51''')
52
53 def testDirectTexifier(self) -> None:
54 texifier = VerifyingTexifier(
55 PandocTexifier('pandoc'), DirectTexifier())
56 with DirectFetcher(TIMEOUT) as f:
57 buf = io.BytesIO()
58 spec = Spec(f"http://localhost:{self._port}", f, texifier, buf)
59 paperdoorknob.process(spec)
60
61 def testPDF(self) -> None:
62 with DirectFetcher(TIMEOUT) as f:
63 with open("test.tex", 'wb') as out:
64 spec = Spec(
65 f"http://localhost:{self._port}",
66 f,
67 PandocTexifier('pandoc'),
68 out)
69 paperdoorknob.process(spec)
70 subprocess.run(['pdflatex', 'test.tex'],
71 stdin=subprocess.DEVNULL, check=True)
72
73
74if __name__ == '__main__':
75 unittest.main()