diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..6bed591f2eacef71e87e92059d8502c226870522 --- /dev/null +++ b/conftest.py @@ -0,0 +1,21 @@ +import pytest + + +def pytest_addoption(parser): + parser.addoption( + "--run_integration", action="store_true", default=False, help="run slow tests" + ) + + +def pytest_configure(config): + config.addinivalue_line("markers", "integration: mark test as integration tests") + + +def pytest_collection_modifyitems(config, items): + if config.getoption("--run_integration"): + # --run_integration given in cli: do not skip + return + skip_integration = pytest.mark.skip(reason="need --run_integration option to run") + for item in items: + if "integration" in item.keywords: + item.add_marker(skip_integration) diff --git a/tests/test_integration.py b/tests/test_integration.py new file mode 100644 index 0000000000000000000000000000000000000000..0ce0f7c22906050f693d85db35e4ab31144c3187 --- /dev/null +++ b/tests/test_integration.py @@ -0,0 +1,41 @@ +import re +import socket + +import pytest + +from ur_py_ctl import URSocketClient, socket_close, socket_open, socket_send_string + +UR_HOSTNAME = "marius.d.control.lth.se" +UR_PORT = 30002 + +SERVER_ADDRESS = f"{socket.gethostname()}.control.lth.se" +SERVER_PORT = 30003 + + +@pytest.mark.integration +def test_get_tcp(): + + socket_open_str = socket_open(f'"{SERVER_ADDRESS}"', SERVER_PORT) + + script = f"""\ +def program(): + pose = get_actual_tcp_pose() + {socket_open_str} + {socket_send_string("pose")} + {socket_close()} + +end + +program() +""" + + with URSocketClient( + UR_HOSTNAME, + UR_PORT, + recv_socket_hostname=SERVER_ADDRESS, + recv_socket_port=SERVER_PORT, + ) as client: + + resp = client.send_script(script, await_response=True) + + assert re.match(r"p\[[0-9\.,-]+\]", resp) diff --git a/tests/test_urscript_commands.py b/tests/test_urscript_commands.py index 84cf742b8007fa9343fbdcd8b1ff377d99bc0190..ce17c453e0079f10898639d878ef3645ffbabf78 100644 --- a/tests/test_urscript_commands.py +++ b/tests/test_urscript_commands.py @@ -55,16 +55,16 @@ def kwargs_input_output(): def test__quote_string_if_needed(): - # no added quotes needed - assert (_quote_string_if_needed("'String'")) == "'String'" + # add quotes because only singlequotes + assert (_quote_string_if_needed("'String'")) == "\"'String'\"" # add quotes - assert (_quote_string_if_needed("String")) == "'String'" + assert (_quote_string_if_needed("String")) == '"String"' # already quoted but with "" instead of '' assert (_quote_string_if_needed('"String"')) == '"String"' # unbalanced - assert (_quote_string_if_needed('"String')) == "'\"String'" + assert (_quote_string_if_needed('"String')) == '""String"' # different quote marks - assert (_quote_string_if_needed("'String\"")) == "''String\"'" + assert (_quote_string_if_needed("'String\"")) == '"\'String""' def test__get_func(): @@ -106,23 +106,23 @@ def test_move_to_conf_kwargs(conf_list, conf_str, kwargs_input_output): def test_socket_open(): ret_val = socket_open("192.168.1.2", 3003) - assert ret_val == "socket_open('192.168.1.2', 3003)" + assert ret_val == "socket_open(192.168.1.2, 3003)" - ret_val = socket_open("'192.168.1.2'", 3003, socket_name="socket_1") - assert ret_val == "socket_open('192.168.1.2', 3003, socket_name='socket_1')" + ret_val = socket_open('"192.168.1.2"', 3003, socket_name='"socket_1"') + assert ret_val == 'socket_open("192.168.1.2", 3003, socket_name="socket_1")' def test_socket_close(): assert socket_close() == "socket_close()" assert ( - socket_close(socket_name="socket_other") - == "socket_close(socket_name='socket_other')" + socket_close(socket_name='"socket_other"') + == 'socket_close(socket_name="socket_other")' ) def test_socket_send_string(): - assert socket_send_string("'c'") == "socket_send_string('c')" + assert socket_send_string('"c"') == 'socket_send_string("c")' assert ( socket_send_string("pose", socket_name="socket_other") - == "socket_send_string(pose, socket_name='socket_other')" + == "socket_send_string(pose, socket_name=socket_other)" ) diff --git a/ur_py_ctl/urscript_commands.py b/ur_py_ctl/urscript_commands.py index b3b0c83f280158c24805062d3c68fa79d9935811..c201c0fc2f2bb4849a4bce1320aa098ce47b6824 100644 --- a/ur_py_ctl/urscript_commands.py +++ b/ur_py_ctl/urscript_commands.py @@ -10,12 +10,11 @@ def _quote_string_if_needed(string): No smart parsing or tokenizing, only checks the start and end of string. """ - if string[0] in ('"', "'"): - if string[-1] == string[0]: - # already quoted - return string + if string[0] == '"' and string[-1] == '"': + # already quoted + return string - return "'" + string + "'" + return '"' + string + '"' def _get_func( @@ -250,20 +249,16 @@ def sleep(seconds: int) -> str: def socket_open(address: str, port: int, socket_name=None): - urscript_kwargs = ( - f"socket_name={_quote_string_if_needed(socket_name)}" if socket_name else None - ) + urscript_kwargs = f"socket_name={socket_name}" if socket_name else None return _get_func( "socket_open", - urscript_args=f"{_quote_string_if_needed(address)}, {port}", + urscript_args=f"{address}, {port}", urscript_kwargs=urscript_kwargs, ) def socket_close(socket_name=None): - urscript_kwargs = ( - f"socket_name={_quote_string_if_needed(socket_name)}" if socket_name else None - ) + urscript_kwargs = f"socket_name={socket_name}" if socket_name else None return _get_func( "socket_close", urscript_kwargs=urscript_kwargs, @@ -271,9 +266,7 @@ def socket_close(socket_name=None): def socket_send_string(string_or_var_name: str, socket_name=None): - urscript_kwargs = ( - f"socket_name={_quote_string_if_needed(socket_name)}" if socket_name else None - ) + urscript_kwargs = f"socket_name={socket_name}" if socket_name else None return _get_func( "socket_send_string", urscript_args=string_or_var_name,