You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.7 KiB
74 lines
1.7 KiB
11 months ago
|
# 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
|