]> git.scottworley.com Git - paperdoorknob/blobdiff - glowfic_test.py
Handle Unicode characters ≈ and ◁
[paperdoorknob] / glowfic_test.py
index 898aafba43c2c25a2b7e7f28c966d7e1ae5e6a0f..d3fb2ddb9d627720dff02c86a01d099ae19dc985 100644 (file)
@@ -4,10 +4,13 @@
 # under the terms of the GNU General Public License as published by the
 # Free Software Foundation, version 3.
 
 # 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 sys import stderr
 import unittest
 
+from typing import Optional
+
 from fetch import FakeFetcher
 from images import FakeImageStore
 from glowfic import makeChunk, Thread
 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
 
 
 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}),
     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,
                 20,
                 b'',
                 None,
-                stderr.buffer,
+                stderr.buffer if outbuf is None else outbuf,
                 lambda x: None)
 
 
                 lambda x: None)
 
 
@@ -143,5 +146,55 @@ class TestThread(unittest.TestCase):
         self.assertEqual(t.next_thread(), 'https://elsewhere/posts/4567')
 
 
         self.assertEqual(t.next_thread(), 'https://elsewhere/posts/4567')
 
 
+class TestEmit(unittest.TestCase):
+
+    def testEmit(self) -> None:
+        buf = BytesIO()
+        Thread(spec_for_testing(b'''
+            <html><body>
+              <div class="post-container post-post">
+                <div class="post-content">A</div>
+              </div>
+              <div class="flat-post-replies">
+                <div class="post-container post-reply">
+                  <div class="post-content">B</div>
+                </div>
+              </div>
+            </body></html>''', 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'''<html><body>
+              <div class="post-navheader">
+                <a class="view-button-link" href="/page2"><div class="view-button">Next Post &raquo;</div></a>
+              </div></body></html>''',
+            'https://fake/test?view=flat': b'''<html><body>
+              <div class="post-container post-post"><div class="post-content">A</div></div>
+              <div class="flat-post-replies">
+                <div class="post-container post-reply"><div class="post-content">B</div></div>
+              </div>
+            </body></html>''',
+            'https://fake/page2': b'''<html><body></body></html>''',
+            'https://fake/page2?view=flat': b'''<html><body>
+              <div class="post-container post-post"><div class="post-content">C</div></div>
+              <div class="flat-post-replies">
+                <div class="post-container post-reply"><div class="post-content">D</div></div>
+                <div class="post-container post-reply"><div class="post-content">E</div></div>
+              </div>
+            </body></html>''',
+        }))
+        Thread(spec).emit()
+        self.assertEqual(buf.getvalue(), rb'''\glowhead{}{}{}{}A
+\glowhead{}{}{}{}B
+\glowhead{}{}{}{}C
+\glowhead{}{}{}{}D
+\glowhead{}{}{}{}E
+''')
+
+
 if __name__ == '__main__':
     unittest.main()
 if __name__ == '__main__':
     unittest.main()