1 # paperdoorknob: Print glowfic
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.
8 from abc
import ABC
, abstractmethod
16 from testing
.fakeserver
import FakeGlowficServer
17 from domfilter
import ApplyDOMFilters
18 from fetch
import DirectFetcher
, FakeFetcher
, Fetcher
19 from glowfic
import ContentOnlyLayout
, BelowIconLayout
20 from images
import FakeImageStore
22 from texify
import DirectTexifier
, PandocTexifier
, VerifyingTexifier
27 class BaseTestProcess(ABC
):
31 raise NotImplementedError()
34 def fetcher(self
) -> Fetcher
:
35 raise NotImplementedError()
37 def testProcess(self
) -> None:
44 lambda x
: ApplyDOMFilters('NoEdit,NoFooter', x
),
45 ContentOnlyLayout(PandocTexifier('pandoc')),
48 paperdoorknob
.process(spec
)
49 assert re
.match(br
'''\\documentclass{article}
50 (\\usepackage{[a-z]+}\n)+\\usepackage\[margin=20mm\]{geometry}
61 def testDirectTexifier(self
) -> None:
62 texifier
= VerifyingTexifier(
63 PandocTexifier('pandoc'), DirectTexifier())
70 lambda x
: ApplyDOMFilters('NoEdit,NoFooter', x
),
71 ContentOnlyLayout(texifier
),
74 paperdoorknob
.process(spec
)
76 def testPDF(self
) -> None:
77 with open("test.tex", 'wb') as out
:
83 lambda x
: ApplyDOMFilters('NoEdit,NoFooter', x
),
84 BelowIconLayout(PandocTexifier('pandoc'), 20),
87 paperdoorknob
.process(spec
)
88 subprocess
.run(['pdflatex', 'test.tex'],
89 stdin
=subprocess
.DEVNULL
, check
=True)
92 class TestProcessFromWebserver(BaseTestProcess
, unittest
.TestCase
):
94 def setUp(self
) -> None:
95 self
._fetcher
= self
.enterContext(DirectFetcher(TIMEOUT
))
96 self
._server
= self
.enterContext(FakeGlowficServer())
97 self
._port
= self
._server
.port()
100 return f
"http://localhost:{self._port}"
102 def fetcher(self
) -> Fetcher
:
106 class TestProcessFromFakeFetcher(BaseTestProcess
, unittest
.TestCase
):
108 def url(self
) -> str:
111 def fetcher(self
) -> Fetcher
:
112 with open('testdata/this-is-glowfic.html', 'rb') as f
:
113 return FakeFetcher({'fic?view=flat': f.read(9999)}
)
116 if __name__
== '__main__':