# paperdoorknob: Print glowfic # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, version 3. import unittest import io import subprocess import paperdoorknob from testing.fakeserver import FakeGlowficServer from fetch import DirectFetcher from spec import Spec from texify import DirectTexifier, PandocTexifier, VerifyingTexifier TIMEOUT = 8 class TestPaperDoorknob(unittest.TestCase): def setUp(self) -> None: self._server = self.enterContext(FakeGlowficServer()) self._port = self._server.port() def testReplies(self) -> None: with DirectFetcher(TIMEOUT) as f: replies = paperdoorknob.replies( paperdoorknob.clean( paperdoorknob.parse( f.fetch(f"http://localhost:{self._port}")))) self.assertEqual([r.text.strip() for r in replies], ["This is glowfic", "You sure?", "Pretty sure."]) def testProcess(self) -> None: with DirectFetcher(TIMEOUT) as f: buf = io.BytesIO() spec = Spec( f"http://localhost:{self._port}", f, PandocTexifier('pandoc'), buf) paperdoorknob.process(spec) self.assertEqual(buf.getvalue(), b'''\\documentclass{article} \\begin{document} This is glowfic You \\emph{sure}? Pretty sure. \\end{document} ''') def testDirectTexifier(self) -> None: texifier = VerifyingTexifier( PandocTexifier('pandoc'), DirectTexifier()) with DirectFetcher(TIMEOUT) as f: buf = io.BytesIO() spec = Spec(f"http://localhost:{self._port}", f, texifier, buf) paperdoorknob.process(spec) def testPDF(self) -> None: with DirectFetcher(TIMEOUT) as f: with open("test.tex", 'wb') as out: spec = Spec( f"http://localhost:{self._port}", f, PandocTexifier('pandoc'), out) paperdoorknob.process(spec) subprocess.run(['pdflatex', 'test.tex'], stdin=subprocess.DEVNULL, check=True) if __name__ == '__main__': unittest.main()