Files
files-to-prompt/tests/test_files_to_prompt.py
Simon Willison 4407ac519b Rename --ignore-patterns to --ignore, refs #1
I did this by hand, did not use Claude for once.
2024-04-07 22:33:11 -07:00

165 lines
6.9 KiB
Python

import os
from click.testing import CliRunner
from files_to_prompt.cli import cli
def test_basic_functionality(tmpdir):
runner = CliRunner()
with tmpdir.as_cwd():
os.makedirs("test_dir")
with open("test_dir/file1.txt", "w") as f:
f.write("Contents of file1")
with open("test_dir/file2.txt", "w") as f:
f.write("Contents of file2")
result = runner.invoke(cli, ["test_dir"])
assert result.exit_code == 0
assert "test_dir/file1.txt" in result.output
assert "Contents of file1" in result.output
assert "test_dir/file2.txt" in result.output
assert "Contents of file2" in result.output
def test_include_hidden(tmpdir):
runner = CliRunner()
with tmpdir.as_cwd():
os.makedirs("test_dir")
with open("test_dir/.hidden.txt", "w") as f:
f.write("Contents of hidden file")
result = runner.invoke(cli, ["test_dir"])
assert result.exit_code == 0
assert "test_dir/.hidden.txt" not in result.output
result = runner.invoke(cli, ["test_dir", "--include-hidden"])
assert result.exit_code == 0
assert "test_dir/.hidden.txt" in result.output
assert "Contents of hidden file" in result.output
def test_ignore_gitignore(tmpdir):
runner = CliRunner()
with tmpdir.as_cwd():
os.makedirs("test_dir")
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")
result = runner.invoke(cli, ["test_dir"])
assert result.exit_code == 0
assert "test_dir/ignored.txt" not in result.output
assert "test_dir/included.txt" in 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
def test_multiple_paths(tmpdir):
runner = CliRunner()
with tmpdir.as_cwd():
os.makedirs("test_dir1")
with open("test_dir1/file1.txt", "w") as f:
f.write("Contents of file1")
os.makedirs("test_dir2")
with open("test_dir2/file2.txt", "w") as f:
f.write("Contents of file2")
with open("single_file.txt", "w") as f:
f.write("Contents of single file")
result = runner.invoke(cli, ["test_dir1", "test_dir2", "single_file.txt"])
assert result.exit_code == 0
assert "test_dir1/file1.txt" in result.output
assert "Contents of file1" in result.output
assert "test_dir2/file2.txt" in result.output
assert "Contents of file2" in result.output
assert "single_file.txt" in result.output
assert "Contents of single file" in result.output
def test_ignore_patterns(tmpdir):
runner = CliRunner()
with tmpdir.as_cwd():
os.makedirs("test_dir")
with open("test_dir/file_to_ignore.txt", "w") as f:
f.write("This file should be ignored due to ignore patterns")
with open("test_dir/file_to_include.txt", "w") as f:
f.write("This file should be included")
result = runner.invoke(cli, ["test_dir", "--ignore", "*.txt"])
assert result.exit_code == 0
assert "test_dir/file_to_ignore.txt" not in result.output
assert "This file should be ignored due to ignore patterns" not in result.output
assert "test_dir/file_to_include.txt" not in result.output
result = runner.invoke(cli, ["test_dir", "--ignore", "file_to_ignore.*"])
assert result.exit_code == 0
assert "test_dir/file_to_ignore.txt" not in result.output
assert "This file should be ignored due to ignore patterns" not in result.output
assert "test_dir/file_to_include.txt" in result.output
assert "This file should be included" in result.output
def test_mixed_paths_with_options(tmpdir):
runner = CliRunner()
with tmpdir.as_cwd():
os.makedirs("test_dir")
with open("test_dir/.gitignore", "w") as f:
f.write("ignored_in_gitignore.txt\n.hidden_ignored_in_gitignore.txt")
with open("test_dir/ignored_in_gitignore.txt", "w") as f:
f.write("This file should be ignored by .gitignore")
with open("test_dir/.hidden_ignored_in_gitignore.txt", "w") as f:
f.write("This hidden file should be ignored by .gitignore")
with open("test_dir/included.txt", "w") as f:
f.write("This file should be included")
with open("test_dir/.hidden_included.txt", "w") as f:
f.write("This hidden file should be included")
with open("single_file.txt", "w") as f:
f.write("Contents of single file")
result = runner.invoke(cli, ["test_dir", "single_file.txt"])
assert result.exit_code == 0
assert "test_dir/ignored_in_gitignore.txt" not in result.output
assert "test_dir/.hidden_ignored_in_gitignore.txt" not in result.output
assert "test_dir/included.txt" in result.output
assert "test_dir/.hidden_included.txt" not in result.output
assert "single_file.txt" in result.output
assert "Contents of single file" in result.output
result = runner.invoke(cli, ["test_dir", "single_file.txt", "--include-hidden"])
assert result.exit_code == 0
assert "test_dir/ignored_in_gitignore.txt" not in result.output
assert "test_dir/.hidden_ignored_in_gitignore.txt" not in result.output
assert "test_dir/included.txt" in result.output
assert "test_dir/.hidden_included.txt" in result.output
assert "single_file.txt" in result.output
assert "Contents of single file" in result.output
result = runner.invoke(
cli, ["test_dir", "single_file.txt", "--ignore-gitignore"]
)
assert result.exit_code == 0
assert "test_dir/ignored_in_gitignore.txt" in result.output
assert "test_dir/.hidden_ignored_in_gitignore.txt" not in result.output
assert "test_dir/included.txt" in result.output
assert "test_dir/.hidden_included.txt" not in result.output
assert "single_file.txt" in result.output
assert "Contents of single file" in result.output
result = runner.invoke(
cli,
["test_dir", "single_file.txt", "--ignore-gitignore", "--include-hidden"],
)
assert result.exit_code == 0
assert "test_dir/ignored_in_gitignore.txt" in result.output
assert "test_dir/.hidden_ignored_in_gitignore.txt" in result.output
assert "test_dir/included.txt" in result.output
assert "test_dir/.hidden_included.txt" in result.output
assert "single_file.txt" in result.output
assert "Contents of single file" in result.output