Files
SIA/test/read_entry_test.py
2025-04-17 18:32:44 +02:00

149 lines
5.1 KiB
Python

import unittest
from sia.web_io_buffer import WebIOBuffer
from sia.entry.read_entry import ReadEntry
class ReadEntryTest(unittest.TestCase):
def setUp(self):
"""Set up test cases with fixed id and IO buffer"""
self.test_id = "test-id-1234"
self.io_buffer = WebIOBuffer()
def test_initialization(self):
"""Test entry initialization"""
entry = ReadEntry(self.test_id, self.io_buffer)
self.assertEqual(entry.content, "")
self.assertEqual(entry.id, self.test_id)
self.assertFalse(entry.read)
def test_single_read(self):
"""Test reading content once"""
test_input = "test message"
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
self.assertEqual(entry.content, test_input)
self.assertEqual(self.io_buffer.buffer_length(), 0)
self.assertTrue(entry.read)
def test_multiple_updates(self):
"""Test that content is only read once even with multiple updates"""
test_input = "initial input"
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
initial_content = entry.content
self.io_buffer.append_stdin("additional input")
entry.update()
entry.update()
self.assertEqual(entry.content, initial_content)
self.assertTrue(entry.read)
def test_empty_input(self):
"""Test reading when no input is available"""
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
self.assertEqual(entry.content, "")
self.assertTrue(entry.read)
def test_special_characters(self):
"""Test reading content with special characters"""
test_input = "Special chars: \n\t\r\'\"\\"
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
self.assertEqual(entry.content, test_input)
self.assertTrue(entry.read)
def test_large_content(self):
"""Test reading large content"""
test_input = "x" * 10000
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
self.assertEqual(entry.content, test_input)
self.assertTrue(entry.read)
def test_generate_context_before_read(self):
"""Test XML context generation before reading"""
entry = ReadEntry(self.test_id, self.io_buffer)
element = entry.generate_context()
# Verify XML structure
self.assertEqual(element.tag, "read_stdin")
self.assertEqual(element.get("id"), self.test_id)
self.assertIsNone(element.text) # No content before read
def test_generate_context_after_read(self):
"""Test XML context generation after reading"""
test_input = "test message"
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
element = entry.generate_context()
# Verify XML structure
self.assertEqual(element.tag, "read_stdin")
self.assertEqual(element.get("id"), self.test_id)
self.assertEqual(element.text, test_input)
def test_unicode_content(self):
"""Test reading Unicode content"""
test_input = "Hello 世界 😊"
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
self.assertEqual(entry.content, test_input)
self.assertTrue(entry.read)
def test_multiline_content(self):
"""Test reading multiline content"""
test_input = """Line 1
Line 2
Line 3"""
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
self.assertEqual(entry.content, test_input)
self.assertTrue(entry.read)
# Verify XML context for multiline content
element = entry.generate_context()
self.assertEqual(element.text, test_input)
def test_reset(self):
"""Test resetting the entry state"""
test_input = "test message"
self.io_buffer.append_stdin(test_input)
entry = ReadEntry(self.test_id, self.io_buffer)
entry.update()
self.assertTrue(entry.read)
self.assertEqual(entry.content, test_input)
# Reset the entry
entry.reset()
self.assertFalse(entry.read)
self.assertEqual(entry.content, "")
# Should be able to read again after reset
self.io_buffer.append_stdin("new message")
entry.update()
self.assertTrue(entry.read)
self.assertEqual(entry.content, "new message")