X-Git-Url: http://git.scottworley.com/paperdoorknob/blobdiff_plain/075f2f08f0f67d449e04e64f5a85742e52e50d30..refs/heads/main:/glowfic_test.py?ds=inline diff --git a/glowfic_test.py b/glowfic_test.py index 22eea25..d3fb2dd 100644 --- a/glowfic_test.py +++ b/glowfic_test.py @@ -4,10 +4,13 @@ # under the terms of the GNU General Public License as published by the # Free Software Foundation, version 3. - +import dataclasses +from io import BytesIO from sys import stderr import unittest +from typing import Optional + from fetch import FakeFetcher from images import FakeImageStore from glowfic import makeChunk, Thread @@ -15,7 +18,7 @@ from spec import Spec from texify import PandocTexifier -def spec_for_testing(html: bytes) -> Spec: +def spec_for_testing(html: bytes, outbuf: Optional[BytesIO] = None) -> Spec: return Spec('https://fake/test', FakeFetcher({'https://fake/test': html, 'https://fake/test?view=flat': html}), @@ -27,7 +30,7 @@ def spec_for_testing(html: bytes) -> Spec: 20, b'', None, - stderr.buffer, + stderr.buffer if outbuf is None else outbuf, lambda x: None) @@ -88,6 +91,21 @@ class TestMakeChunk(unittest.TestCase): self.assertEqual( PandocTexifier("pandoc").texify(c.character), b'{Keltham}\n') + def testMinimal(self) -> None: + t = Thread(spec_for_testing(b''' + +
+
Just content
+
+ ''')) + c = makeChunk(next(iter(t.chunkDOMs())), FakeImageStore()) + self.assertIsNone(c.icon) + self.assertIsNone(c.character) + self.assertIsNone(c.screen_name) + self.assertIsNone(c.author) + self.assertEqual(str(c.content), + '
Just content
') + class TestThread(unittest.TestCase): @@ -103,7 +121,7 @@ class TestThread(unittest.TestCase): ''')) self.assertEqual(t.title(), 'Teh Story!') - def testNextThread(self) -> None: + def testNextThreadRelative(self) -> None: t = Thread(spec_for_testing(b'''
@@ -113,7 +131,69 @@ class TestThread(unittest.TestCase):
The "post"
''')) - self.assertEqual(t.next_thread(), '/posts/4567') + self.assertEqual(t.next_thread(), 'https://fake/posts/4567') + + def testNextThreadAbsolute(self) -> None: + t = Thread(spec_for_testing(b''' + +
+
Next Post »
+
« Previous Post
+
+
+
The "post"
+ ''')) + self.assertEqual(t.next_thread(), 'https://elsewhere/posts/4567') + + +class TestEmit(unittest.TestCase): + + def testEmit(self) -> None: + buf = BytesIO() + Thread(spec_for_testing(b''' + +
+
A
+
+
+
+
B
+
+
+ ''', buf)).emit() + self.assertEqual(buf.getvalue(), rb'''\glowhead{}{}{}{}A +\glowhead{}{}{}{}B +''') + + def testEmitTwoThreads(self) -> None: + buf = BytesIO() + spec = dataclasses.replace(spec_for_testing(b'', buf), fetcher=FakeFetcher({ + 'https://fake/test': b''' +
+
Next Post »
+
''', + 'https://fake/test?view=flat': b''' +
A
+
+
B
+
+ ''', + 'https://fake/page2': b'''''', + 'https://fake/page2?view=flat': b''' +
C
+
+
D
+
E
+
+ ''', + })) + Thread(spec).emit() + self.assertEqual(buf.getvalue(), rb'''\glowhead{}{}{}{}A +\glowhead{}{}{}{}B +\glowhead{}{}{}{}C +\glowhead{}{}{}{}D +\glowhead{}{}{}{}E +''') if __name__ == '__main__':