summaryrefslogtreecommitdiffstats
path: root/python/mozperftest/mozperftest/tests/test_script.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozperftest/mozperftest/tests/test_script.py')
-rw-r--r--python/mozperftest/mozperftest/tests/test_script.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/python/mozperftest/mozperftest/tests/test_script.py b/python/mozperftest/mozperftest/tests/test_script.py
new file mode 100644
index 0000000000..3947646fdb
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_script.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import mozunit
+import pytest
+
+from mozperftest.script import (
+ BadOptionTypeError,
+ MissingFieldError,
+ ParseError,
+ ScriptInfo,
+ ScriptType,
+)
+from mozperftest.tests.support import (
+ EXAMPLE_TEST,
+ EXAMPLE_XPCSHELL_TEST,
+ EXAMPLE_XPCSHELL_TEST2,
+ HERE,
+)
+
+
+def check_options(info):
+ assert info["options"]["default"]["perfherder"]
+ assert info["options"]["linux"]["perfherder_metrics"] == [
+ {"name": "speed", "unit": "bps_lin"}
+ ]
+ assert info["options"]["win"]["perfherder_metrics"] == [
+ {"name": "speed", "unit": "bps_win"}
+ ]
+ assert info["options"]["mac"]["perfherder_metrics"] == [
+ {"name": "speed", "unit": "bps_mac"}
+ ]
+
+
+def test_scriptinfo_bt():
+ info = ScriptInfo(EXAMPLE_TEST)
+ assert info["author"] == "N/A"
+ display = str(info)
+ assert "The description of the example test." in display
+ assert info.script_type == ScriptType.browsertime
+ check_options(info)
+
+
+@pytest.mark.parametrize("script", [EXAMPLE_XPCSHELL_TEST, EXAMPLE_XPCSHELL_TEST2])
+def test_scriptinfo_xpcshell(script):
+ info = ScriptInfo(script)
+ assert info["author"] == "N/A"
+
+ display = str(info)
+ assert "The description of the example test." in display
+ assert info.script_type == ScriptType.xpcshell
+ check_options(info)
+
+
+def test_scriptinfo_failure():
+ bad_example = HERE / "data" / "failing-samples" / "perftest_doc_failure_example.js"
+ with pytest.raises(MissingFieldError):
+ ScriptInfo(bad_example)
+
+
+def test_parserror():
+ exc = Exception("original")
+ error = ParseError("script", exc)
+ assert error.exception is exc
+ assert "original" in str(error)
+
+
+def test_update_args():
+ args = {"perfherder_metrics": [{"name": "yey"}]}
+ info = ScriptInfo(EXAMPLE_TEST)
+ new_args = info.update_args(**args)
+
+ # arguments should not be overriden
+ assert new_args["perfherder_metrics"] == [{"name": "yey"}]
+
+ # arguments in platform-specific options should
+ # override default options
+ assert new_args["verbose"]
+
+
+def test_update_args_metrics_list_failure():
+ args = {"perfherder_metrics": "yey"}
+ info = ScriptInfo(EXAMPLE_TEST)
+
+ with pytest.raises(BadOptionTypeError):
+ info.update_args(**args)
+
+
+def test_update_args_metrics_json_failure():
+ args = {"perfherder_metrics": ["yey"]}
+ info = ScriptInfo(EXAMPLE_TEST)
+
+ with pytest.raises(BadOptionTypeError):
+ info.update_args(**args)
+
+
+if __name__ == "__main__":
+ mozunit.main()