diff --git a/tests/fixtures/__init__.py b/tests/fixtures/__init__.py new file mode 100644 index 0000000..b8093c1 --- /dev/null +++ b/tests/fixtures/__init__.py @@ -0,0 +1,172 @@ +"""Test fixtures for VibeGuard.""" + +from pathlib import Path + + +class TestFixtures: + """Test fixtures for VibeGuard tests.""" + + @staticmethod + def get_python_fixture(name: str) -> str: + """Get a Python test fixture.""" + fixtures = { + "magic_string": ''' +MAGIC_VALUE = "this is a very long magic string that should be detected as an anti-pattern" +USER_ID = 12345 +MAX_RETRIES = 5 + +def process_data(data): + return data + +def calculate(): + return 42 + +try: + result = 1 / 0 +except: + pass +''', + "good_python": ''' +MAGIC_VALUE = "short" + +MAX_RETRIES = 5 + +def process_data(data: list) -> dict: + """Process data and return result.""" + return {} + +def calculate() -> int: + """Calculate and return value.""" + return 42 + +try: + result = 1 / 0 +except ZeroDivisionError: + pass +''', + "type_check": ''' +value = "test" +if type(value) == str: + print("string") +''', + } + return fixtures.get(name, "") + + @staticmethod + def get_javascript_fixture(name: str) -> str: + """Get a JavaScript test fixture.""" + fixtures = { + "console_log": ''' +function calculate() { + console.log("Debug: calculation started"); + return 42; +} + +var oldStyle = "should use const"; +''', + "good_javascript": ''' +const calculate = () => { + return 42; +}; + +const ERROR_MESSAGES = { + NOT_FOUND: "Resource not found" +}; +''', + "promise_wrapper": ''' +const getValue = () => { + return new Promise((resolve) => { + resolve(42); + }); +}; +''', + } + return fixtures.get(name, "") + + @staticmethod + def get_typescript_fixture(name: str) -> str: + """Get a TypeScript test fixture.""" + fixtures = { + "any_type": ''' +interface userData { + id: number; + name: any; +} + +const processData = (data: any) => { + return data; +}; +''', + "good_typescript": ''' +interface UserData { + id: number; + name: string; +} + +const processData = (data: UserData): UserData => { + return data; +}; +''', + } + return fixtures.get(name, "") + + @staticmethod + def get_go_fixture(name: str) -> str: + """Get a Go test fixture.""" + fixtures = { + "ignored_error": ''' +func example() { + _, err := someFunction() + _ = err +} +''', + "good_go": ''' +func example() error { + _, err := someFunction() + return err +} +''', + "context_background": ''' +func handler(w http.ResponseWriter, r *http.Request) { + ctx := context.Background() + // use ctx +} +''', + } + return fixtures.get(name, "") + + @staticmethod + def get_rust_fixture(name: str) -> str: + """Get a Rust test fixture.""" + fixtures = { + "unnecessary_clone": ''' +#[derive(Copy, Clone)] +struct Point { + x: i32, + y: i32, +} + +fn main() { + let p = Point { x: 1, y: 2 }; + let q = p.clone(); +} +''', + "good_rust": ''' +#[derive(Copy, Clone)] +struct Point { + x: i32, + y: i32, +} + +fn main() { + let p = Point { x: 1, y: 2 }; + let q = p; +} +''', + } + return fixtures.get(name, "") + + @staticmethod + def write_fixture(path: Path, content: str) -> None: + """Write a fixture file.""" + path.write_text(content)