start implementation on new architecture
This commit is contained in:
130
test/read_entry_test.py
Normal file
130
test/read_entry_test.py
Normal file
@@ -0,0 +1,130 @@
|
||||
import unittest
|
||||
from datetime import datetime
|
||||
|
||||
from sia.web_io_buffer import WebIOBuffer
|
||||
from sia.read_entry import ReadEntry
|
||||
|
||||
class ReadEntryTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
"""Set up test cases with fixed id, timestamp, and IO buffer"""
|
||||
self.test_id = "test-id-1234"
|
||||
self.test_timestamp = datetime(2024, 10, 31, 12, 0, 0)
|
||||
self.io_buffer = WebIOBuffer()
|
||||
|
||||
def test_initialization(self):
|
||||
"""Test entry initialization"""
|
||||
entry = ReadEntry(self.io_buffer, self.test_id, self.test_timestamp)
|
||||
|
||||
self.assertEqual(entry.content, "")
|
||||
self.assertEqual(entry.id, self.test_id)
|
||||
self.assertEqual(entry.timestamp, self.test_timestamp)
|
||||
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.io_buffer, self.test_id, self.test_timestamp)
|
||||
entry.update()
|
||||
|
||||
# Verify content was read
|
||||
self.assertEqual(entry.content, test_input)
|
||||
self.assertTrue(entry._read)
|
||||
self.assertEqual(self.io_buffer.buffer_length(), 0) # Buffer should be cleared
|
||||
|
||||
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.io_buffer, self.test_id, self.test_timestamp)
|
||||
entry.update()
|
||||
initial_content = entry.content
|
||||
|
||||
# Add more input and update again
|
||||
self.io_buffer.append_stdin("additional input")
|
||||
entry.update()
|
||||
entry.update()
|
||||
|
||||
# Verify content hasn't changed after first read
|
||||
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.io_buffer, self.test_id, self.test_timestamp)
|
||||
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.io_buffer, self.test_id, self.test_timestamp)
|
||||
entry.update()
|
||||
|
||||
self.assertEqual(entry.content, test_input)
|
||||
|
||||
def test_large_content(self):
|
||||
"""Test reading large content"""
|
||||
test_input = "x" * 10000
|
||||
self.io_buffer.append_stdin(test_input)
|
||||
|
||||
entry = ReadEntry(self.io_buffer, self.test_id, self.test_timestamp)
|
||||
entry.update()
|
||||
|
||||
self.assertEqual(entry.content, test_input)
|
||||
|
||||
def test_generate_context_before_read(self):
|
||||
"""Test XML context generation before reading"""
|
||||
entry = ReadEntry(self.io_buffer, self.test_id, self.test_timestamp)
|
||||
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.io_buffer, self.test_id, self.test_timestamp)
|
||||
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, f"<![CDATA[{test_input}]]>")
|
||||
|
||||
def test_unicode_content(self):
|
||||
"""Test reading Unicode content"""
|
||||
test_input = "Hello 世界 😊"
|
||||
self.io_buffer.append_stdin(test_input)
|
||||
|
||||
entry = ReadEntry(self.io_buffer, self.test_id, self.test_timestamp)
|
||||
entry.update()
|
||||
|
||||
self.assertEqual(entry.content, test_input)
|
||||
|
||||
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.io_buffer, self.test_id, self.test_timestamp)
|
||||
entry.update()
|
||||
|
||||
self.assertEqual(entry.content, test_input)
|
||||
|
||||
# Verify XML escaping for multiline content
|
||||
element = entry.generate_context()
|
||||
self.assertEqual(element.text, f"<![CDATA[{test_input}]]>")
|
||||
Reference in New Issue
Block a user