From dc9357ec0006caf2a38482692604a459d821270a Mon Sep 17 00:00:00 2001 From: Katerina Vankova Date: Sun, 3 Nov 2024 19:11:02 +0100 Subject: [PATCH] test: Add tests for objects embedding --- tests/data/example_python_objects.py | 16 +++++ tests/data/expected_readme3.md | 25 +++++++ tests/data/readme3.md | 13 ++++ tests/test_code_embedding.py | 2 + tests/test_script_content_reader.py | 102 ++++++++++++++++++++++++++- 5 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 tests/data/example_python_objects.py create mode 100644 tests/data/expected_readme3.md create mode 100644 tests/data/readme3.md diff --git a/tests/data/example_python_objects.py b/tests/data/example_python_objects.py new file mode 100644 index 0000000..4f40c74 --- /dev/null +++ b/tests/data/example_python_objects.py @@ -0,0 +1,16 @@ +import re + + +# Function verifying an email is valid +def verify_email(email: str) -> bool: + return re.match(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$", email) is not None + + +class Person: + def __init__(self, name: str, age: int): + self.name = name + self.age = age + + # String representation of the class + def __str__(self) -> str: + return f"Person(name={self.name}, age={self.age})" diff --git a/tests/data/expected_readme3.md b/tests/data/expected_readme3.md new file mode 100644 index 0000000..332c575 --- /dev/null +++ b/tests/data/expected_readme3.md @@ -0,0 +1,25 @@ +# README 3 + +This is a test README file for testing the code embedding process. + +## Python objects + +This section contains examples of Python objects. + +```python:tests/data/example_python_objects.py:verify_email +def verify_email(email: str) -> bool: + return re.match(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$", email) is not None + +``` + +```python:tests/data/example_python_objects.py:Person +class Person: + def __init__(self, name: str, age: int): + self.name = name + self.age = age + + # String representation of the class + def __str__(self) -> str: + return f"Person(name={self.name}, age={self.age})" + +``` diff --git a/tests/data/readme3.md b/tests/data/readme3.md new file mode 100644 index 0000000..6421b91 --- /dev/null +++ b/tests/data/readme3.md @@ -0,0 +1,13 @@ +# README 3 + +This is a test README file for testing the code embedding process. + +## Python objects + +This section contains examples of Python objects. + +```python:tests/data/example_python_objects.py:verify_email +``` + +```python:tests/data/example_python_objects.py:Person +``` diff --git a/tests/test_code_embedding.py b/tests/test_code_embedding.py index dbb411f..209d264 100644 --- a/tests/test_code_embedding.py +++ b/tests/test_code_embedding.py @@ -8,11 +8,13 @@ def test_code_embedder(tmp_path) -> None: "tests/data/readme0.md", "tests/data/readme1.md", "tests/data/readme2.md", + "tests/data/readme3.md", ] expected_paths = [ "tests/data/expected_readme0.md", "tests/data/expected_readme1.md", "tests/data/expected_readme2.md", + "tests/data/expected_readme3.md", ] # Create a temporary copy of the original file diff --git a/tests/test_script_content_reader.py b/tests/test_script_content_reader.py index 798e90e..4a0d9c0 100644 --- a/tests/test_script_content_reader.py +++ b/tests/test_script_content_reader.py @@ -23,6 +23,13 @@ readme_end=0, content="", ), + ScriptMetadata( + path="tests/data/example_python_objects.py", + extraction_part="", + readme_start=0, + readme_end=0, + content="", + ), ], [ ScriptMetadata( @@ -44,8 +51,29 @@ "# code_embedder:A end\n" ), ), + ScriptMetadata( + path="tests/data/example_python_objects.py", + extraction_part="", + readme_start=0, + readme_end=0, + content=( + "import re\n" + "# Function verifying an email is valid\n" + "def verify_email(email: str) -> bool:\n" + ' return re.match(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+' + '$", email) is not None\n' + "\n" + "class Person:\n" + " def __init__(self, name: str, age: int):\n" + " self.name = name\n" + " self.age = age\n" + "\n" + " # String representation of the class\n" + " def __str__(self) -> str:\n" + ' return f"Person(name={self.name}, age={self.age})"\n' + ), + ), ], - id="one_full_script_one_script_with_section", ), ], ) @@ -81,6 +109,50 @@ def test_read_full_script( "# code_embedder:A end\n" ), ), + ScriptMetadata( + path="tests/data/example_python_objects.py", + extraction_part="verify_email", + readme_start=0, + readme_end=0, + content=( + "import re\n" + "# Function verifying an email is valid\n" + "def verify_email(email: str) -> bool:\n" + ' return re.match(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+' + '$", email) is not None\n' + "\n" + "class Person:\n" + " def __init__(self, name: str, age: int):\n" + " self.name = name\n" + " self.age = age\n" + "\n" + " # String representation of the class\n" + " def __str__(self) -> str:\n" + ' return f"Person(name={self.name}, age={self.age})"\n' + ), + ), + ScriptMetadata( + path="tests/data/example_python_objects.py", + extraction_part="Person", + readme_start=0, + readme_end=0, + content=( + "import re\n" + "# Function verifying an email is valid\n" + "def verify_email(email: str) -> bool:\n" + ' return re.match(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+' + '$", email) is not None\n' + "\n" + "class Person:\n" + " def __init__(self, name: str, age: int):\n" + " self.name = name\n" + " self.age = age\n" + "\n" + " # String representation of the class\n" + " def __str__(self) -> str:\n" + ' return f"Person(name={self.name}, age={self.age})"\n' + ), + ), ], [ ScriptMetadata( @@ -97,8 +169,34 @@ def test_read_full_script( readme_end=0, content='print("Printing only section A")', ), + ScriptMetadata( + path="tests/data/example_python_objects.py", + extraction_part="verify_email", + readme_start=0, + readme_end=0, + content=( + "def verify_email(email: str) -> bool:\n" + ' return re.match(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+' + '$", email) is not None\n' + ), + ), + ScriptMetadata( + path="tests/data/example_python_objects.py", + extraction_part="Person", + readme_start=0, + readme_end=0, + content=( + "class Person:\n" + " def __init__(self, name: str, age: int):\n" + " self.name = name\n" + " self.age = age\n" + "\n" + " # String representation of the class\n" + " def __str__(self) -> str:\n" + ' return f"Person(name={self.name}, age={self.age})"\n' + ), + ), ], - id="one_full_script_one_script_with_section", ), ], )