import json from depaudit.parsers.javascript import JavaScriptParser from depaudit.parsers.python import PythonParser from depaudit.parsers.go import GoParser from depaudit.parsers.rust import RustParser from depaudit.parsers.java import JavaParser class TestJavaScriptParser: def test_can_parse_package_json(self, temp_dir, sample_package_json): parser = JavaScriptParser() file_path = temp_dir / "package.json" file_path.write_text(json.dumps(sample_package_json)) assert parser.can_parse(file_path) is True def test_can_parse_package_lock_json(self, temp_dir): parser = JavaScriptParser() file_path = temp_dir / "package-lock.json" file_path.write_text("{}") assert parser.can_parse(file_path) is True def test_parse_package_json(self, temp_dir, sample_package_json): parser = JavaScriptParser() file_path = temp_dir / "package.json" file_path.write_text(json.dumps(sample_package_json)) manifest = parser.parse(file_path) assert manifest.language == "javascript" assert manifest.project_name == "test-project" assert manifest.project_version == "1.0.0" assert len(manifest.dependencies) == 4 dep_names = {d.name for d in manifest.dependencies} assert "express" in dep_names assert "lodash" in dep_names assert "jest" in dep_names assert "fsevents" in dep_names class TestPythonParser: def test_can_parse_requirements_txt(self, temp_dir): parser = PythonParser() file_path = temp_dir / "requirements.txt" file_path.write_text("") assert parser.can_parse(file_path) is True def test_can_parse_pyproject_toml(self, temp_dir): parser = PythonParser() file_path = temp_dir / "pyproject.toml" file_path.write_text("") assert parser.can_parse(file_path) is True def test_parse_requirements_txt(self, temp_dir, sample_requirements_txt): parser = PythonParser() file_path = temp_dir / "requirements.txt" file_path.write_text(sample_requirements_txt) manifest = parser.parse(file_path) assert manifest.language == "python" dep_names = {d.name for d in manifest.dependencies} assert "requests" in dep_names assert "flask" in dep_names assert "pytest" in dep_names class TestGoParser: def test_can_parse_go_mod(self, temp_dir): parser = GoParser() file_path = temp_dir / "go.mod" file_path.write_text("") assert parser.can_parse(file_path) is True def test_parse_go_mod(self, temp_dir, sample_go_mod): parser = GoParser() file_path = temp_dir / "go.mod" file_path.write_text(sample_go_mod) manifest = parser.parse(file_path) assert manifest.language == "go" assert "github.com/test/project" in (manifest.project_name or "") dep_names = {d.name for d in manifest.dependencies} assert "github.com/gin-gonic/gin" in dep_names assert "github.com/spf13/viper" in dep_names class TestRustParser: def test_can_parse_cargo_toml(self, temp_dir): parser = RustParser() file_path = temp_dir / "Cargo.toml" file_path.write_text("") assert parser.can_parse(file_path) is True def test_parse_cargo_toml(self, temp_dir, sample_cargo_toml): parser = RustParser() file_path = temp_dir / "Cargo.toml" file_path.write_text(sample_cargo_toml) manifest = parser.parse(file_path) assert manifest.language == "rust" assert manifest.project_name == "test-project" dep_names = {d.name for d in manifest.dependencies} assert "serde" in dep_names assert "tokio" in dep_names class TestJavaParser: def test_can_parse_pom_xml(self, temp_dir): parser = JavaParser() file_path = temp_dir / "pom.xml" file_path.write_text("") assert parser.can_parse(file_path) is True def test_parse_pom_xml(self, temp_dir, sample_pom_xml): parser = JavaParser() file_path = temp_dir / "pom.xml" file_path.write_text(sample_pom_xml) manifest = parser.parse(file_path) assert manifest.language == "java" assert "com.example" in (manifest.project_name or "") class TestParserFactory: def test_get_parser_for_package_json(self, temp_dir): from depaudit.parsers.factory import ParserFactory file_path = temp_dir / "package.json" file_path.write_text("{}") parser = ParserFactory.get_parser(file_path) assert parser is not None assert isinstance(parser, JavaScriptParser) def test_get_parser_for_requirements_txt(self, temp_dir): from depaudit.parsers.factory import ParserFactory file_path = temp_dir / "requirements.txt" file_path.write_text("") parser = ParserFactory.get_parser(file_path) assert parser is not None assert isinstance(parser, PythonParser)