aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/tests/QtCore/qiodevice_buffered_read_test.py
blob: ea735112a6ba9f79792a31db32db1ef7ab8a7f77 (plain)
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
# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

'''Test cases for buffered read methods of QIODevice'''

from PySide6.QtCore import QBuffer

import enum
import unittest


class TestQIODeviceBufferedRead(unittest.TestCase):
    class TestType(enum.Enum):
        Read = enum.auto()
        ReadLine = enum.auto()
        Peek = enum.auto()

    def setUp(self) -> None:
        self.buffer = QBuffer()
        self.text = "Tomato juice\nPotato salad\n"

        self.assertTrue(
            self.buffer.open(QBuffer.OpenModeFlag.ReadWrite), self.buffer.errorString())
        self.assertGreaterEqual(
            self.buffer.write(self.text.encode("utf-8")), 0, self.buffer.errorString())

        self.buffer.seek(0)

    def tearDown(self) -> None:
        self.buffer.close()

    def test_read(self) -> None:
        response1 = self.buffer.read(1024).data().decode("utf-8")
        self.assertEqual(response1, self.text)

        self.buffer.seek(0)
        response2 = bytearray(1024)
        bytes_read = self.buffer.read(response2, 1024)

        self.assertGreaterEqual(bytes_read, 0, self.buffer.errorString())
        self.assertEqual(response2[:bytes_read].decode("utf-8"), response1)

    def test_readLine(self) -> None:
        response1 = self.buffer.readLine(1024).data().decode("utf-8")
        # Only read until the first line (including the line break)
        self.assertEqual(response1, self.text.split("\n", 1)[0] + "\n")

        self.buffer.seek(0)
        response2 = bytearray(1024)
        bytes_read = self.buffer.readLine(response2, 1024)

        self.assertGreaterEqual(bytes_read, 0, self.buffer.errorString())
        self.assertEqual(response2[:bytes_read].decode("utf-8"), response1)

    def test_peek(self) -> None:
        response1 = self.buffer.peek(1024).data().decode("utf-8")
        self.assertEqual(response1, self.text)

        # Test that peek has no side effects
        response_again1 = self.buffer.read(1024).data().decode("utf-8")
        self.assertEqual(response_again1, response1)

        self.buffer.seek(0)
        response2 = bytearray(1024)
        bytes_read = self.buffer.peek(response2, 1024)

        self.assertGreaterEqual(bytes_read, 0, self.buffer.errorString())
        self.assertEqual(response2[:bytes_read].decode("utf-8"), response1)

        # Test that peek has no side effects
        response_again2 = bytearray(1024)
        bytes_read_again2 = self.buffer.read(response_again2, 1024)
        self.assertEqual(bytes_read, bytes_read_again2)
        self.assertEqual(response_again2, response2)


if __name__ == "__main__":
    unittest.main()