106 lines
3.9 KiB
Python
106 lines
3.9 KiB
Python
import unittest
|
|
|
|
from sia.web_io_buffer import WebIOBuffer
|
|
|
|
class WebIOBufferTest(unittest.TestCase):
|
|
def setUp(self):
|
|
"""Set up a fresh WebIOBuffer for each test."""
|
|
self.buffer = WebIOBuffer()
|
|
|
|
def test_initialization(self):
|
|
"""Test initial state of buffer"""
|
|
self.assertEqual(self.buffer.buffer_length(), 0)
|
|
self.assertEqual(self.buffer.get_stdout(), "")
|
|
self.assertEqual(self.buffer.read(), "")
|
|
|
|
def test_append_stdin(self):
|
|
"""Test appending to stdin buffer"""
|
|
test_input = "test input"
|
|
self.buffer.append_stdin(test_input)
|
|
self.assertEqual(self.buffer.buffer_length(), len(test_input))
|
|
|
|
def test_read_clears_buffer(self):
|
|
"""Test that reading clears the stdin buffer"""
|
|
test_input = "test input"
|
|
self.buffer.append_stdin(test_input)
|
|
content = self.buffer.read()
|
|
self.assertEqual(content, test_input)
|
|
self.assertEqual(self.buffer.buffer_length(), 0)
|
|
self.assertEqual(self.buffer.read(), "")
|
|
|
|
def test_write_output(self):
|
|
"""Test writing to stdout buffer"""
|
|
test_output = "test output"
|
|
self.buffer.write(test_output)
|
|
self.assertEqual(self.buffer.get_stdout(), test_output)
|
|
|
|
def test_multiple_writes(self):
|
|
"""Test multiple write operations"""
|
|
self.buffer.write("Part 1")
|
|
self.buffer.write("Part 2")
|
|
self.assertEqual(self.buffer.get_stdout(), "Part 1Part 2")
|
|
|
|
def test_clear_stdout(self):
|
|
"""Test clearing stdout buffer"""
|
|
self.buffer.write("test output")
|
|
self.buffer.clear_stdout()
|
|
self.assertEqual(self.buffer.get_stdout(), "")
|
|
|
|
def test_multiple_stdin_appends(self):
|
|
"""Test multiple stdin append operations"""
|
|
self.buffer.append_stdin("Line 1\n")
|
|
self.buffer.append_stdin("Line 2\n")
|
|
content = self.buffer.read()
|
|
self.assertEqual(content, "Line 1\nLine 2\n")
|
|
|
|
def test_empty_write(self):
|
|
"""Test writing empty content"""
|
|
self.buffer.write("")
|
|
self.assertEqual(self.buffer.get_stdout(), "")
|
|
|
|
def test_empty_append_stdin(self):
|
|
"""Test appending empty content to stdin"""
|
|
self.buffer.append_stdin("")
|
|
self.assertEqual(self.buffer.buffer_length(), 0)
|
|
|
|
def test_special_characters(self):
|
|
"""Test handling special characters"""
|
|
special_chars = "Special chars: \n\t\r\'\"\\"
|
|
self.buffer.append_stdin(special_chars)
|
|
content = self.buffer.read()
|
|
self.assertEqual(content, special_chars)
|
|
|
|
self.buffer.write(special_chars)
|
|
self.assertEqual(self.buffer.get_stdout(), special_chars)
|
|
|
|
def test_large_content(self):
|
|
"""Test handling large content"""
|
|
large_input = "x" * 10000
|
|
self.buffer.append_stdin(large_input)
|
|
content = self.buffer.read()
|
|
self.assertEqual(content, large_input)
|
|
|
|
self.buffer.write(large_input)
|
|
self.assertEqual(self.buffer.get_stdout(), large_input)
|
|
|
|
def test_multiple_operations(self):
|
|
"""Test mixed read/write operations"""
|
|
# Write some output
|
|
self.buffer.write("Output 1\n")
|
|
self.buffer.write("Output 2\n")
|
|
|
|
# Add some input
|
|
self.buffer.append_stdin("Input 1\n")
|
|
self.buffer.append_stdin("Input 2\n")
|
|
|
|
# Verify stdout accumulated correctly
|
|
self.assertEqual(self.buffer.get_stdout(), "Output 1\nOutput 2\n")
|
|
|
|
# Read input and verify it's cleared
|
|
content = self.buffer.read()
|
|
self.assertEqual(content, "Input 1\nInput 2\n")
|
|
self.assertEqual(self.buffer.buffer_length(), 0)
|
|
|
|
# Clear stdout and verify
|
|
self.buffer.clear_stdout()
|
|
self.assertEqual(self.buffer.get_stdout(), "") |