From 8be2f8086c9d39aab7adb5827cf618d4e60260b1 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Mon, 10 Jul 2023 13:17:55 -0700 Subject: [PATCH] aider: Add a test case to reproduce the issue of trying to add a directory using the `/add` command. # Aider chat conversation: USER: add a test case to reproduce this issue: Trying to add just a directory makes the program throw the following and exit: > /add src/components Traceback (most recent call last): File "/home/palmerd/.local/bin/aider", line 8, in sys.exit(main()) ^^^^^^ File "/home/palmerd/.local/lib/python3.11/site-packages/aider/main.py", line 369, in main coder.run() File "/home/palmerd/.local/lib/python3.11/site-packages/aider/coders/base_coder.py", line 382, in run new_user_message = self.run_loop() ^^^^^^^^^^^^^^^ File "/home/palmerd/.local/lib/python3.11/site-packages/aider/coders/base_coder.py", line 446, in run_loop return self.commands.run(inp) ^^^^^^^^^^^^^^^^^^^^^^ File "/home/palmerd/.local/lib/python3.11/site-packages/aider/commands.py", line 60, in run return self.do_run(matching_commands[0][1:], rest_inp) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/palmerd/.local/lib/python3.11/site-packages/aider/commands.py", line 45, in do_run return cmd_method(args) ^^^^^^^^^^^^^^^^ File "/home/palmerd/.local/lib/python3.11/site-packages/aider/commands.py", line 264, in cmd_add content = self.io.read_text(abs_file_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/palmerd/.local/lib/python3.11/site-packages/aider/io.py", line 142, in read_text with open(str(filename), "r", encoding=self.encoding) as f: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ IsADirectoryError: [Errno 21] Is a directory: '/home/palmerd/vue-frontend/src/components' ASSISTANT: To reproduce this issue, we need to create a test case that tries to add a directory using the `/add` command. However, the code you've provided is not designed to handle test cases. Could you please provide the test suite or the file where the test cases are written so that I can add a new test case? USER: I added these *read-write* files: tests/test_commands.py ASSISTANT: Great, we can add a test case in the `tests/test_commands.py` file. This test case will attempt to add a directory and check if the appropriate error is handled. Here is the proposed change: ```python tests/test_commands.py <<<<<<< ORIGINAL def test_cmd_add_no_match(self): # Initialize the Commands and InputOutput objects io = InputOutput(pretty=False, yes=True) from aider.coders import Coder coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef") commands = Commands(io, coder) # Call the cmd_add method with a non-existent file pattern commands.cmd_add("*.nonexistent") # Check if no files have been added to the chat session self.assertEqual(len(coder.abs_fnames), 0) ======= def test_cmd_add_no_match(self): # Initialize the Commands and InputOutput objects io = InputOutput(pretty=False, yes=True) from aider.coders import Coder coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef") commands = Commands(io, coder) # Call the cmd_add method with a non-existent file pattern commands.cmd_add("*.nonexistent") # Check if no files have been added to the chat session self.assertEqual(len(coder.abs_fnames), 0) def test_cmd_add_directory(self): # Initialize the Commands and InputOutput objects io = InputOutput(pretty=False, yes=True) from aider.coders import Coder coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef") commands = Commands(io, coder) # Create a directory os.mkdir("test_dir") # Call the cmd_add method with a directory with self.assertRaises(IsADirectoryError): commands.cmd_add("test_dir") >>>>>>> UPDATED ``` This new test case `test_cmd_add_directory` creates a directory named `test_dir` and attempts to add it using the `cmd_add` method. We expect an `IsADirectoryError` to be raised in this scenario. --- tests/test_commands.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/test_commands.py b/tests/test_commands.py index c43826419..1aa4fcba1 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -79,6 +79,21 @@ class TestCommands(TestCase): # Check if no files have been added to the chat session self.assertEqual(len(coder.abs_fnames), 0) + def test_cmd_add_directory(self): + # Initialize the Commands and InputOutput objects + io = InputOutput(pretty=False, yes=True) + from aider.coders import Coder + + coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef") + commands = Commands(io, coder) + + # Create a directory + os.mkdir("test_dir") + + # Call the cmd_add method with a directory + with self.assertRaises(IsADirectoryError): + commands.cmd_add("test_dir") + def test_cmd_drop_with_glob_patterns(self): # Initialize the Commands and InputOutput objects io = InputOutput(pretty=False, yes=True)