mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-06-17 15:35:21 +02:00
update base env and android_env
This commit is contained in:
parent
df728a034e
commit
1d772e8eb5
15 changed files with 521 additions and 17 deletions
3
tests/metagpt/environment/android_env/__init__.py
Normal file
3
tests/metagpt/environment/android_env/__init__.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Desc :
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Desc : the unittest of AndroidExtEnv
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from metagpt.const import ADB_EXEC_FAIL
|
||||
from metagpt.environment.android_env.android_ext_env import AndroidExtEnv
|
||||
|
||||
|
||||
def mock_device_shape(self, adb_cmd: str) -> str:
|
||||
return "shape: 720x1080"
|
||||
|
||||
|
||||
def mock_device_shape_invalid(self, adb_cmd: str) -> str:
|
||||
return ADB_EXEC_FAIL
|
||||
|
||||
|
||||
def mock_list_devices(self, adb_cmd: str) -> str:
|
||||
return "devices\nemulator-5554"
|
||||
|
||||
|
||||
def mock_get_screenshot(self, adb_cmd: str) -> str:
|
||||
return "screenshot_xxxx-xx-xx"
|
||||
|
||||
|
||||
def mock_get_xml(self, adb_cmd: str) -> str:
|
||||
return "xml_xxxx-xx-xx"
|
||||
|
||||
|
||||
def mock_write_read_operation(self, adb_cmd: str) -> str:
|
||||
return "OK"
|
||||
|
||||
|
||||
def test_android_ext_env(mocker):
|
||||
device_id = "emulator-5554"
|
||||
mocker.patch(
|
||||
"metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_device_shape
|
||||
)
|
||||
|
||||
ext_env = AndroidExtEnv(device_id=device_id, screenshot_dir="/data2/", xml_dir="/data2/")
|
||||
assert ext_env.adb_prefix == f"adb -s {device_id} "
|
||||
assert ext_env.adb_prefix_shell == f"adb -s {device_id} shell "
|
||||
assert ext_env.adb_prefix_si == f"adb -s {device_id} shell input "
|
||||
|
||||
assert ext_env.device_shape == (720, 1080)
|
||||
|
||||
mocker.patch(
|
||||
"metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_device_shape_invalid
|
||||
)
|
||||
assert ext_env.device_shape == (0, 0)
|
||||
|
||||
mocker.patch(
|
||||
"metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_list_devices
|
||||
)
|
||||
assert ext_env.list_devices() == [device_id]
|
||||
|
||||
mocker.patch(
|
||||
"metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_get_screenshot
|
||||
)
|
||||
assert ext_env.get_screenshot("screenshot_xxxx-xx-xx", "/data/") == Path("/data/screenshot_xxxx-xx-xx.png")
|
||||
|
||||
mocker.patch("metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_get_xml)
|
||||
assert ext_env.get_xml("xml_xxxx-xx-xx", "/data/") == Path("/data/xml_xxxx-xx-xx.xml")
|
||||
|
||||
mocker.patch(
|
||||
"metagpt.environment.android_env.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_write_read_operation
|
||||
)
|
||||
res = "OK"
|
||||
assert ext_env.system_back() == res
|
||||
assert ext_env.system_tap(10, 10) == res
|
||||
assert ext_env.user_input("test_input") == res
|
||||
assert ext_env.user_longpress(10, 10) == res
|
||||
assert ext_env.user_swipe(10, 10) == res
|
||||
assert ext_env.user_swipe_to((10, 10), (20, 20)) == res
|
||||
3
tests/metagpt/environment/api/__init__.py
Normal file
3
tests/metagpt/environment/api/__init__.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Desc :
|
||||
15
tests/metagpt/environment/api/test_env_api.py
Normal file
15
tests/metagpt/environment/api/test_env_api.py
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Desc :
|
||||
|
||||
from metagpt.environment.api.env_api import EnvAPIRegistry
|
||||
|
||||
|
||||
def test_env_api_registry():
|
||||
def test_func():
|
||||
pass
|
||||
|
||||
env_api_registry = EnvAPIRegistry()
|
||||
env_api_registry["test"] = test_func
|
||||
|
||||
env_api_registry.get("test") == test_func
|
||||
50
tests/metagpt/environment/test_base_env.py
Normal file
50
tests/metagpt/environment/test_base_env.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Desc : the unittest of ExtEnv&Env
|
||||
|
||||
import pytest
|
||||
|
||||
from metagpt.environment.api.env_api import EnvAPIAbstract
|
||||
from metagpt.environment.base_env import (
|
||||
Environment,
|
||||
mark_as_readable,
|
||||
mark_as_writeable,
|
||||
env_read_api_registry,
|
||||
env_write_api_registry
|
||||
)
|
||||
|
||||
|
||||
class ForTestEnv(Environment):
|
||||
value: int = 0
|
||||
|
||||
@mark_as_readable
|
||||
def read_api_no_parms(self):
|
||||
return self.value
|
||||
|
||||
@mark_as_readable
|
||||
def read_api(self, a: int, b: int):
|
||||
return a + b
|
||||
|
||||
@mark_as_writeable
|
||||
def write_api(self, a: int, b: int):
|
||||
self.value = a + b
|
||||
|
||||
@mark_as_writeable
|
||||
async def async_read_api(self, a: int, b: int):
|
||||
return a + b
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_ext_env():
|
||||
env = ForTestEnv()
|
||||
assert len(env_read_api_registry) > 0
|
||||
assert len(env_write_api_registry) > 0
|
||||
|
||||
_ = await env.step(EnvAPIAbstract(api_name="write_api", kwargs={"a": 5, "b": 10}))
|
||||
assert env.value == 15
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
await env.observe("not_exist_api")
|
||||
|
||||
assert await env.observe("read_api_no_parms") == 15
|
||||
assert await env.observe(EnvAPIAbstract(api_name="read_api", kwargs={"a": 5, "b": 5})) == 10
|
||||
Loading…
Add table
Add a link
Reference in a new issue