# JSON # Contents of test_json.py, which must be placed in the `tests/` directory. import json import pytest from swarms.tokenizers import JSON # Fixture for reusable JSON schema file paths @pytest.fixture def valid_schema_path(tmp_path): d = tmp_path / "sub" d.mkdir() p = d / "schema.json" p.write_text( '{"type": "object", "properties": {"name": {"type":' ' "string"}}}' ) return str(p) @pytest.fixture def invalid_schema_path(tmp_path): d = tmp_path / "sub" d.mkdir() p = d / "invalid_schema.json" p.write_text("this is not a valid JSON") return str(p) # This test class must be subclassed as JSON class is abstract class TestableJSON(JSON): def validate(self, data): # Here must be a real validation implementation for testing pass # Basic tests def test_initialize_json(valid_schema_path): json_obj = TestableJSON(valid_schema_path) assert json_obj.schema_path == valid_schema_path assert "name" in json_obj.schema["properties"] def test_load_schema_failure(invalid_schema_path): with pytest.raises(json.JSONDecodeError): TestableJSON(invalid_schema_path) # Mocking tests def test_validate_calls_method(monkeypatch): # Mock the validate method to check that it is being called pass # Exception tests def test_initialize_with_nonexistent_schema(): with pytest.raises(FileNotFoundError): TestableJSON("nonexistent_path.json") # Tests on different Python versions if applicable # ... # Grouping tests marked as slow if they perform I/O operations @pytest.mark.slow def test_loading_large_schema(): # Test with a large json file pass