File: test_readtime.py

package info (click to toggle)
python-readtime 3.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 172 kB
  • sloc: python: 246; makefile: 20; sh: 5
file content (102 lines) | stat: -rw-r--r-- 3,898 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import unittest

import readtime
from readtime.utils import DEFAULT_WPM


class BaseTestCase(unittest.TestCase):

    def test_transitions(self):
        word = 'word '
        for x in range(10):

            # test the maximum num words for x read time
            text = word * 265 * x
            result = readtime.of_text(text)
            self.assertEqual(result.seconds, x * 60 if x > 0 else 1)
            self.assertEqual(result.text, f'{x if x > 0 else 1} min')
            self.assertEqual(str(result), f'{x if x > 0 else 1} min read')

            # test the maximum + 1 num words, and make sure read time is x + 1
            text += 'word'
            result = readtime.of_text(text)
            self.assertEqual(result.seconds, x * 60 + 1)
            self.assertEqual(result.text, f'{x + 1} min')
            self.assertEqual(str(result), f'{x + 1} min read')

    def test_plain_text(self):
        inp = open('tests/samples/plain_text.txt').read()
        result = readtime.of_text(inp)
        self.assertEqual(result.seconds, 154)
        self.assertEqual(type(result.seconds), int)
        self.assertEqual(result.text, '3 min')
        self.assertEqual(str(result), '3 min read')

    def test_plain_text_empty(self):
        result = readtime.of_text('')
        self.assertEqual(result.seconds, 1)
        self.assertEqual(result.text, '1 min')
        self.assertEqual(str(result), '1 min read')

    def test_plain_text_null(self):
        result = readtime.of_text(None)
        self.assertEqual(result.seconds, 0)
        self.assertEqual(result.text, '1 min')
        self.assertEqual(str(result), '1 min read')

    def test_markdown(self):
        inp = open('tests/samples/markdown.md').read()
        result = readtime.of_markdown(inp)
        self.assertEqual(result.seconds, 236)
        self.assertEqual(result.text, '4 min')
        self.assertEqual(str(result), '4 min read')

    def test_html(self):
        inp = open('tests/samples/html.html').read()
        result = readtime.of_html(inp)
        self.assertEqual(result.seconds, 236)
        self.assertEqual(result.text, '4 min')
        self.assertEqual(str(result), '4 min read')

    def test_plain_text_unicode(self):
        result = readtime.of_text('Some simple text')
        self.assertEqual(str(result), '1 min read')

    def test_unsupported_format(self):
        with self.assertRaises(Exception) as e:
            readtime.utils.read_time('Some simple text', format='foo')
        self.assertEqual(str(e.exception), 'Unsupported format: foo')

    def test_invalid_format(self):
        with self.assertRaises(Exception) as e:
            readtime.utils.read_time('Some simple text', format=123)
        self.assertEqual(str(e.exception), 'Unsupported format: 123')

    def test_can_add(self):
        inp = open('tests/samples/plain_text.txt').read()
        result1 = readtime.of_text(inp)
        self.assertEqual(result1.seconds, 154)

        inp = open('tests/samples/markdown.md').read()
        result2 = readtime.of_markdown(inp)
        self.assertEqual(result2.seconds, 236)

        result = (result1 + result2)
        self.assertEqual(result.seconds, 154 + 236)
        self.assertEqual(type(result.seconds), int)
        self.assertEqual(result.text, '7 min')
        self.assertEqual(str(result), '7 min read')

    def test_custom_wpm(self):
        text = 'some test content ' * 100
        result = readtime.of_text(text)
        self.assertEqual(result.wpm, DEFAULT_WPM)
        self.assertEqual(result.seconds, 68)
        self.assertEqual(result.text, '2 min')
        wpm = 50
        result = readtime.of_text(text, wpm=wpm)
        self.assertEqual(result.wpm, wpm)
        self.assertEqual(result.seconds, 360)
        self.assertEqual(type(result.seconds), int)
        self.assertEqual(result.text, '6 min')
        self.assertEqual(str(result), '6 min read')