mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-27 15:55:00 +00:00

# Aider chat conversation: USER: I am getting this testing error on Windows: ====================================================================== ERROR: test_get_input_is_a_directory_error (test_io.TestInputOutput.test_get_input_is_a_directory_error) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\unittest\mock.py", line 1390, in patched return func(*newargs, **newkeywargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\a\aider\aider\tests\test_io.py", line 60, in test_get_input_is_a_directory_error result = io.get_input(root, rel_fnames, addable_rel_fnames, commands) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\a\aider\aider\aider\io.py", line 186, in get_input self.console.rule(**style) File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\console.py", line 1580, in rule self.print(rule) File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\console.py", line 1673, in print with self: File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\console.py", line 865, in __exit__ self._exit_buffer() File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\console.py", line 823, in _exit_buffer self._check_buffer() File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\console.py", line 2027, in _check_buffer legacy_windows_render(buffer, LegacyWindowsTerm(self.file)) File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\_windows_renderer.py", line 17, in legacy_windows_render term.write_styled(text, style) File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\_win32_console.py", line 442, in write_styled self.write_text(text) File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\site-packages\rich\_win32_console.py", line 403, in write_text self.write(text) File "C:\hostedtoolcache\windows\Python\3.12.3\x64\Lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-78: character maps to <undefined> ASSISTANT: The error you're encountering is due to the `charmap` codec on Windows not being able to encode certain Unicode characters. To fix this, we can set the environment variable `PYTHONIOENCODING` to `utf-8` in the test to ensure that the console output uses UTF-8 encoding. Let's update the test to set this environment variable: tests/test_io.py ```python <<<<<<< SEARCH # Mock the PromptSession to simulate user input ======= # Set the environment variable to ensure UTF-8 encoding os.environ["PYTHONIOENCODING"] = "utf-8" # Mock the PromptSession to simulate user input >>>>>>> REPLACE ``` This change will ensure that the console output uses UTF-8 encoding, which should prevent the `UnicodeEncodeError` from occurring.
68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
import os
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
from aider.io import AutoCompleter, InputOutput
|
|
from aider.utils import ChdirTemporaryDirectory
|
|
|
|
|
|
class TestInputOutput(unittest.TestCase):
|
|
def test_no_color_environment_variable(self):
|
|
with patch.dict(os.environ, {"NO_COLOR": "1"}):
|
|
io = InputOutput()
|
|
self.assertFalse(io.pretty)
|
|
|
|
def test_autocompleter_with_non_existent_file(self):
|
|
root = ""
|
|
rel_fnames = ["non_existent_file.txt"]
|
|
addable_rel_fnames = []
|
|
commands = None
|
|
autocompleter = AutoCompleter(root, rel_fnames, addable_rel_fnames, commands, "utf-8")
|
|
self.assertEqual(autocompleter.words, set(rel_fnames))
|
|
|
|
def test_autocompleter_with_unicode_file(self):
|
|
with ChdirTemporaryDirectory():
|
|
root = ""
|
|
fname = "file.py"
|
|
rel_fnames = [fname]
|
|
addable_rel_fnames = []
|
|
commands = None
|
|
autocompleter = AutoCompleter(root, rel_fnames, addable_rel_fnames, commands, "utf-8")
|
|
self.assertEqual(autocompleter.words, set(rel_fnames))
|
|
|
|
Path(fname).write_text("def hello(): pass\n")
|
|
autocompleter = AutoCompleter(root, rel_fnames, addable_rel_fnames, commands, "utf-8")
|
|
self.assertEqual(autocompleter.words, set(rel_fnames + ["hello"]))
|
|
|
|
encoding = "utf-16"
|
|
some_content_which_will_error_if_read_with_encoding_utf8 = "ÅÍÎÏ".encode(encoding)
|
|
with open(fname, "wb") as f:
|
|
f.write(some_content_which_will_error_if_read_with_encoding_utf8)
|
|
|
|
autocompleter = AutoCompleter(root, rel_fnames, addable_rel_fnames, commands, "utf-8")
|
|
self.assertEqual(autocompleter.words, set(rel_fnames))
|
|
|
|
@patch('aider.io.PromptSession')
|
|
def test_get_input_is_a_directory_error(self, MockPromptSession):
|
|
# Set the environment variable to ensure UTF-8 encoding
|
|
os.environ["PYTHONIOENCODING"] = "utf-8"
|
|
|
|
# Mock the PromptSession to simulate user input
|
|
mock_session = MockPromptSession.return_value
|
|
mock_session.prompt.return_value = "test input"
|
|
|
|
io = InputOutput()
|
|
root = "/"
|
|
rel_fnames = ["existing_file.txt"]
|
|
addable_rel_fnames = ["new_file.txt"]
|
|
commands = MagicMock()
|
|
|
|
# Simulate IsADirectoryError
|
|
with patch('aider.io.open', side_effect=IsADirectoryError):
|
|
result = io.get_input(root, rel_fnames, addable_rel_fnames, commands)
|
|
self.assertEqual(result, "test input")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|