forked from cleveragents/cleveragents-core
82 lines
3.6 KiB
JSON
82 lines
3.6 KiB
JSON
{
|
|
"fixtures": [
|
|
{
|
|
"name": "renamed_function_reference",
|
|
"description": "Function uses a name that was renamed — broken reference detected",
|
|
"source": "def process():\n return old_handler_xyz()\n",
|
|
"filename": "refactored.py",
|
|
"expected_rule": "broken_reference",
|
|
"expected_passed": false,
|
|
"expected_message_contains": "broken reference",
|
|
"expected_data_contains": {"filename": "refactored.py"}
|
|
},
|
|
{
|
|
"name": "missing_symbol_in_function",
|
|
"description": "Function references a symbol that does not exist in any scope",
|
|
"source": "def compute(x):\n return x + missing_constant_xyz\n",
|
|
"filename": "missing_api.py",
|
|
"expected_rule": "missing_symbol",
|
|
"expected_passed": false,
|
|
"expected_message_contains": "missing symbol",
|
|
"expected_data_contains": {"filename": "missing_api.py"}
|
|
},
|
|
{
|
|
"name": "incompatible_type_usage",
|
|
"description": "Calling an attribute on a string literal that does not exist — detectable as broken reference",
|
|
"source": "def transform():\n return nonexistent_transformer_xyz.convert()\n",
|
|
"filename": "type_mismatch.py",
|
|
"expected_rule": "broken_reference",
|
|
"expected_passed": false,
|
|
"expected_message_contains": "broken reference",
|
|
"expected_data_contains": {"filename": "type_mismatch.py"}
|
|
},
|
|
{
|
|
"name": "valid_api_usage",
|
|
"description": "All function calls use defined names — passes all rules",
|
|
"source": "import json\n\ndef parse(data):\n return json.loads(data)\n",
|
|
"filename": "valid_api.py",
|
|
"expected_rule": "broken_reference",
|
|
"expected_passed": true,
|
|
"note": "json.loads is a valid API call"
|
|
},
|
|
{
|
|
"name": "class_method_missing_symbol",
|
|
"description": "Class method uses an undefined symbol from a removed API",
|
|
"source": "class Processor:\n def run(self):\n return removed_api_function_xyz()\n",
|
|
"filename": "class_api.py",
|
|
"expected_rule": "missing_symbol",
|
|
"expected_passed": false,
|
|
"expected_message_contains": "missing symbol",
|
|
"expected_data_contains": {"filename": "class_api.py"}
|
|
},
|
|
{
|
|
"name": "eval_based_dynamic_call",
|
|
"description": "Using eval to call functions dynamically — API misuse pattern",
|
|
"source": "def dispatch(name, arg):\n return eval(f'{name}({arg})')\n",
|
|
"filename": "dynamic_api.py",
|
|
"expected_rule": "api_misuse",
|
|
"expected_passed": false,
|
|
"expected_message_contains": "API misuse",
|
|
"expected_data_contains": {"filename": "dynamic_api.py"}
|
|
},
|
|
{
|
|
"name": "aliased_pickle_not_caught",
|
|
"description": "Aliased import of pickle bypasses APIMisuseRule — known limitation",
|
|
"source": "import pickle as pk\n\ndef load_data(path):\n with open(path, 'rb') as f:\n return pk.load(f)\n",
|
|
"filename": "aliased_pickle.py",
|
|
"expected_rule": "api_misuse",
|
|
"expected_passed": true,
|
|
"note": "APIMisuseRule checks module names literally; aliased imports (import X as Y) are not tracked"
|
|
},
|
|
{
|
|
"name": "from_import_alias_not_caught",
|
|
"description": "From-import alias of dangerous function bypasses APIMisuseRule — known limitation",
|
|
"source": "from os import system as run_cmd\n\ndef execute(cmd):\n return run_cmd(cmd)\n",
|
|
"filename": "aliased_system.py",
|
|
"expected_rule": "api_misuse",
|
|
"expected_passed": true,
|
|
"note": "APIMisuseRule does not resolve from-import aliases; 'run_cmd' is not in the dangerous names set"
|
|
}
|
|
]
|
|
}
|