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(), "")