forked from robotframework/PythonLibCore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_plugin_api.py
92 lines (74 loc) · 3.52 KB
/
test_plugin_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import pytest
from helpers import my_plugin_test
from robotlibcore import Module, PluginError, PluginParser
@pytest.fixture(scope="module")
def plugin_parser() -> PluginParser:
return PluginParser()
def test_no_plugins_parsing(plugin_parser):
for item in [None, ""]:
assert plugin_parser._string_to_modules(item) == []
def test_plugins_string_to_modules(plugin_parser):
result = plugin_parser._string_to_modules("foo/bar.by")
assert result == [Module("foo/bar.by", [], {})]
result = plugin_parser._string_to_modules("path.to.MyLibrary,path.to.OtherLibrary")
assert result == [
Module("path.to.MyLibrary", [], {}),
Module("path.to.OtherLibrary", [], {}),
]
result = plugin_parser._string_to_modules("path.to.MyLibrary , path.to.OtherLibrary")
assert result == [
Module("path.to.MyLibrary", [], {}),
Module("path.to.OtherLibrary", [], {}),
]
result = plugin_parser._string_to_modules("path.to.MyLibrary;foo;bar , path.to.OtherLibrary;1")
assert result == [
Module("path.to.MyLibrary", ["foo", "bar"], {}),
Module("path.to.OtherLibrary", ["1"], {}),
]
result = plugin_parser._string_to_modules("PluginWithKwArgs.py;kw1=Text1;kw2=Text2")
assert result == [
Module("PluginWithKwArgs.py", [], {"kw1": "Text1", "kw2": "Text2"}),
]
def test_parse_plugins(plugin_parser: PluginParser):
plugins = plugin_parser.parse_plugins("helpers.my_plugin_test.TestClass")
assert len(plugins) == 1
assert isinstance(plugins[0], my_plugin_test.TestClass)
plugins = plugin_parser.parse_plugins("helpers.my_plugin_test.TestClass,helpers.my_plugin_test.TestClassWithBase")
assert len(plugins) == 2
assert isinstance(plugins[0], my_plugin_test.TestClass)
assert isinstance(plugins[1], my_plugin_test.TestClassWithBase)
def test_parse_plugins_as_list(plugin_parser):
plugins = plugin_parser.parse_plugins(["helpers.my_plugin_test.TestClass"])
assert len(plugins) == 1
assert isinstance(plugins[0], my_plugin_test.TestClass)
plugins = plugin_parser.parse_plugins(
["helpers.my_plugin_test.TestClass", "helpers.my_plugin_test.TestClassWithBase"],
)
assert len(plugins) == 2
assert isinstance(plugins[0], my_plugin_test.TestClass)
assert isinstance(plugins[1], my_plugin_test.TestClassWithBase)
def test_parse_plugins_with_base():
parser = PluginParser(my_plugin_test.LibraryBase)
plugins = parser.parse_plugins("helpers.my_plugin_test.TestClassWithBase")
assert len(plugins) == 1
assert isinstance(plugins[0], my_plugin_test.TestClassWithBase)
with pytest.raises(PluginError) as excinfo:
parser.parse_plugins("helpers.my_plugin_test.TestClass")
assert "Plugin does not inherit <class 'helpers.my_plugin_test.LibraryBase'>" in str(excinfo.value)
def test_plugin_keywords(plugin_parser):
plugins = plugin_parser.parse_plugins("helpers.my_plugin_test.TestClass,helpers.my_plugin_test.TestClassWithBase")
keywords = plugin_parser.get_plugin_keywords(plugins)
assert len(keywords) == 2
assert keywords[0] == "another_keyword"
assert keywords[1] == "new_keyword"
def test_plugin_python_objects():
class PythonObject:
x = 1
y = 2
python_object = PythonObject()
parser = PluginParser(my_plugin_test.LibraryBase, [python_object])
plugins = parser.parse_plugins("helpers.my_plugin_test.TestPluginWithPythonArgs;4")
assert len(plugins) == 1
plugin = plugins[0]
assert plugin.python_class.x == 1
assert plugin.python_class.y == 2