class Thread:
- def __init__(self, thing: BeautifulSoup | Spec) -> None:
- if isinstance(thing, Spec):
- spec = thing
- spec.log('Fetching HTML...\r')
- html = spec.fetcher.fetch(flatURL(spec.url))
- spec.log('Parsing HTML...\r')
- self._dom = BeautifulSoup(spec.htmlfilter(html), 'html.parser')
- else:
- self._dom = thing
+ def __init__(self, spec: Spec) -> None:
+ spec.log('Fetching HTML...\r')
+ html = spec.fetcher.fetch(flatURL(spec.url))
+ spec.log('Parsing HTML...\r')
+ self._dom = BeautifulSoup(spec.htmlfilter(html), 'html.parser')
def title(self) -> str | None:
span = self._dom.findChild("span", id="post-title")
# Free Software Foundation, version 3.
+from sys import stderr
import unittest
-from bs4 import BeautifulSoup
-
+from fetch import FakeFetcher
from images import FakeImageStore
from glowfic import makeChunk, Thread
+from spec import Spec
from texify import PandocTexifier
+def spec_for_testing(html: bytes) -> Spec:
+ return Spec('test',
+ FakeFetcher({'test?view=flat': html}),
+ FakeImageStore(),
+ lambda x: x,
+ lambda x: None,
+ PandocTexifier('pandoc'),
+ lambda x: x,
+ 20,
+ b'',
+ None,
+ stderr.buffer,
+ lambda x: None)
+
+
class TestSplit(unittest.TestCase):
def testSplit1(self) -> None:
- t = Thread(BeautifulSoup(b'''
+ t = Thread(spec_for_testing(b'''
<html><body><div class="post-container post-post">
The "post"
- </div></body></html>''', 'html.parser'))
+ </div></body></html>'''))
self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()],
[['The "post"']])
def testSplit2(self) -> None:
- t = Thread(BeautifulSoup(b'''
+ t = Thread(spec_for_testing(b'''
<html><body>
<div class="post-container post-post">The "post"</div>
<div class="flat-post-replies">
<div class="post-container post-reply">The "reply"</div>
</div>
- </body></html>''', 'html.parser'))
+ </body></html>'''))
self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()],
[['The "post"'], ['The "reply"']])
def testSplit3(self) -> None:
- t = Thread(BeautifulSoup(b'''
+ t = Thread(spec_for_testing(b'''
<html><body>
<div class="post-container post-post">The "post"</div>
<div class="flat-post-replies">
<div class="post-container post-reply">1st reply</div>
<div class="post-container post-reply">2nd reply</div>
</div>
- </body></html>''', 'html.parser'))
+ </body></html>'''))
self.assertEqual([list(t.stripped_strings) for t in t.chunkDOMs()],
[['The "post"'], ['1st reply'], ['2nd reply']])
def testEmptyContent(self) -> None:
with open('testdata/empty-content.html', 'rb') as f:
- t = Thread(BeautifulSoup(f, 'html.parser'))
+ t = Thread(spec_for_testing(f.read((9999))))
c = makeChunk(next(iter(t.chunkDOMs())), FakeImageStore())
self.assertEqual(
c.icon,
class TestThread(unittest.TestCase):
def testTitle(self) -> None:
- t = Thread(BeautifulSoup(b'''
+ t = Thread(spec_for_testing(b'''
<html><body>
<div class="content-header">
<span id="post-title">
</span>
</div>
<div class="post-container post-post">The "post"</div>
- </body></html>''', 'html.parser'))
+ </body></html>'''))
self.assertEqual(t.title(), 'Teh Story!')