test: add key symbol checks for each language parser

This commit is contained in:
Paul Gauthier (aider) 2024-11-27 06:23:21 -08:00
parent 947e4ce71d
commit 5c73ab26c0

View file

@ -385,99 +385,109 @@ class Greeter {
} }
} }
""", """,
"Greeter" # Key symbol to check
), ),
"c": ( "c": (
"test.c", "test.c",
( '#include <stdio.h>\n\nint main() {\n printf("Hello, World!\\n");\n return 0;\n}\n',
'#include <stdio.h>\n\nint main() {\n printf("Hello, World!\\n");\n ' "main" # Key symbol to check
" return 0;\n}\n"
),
), ),
"csharp": ( "csharp": (
"test.cs", "test.cs",
( 'using System;\n\nclass Program {\n static void Main() {\n Console.WriteLine("Hello, World!");\n }\n}\n',
"using System;\n\nclass Program {\n static void Main() {\n " "Program" # Key symbol to check
' Console.WriteLine("Hello, World!");\n }\n}\n'
),
), ),
"cpp": ( "cpp": (
"test.cpp", "test.cpp",
( '#include <iostream>\n\nint main() {\n std::cout << "Hello, World!" << std::endl;\n return 0;\n}\n',
'#include <iostream>\n\nint main() {\n std::cout << "Hello, World!" <<' "main" # Key symbol to check
" std::endl;\n return 0;\n}\n" ),
), "elisp": (
"test.el",
'(defun greet (name)\n (message "Hello, %s!" name))\n',
"greet" # Key symbol to check
), ),
"elisp": ("test.el", '(defun greet (name)\n (message "Hello, %s!" name))\n'),
"elixir": ( "elixir": (
"test.ex", "test.ex",
( 'defmodule Greeter do\n def hello(name) do\n IO.puts("Hello, #{name}!")\n end\nend\n',
'defmodule Greeter do\n def hello(name) do\n IO.puts("Hello, #{name}!")\n ' "Greeter" # Key symbol to check
" end\nend\n"
),
), ),
"elm": ( "elm": (
"test.elm", "test.elm",
( 'module Main exposing (main)\n\nimport Html exposing (text)\n\nmain =\n text "Hello, World!"\n',
"module Main exposing (main)\n\nimport Html exposing (text)\n\nmain =\n text" "Main" # Key symbol to check
' "Hello, World!"\n'
),
), ),
"go": ( "go": (
"test.go", "test.go",
( 'package main\n\nimport "fmt"\n\nfunc main() {\n fmt.Println("Hello, World!")\n}\n',
'package main\n\nimport "fmt"\n\nfunc main() {\n fmt.Println("Hello,' "main" # Key symbol to check
' World!")\n}\n'
),
), ),
"java": ( "java": (
"Test.java", "Test.java",
( 'public class Test {\n public static void main(String[] args) {\n System.out.println("Hello, World!");\n }\n}\n',
"public class Test {\n public static void main(String[] args) {\n " "Test" # Key symbol to check
' System.out.println("Hello, World!");\n }\n}\n'
),
), ),
"javascript": ( "javascript": (
"test.js", "test.js",
"function greet(name) {\n console.log(`Hello, ${name}!`);\n}\n", "function greet(name) {\n console.log(`Hello, ${name}!`);\n}\n",
"greet" # Key symbol to check
),
"ocaml": (
"test.ml",
'let greet name =\n Printf.printf "Hello, %s!\\n" name\n',
"greet" # Key symbol to check
), ),
"ocaml": ("test.ml", 'let greet name =\n Printf.printf "Hello, %s!\\n" name\n'),
"php": ( "php": (
"test.php", "test.php",
'<?php\nfunction greet($name) {\n echo "Hello, $name!";\n}\n?>\n', '<?php\nfunction greet($name) {\n echo "Hello, $name!";\n}\n?>\n',
"greet" # Key symbol to check
),
"python": (
"test.py",
'def greet(name):\n print(f"Hello, {name}!")\n',
"greet" # Key symbol to check
),
"ql": (
"test.ql",
'predicate greet(string name) {\n name = "World"\n}\n',
"greet" # Key symbol to check
),
"ruby": (
"test.rb",
'def greet(name)\n puts "Hello, #{name}!"\nend\n',
"greet" # Key symbol to check
),
"rust": (
"test.rs",
'fn main() {\n println!("Hello, World!");\n}\n',
"main" # Key symbol to check
), ),
"python": ("test.py", 'def greet(name):\n print(f"Hello, {name}!")\n'),
"ql": ("test.ql", 'predicate greet(string name) {\n name = "World"\n}\n'),
"ruby": ("test.rb", 'def greet(name)\n puts "Hello, #{name}!"\nend\n'),
"rust": ("test.rs", 'fn main() {\n println!("Hello, World!");\n}\n'),
"typescript": ( "typescript": (
"test.ts", "test.ts",
"function greet(name: string): void {\n console.log(`Hello, ${name}!`);\n}\n", "function greet(name: string): void {\n console.log(`Hello, ${name}!`);\n}\n",
"greet" # Key symbol to check
), ),
"tsx": ( "tsx": (
"test.tsx", "test.tsx",
( "import React from 'react';\n\nconst Greeting: React.FC<{ name: string }> = ({ name }) => {\n return <h1>Hello, {name}!</h1>;\n};\n\nexport default Greeting;\n",
"import React from 'react';\n\nconst Greeting: React.FC<{ name: string }> = ({" "Greeting" # Key symbol to check
" name }) => {\n return <h1>Hello, {name}!</h1>;\n};\n\nexport default"
" Greeting;\n"
),
), ),
} }
with IgnorantTemporaryDirectory() as temp_dir: with IgnorantTemporaryDirectory() as temp_dir:
for _, (filename, content) in language_files.items(): for _, (filename, content, _) in language_files.items():
with open(os.path.join(temp_dir, filename), "w") as f: with open(os.path.join(temp_dir, filename), "w") as f:
f.write(content) f.write(content)
io = InputOutput() io = InputOutput()
repo_map = RepoMap(main_model=self.GPT35, root=temp_dir, io=io) repo_map = RepoMap(main_model=self.GPT35, root=temp_dir, io=io)
other_files = [ other_files = [os.path.join(temp_dir, filename) for filename, _, _ in language_files.values()]
os.path.join(temp_dir, filename) for filename, _ in language_files.values()
]
result = repo_map.get_repo_map([], other_files) result = repo_map.get_repo_map([], other_files)
# Check if the result contains all the expected files # Check if the result contains all the expected files and symbols
for lang, (filename, _) in language_files.items(): for lang, (filename, _, key_symbol) in language_files.items():
self.assertIn(filename, result, f"File for language {lang} not found in repo map") self.assertIn(filename, result, f"File for language {lang} not found in repo map")
self.assertIn(key_symbol, result, f"Key symbol '{key_symbol}' for language {lang} not found in repo map")
# close the open cache files, so Windows won't error # close the open cache files, so Windows won't error
del repo_map del repo_map