From 6164edf25cb9a5d493bd16491c6c7a93b560395a Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 18 Feb 2025 21:26:48 -0800 Subject: [PATCH] Added passing test for nested .gitignore Refs #40 - though I had hoped this test would fail. --- tests/test_files_to_prompt.py | 43 ++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/tests/test_files_to_prompt.py b/tests/test_files_to_prompt.py index eecfc5d..5268995 100644 --- a/tests/test_files_to_prompt.py +++ b/tests/test_files_to_prompt.py @@ -1,11 +1,17 @@ import os import pytest +import re from click.testing import CliRunner from files_to_prompt.cli import cli +def filenames_from_cxml(cxml_string): + "Return set of filenames from ... tags" + return set(re.findall(r"(.*?)", cxml_string)) + + def test_basic_functionality(tmpdir): runner = CliRunner() with tmpdir.as_cwd(): @@ -44,23 +50,44 @@ def test_ignore_gitignore(tmpdir): runner = CliRunner() with tmpdir.as_cwd(): os.makedirs("test_dir") + os.makedirs("test_dir/nested_include") + os.makedirs("test_dir/nested_ignore") with open("test_dir/.gitignore", "w") as f: f.write("ignored.txt") with open("test_dir/ignored.txt", "w") as f: f.write("This file should be ignored") with open("test_dir/included.txt", "w") as f: f.write("This file should be included") + with open("test_dir/nested_include/included2.txt", "w") as f: + f.write("This nested file should be included") + with open("test_dir/nested_ignore/.gitignore", "w") as f: + f.write("nested_ignore.txt") + with open("test_dir/nested_ignore/nested_ignore.txt", "w") as f: + f.write("This nested file should not be included") + with open("test_dir/nested_ignore/actually_include.txt", "w") as f: + f.write("This nested file should actually be included") - result = runner.invoke(cli, ["test_dir"]) + result = runner.invoke(cli, ["test_dir", "-c"]) assert result.exit_code == 0 - assert "test_dir/ignored.txt" not in result.output - assert "test_dir/included.txt" in result.output + filenames = filenames_from_cxml(result.output) - result = runner.invoke(cli, ["test_dir", "--ignore-gitignore"]) - assert result.exit_code == 0 - assert "test_dir/ignored.txt" in result.output - assert "This file should be ignored" in result.output - assert "test_dir/included.txt" in result.output + assert filenames == { + "test_dir/included.txt", + "test_dir/nested_include/included2.txt", + "test_dir/nested_ignore/actually_include.txt", + } + + result2 = runner.invoke(cli, ["test_dir", "-c", "--ignore-gitignore"]) + assert result2.exit_code == 0 + filenames2 = filenames_from_cxml(result2.output) + + assert filenames2 == { + "test_dir/included.txt", + "test_dir/ignored.txt", + "test_dir/nested_include/included2.txt", + "test_dir/nested_ignore/nested_ignore.txt", + "test_dir/nested_ignore/actually_include.txt", + } def test_multiple_paths(tmpdir):