Files
hsa/AlgoriAgent/tests/execute_python_code_test.py
CakeCN 4198ca63b1 init
2024-12-03 16:21:19 +08:00

91 lines
2.6 KiB
Python

# -*- coding: utf-8 -*-
""" Python code execution test."""
import unittest
import sys
from agentscope.service import execute_python_code
class ExecutePythonCodeTest(unittest.TestCase):
"""
Python code execution test.
"""
def setUp(self) -> None:
"""Init for ExecutePythonCodeTest."""
# Basic expression
self.arg0 = {"code": "print('Hello World')", "timeout": 5}
# Raising Exceptions
self.arg1 = {
"code": "print('Hello World')\nraise ValueError('An intentional "
"error')",
"timeout": 5,
}
# Using External Libraries
self.arg2 = {"code": "import math\nprint(math.sqrt(16))", "timeout": 5}
# Timeout
self.arg3 = {
"code": "import time\nprint('Hello World')\ntime.sleep("
"10)\nprint('This will not print')",
"timeout": 1,
}
# No input code
self.arg4 = {"code": "", "timeout": 5}
def run_test(
self,
args: dict,
expected_output: str,
expected_error_substr: str,
) -> None:
"""A helper function to avoid code repetition"""
response = execute_python_code(
use_docker=False,
**args,
)
self.assertIn(expected_output, response.content)
self.assertIn(expected_error_substr, response.content)
# Uncomment it when test in local
# response = execute_python_code(
# use_docker=True,
# **args,
# )
# self.assertIn(expected_output, response.content)
# self.assertIn(expected_error_substr, response.content)
def test_basic_expression(self) -> None:
"""Execute basic expression test."""
self.run_test(self.arg0, "Hello World\n", "")
def test_raising_exceptions(self) -> None:
"""Execute raising exceptions test."""
self.run_test(
self.arg1,
"Hello World\n",
"ValueError: An intentional error\n",
)
def test_using_external_libs(self) -> None:
"""Execute using external libs test."""
self.run_test(self.arg2, "4.0\n", "")
def test_timeout(self) -> None:
"""Execute timeout test (NOT available in WinOS.)"""
if sys.platform == "win32":
return
self.run_test(self.arg3, "Hello World\n", "timed out\n")
def test_no_input_code(self) -> None:
"""Execute no input code test."""
self.run_test(self.arg4, "", "")
if __name__ == "__main__":
unittest.main()