Files
gnatcoll-bindings/python3/tests/testsuite.py
Adrien Boulanger 7b0376a444 T416-023: Add python3-bindings tests
Change-Id: Id656b2905eaa4536e37ec00314479a9e248129e3
2020-07-08 17:06:58 +02:00

100 lines
3.2 KiB
Python
Executable File

#! /usr/bin/env python3
from e3.testsuite import Testsuite
from e3.testsuite.driver import TestDriver
from e3.testsuite.result import TestStatus
from e3.testsuite.process import check_call
from e3.env import Env
from e3.fs import mkdir, cp, ls
import logging
import sys
import os
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
class DefaultDriver(TestDriver):
@property
def project_file(self):
result = os.path.join(self.test_env["test_dir"], "test.gpr")
if not os.path.isfile(result):
result = os.path.join(self.env.root_dir, "support", "test.gpr")
return result
@property
def build_dir(self):
return self.test_env["working_dir"]
@property
def test_source_dir(self):
return self.test_env["test_dir"]
@property
def support_source_dir(self):
return os.path.join(self.env.root_dir, "support")
def build(self, prev, slot):
self.logger = logging.getLogger(f"test.{self.test_env['test_name']}")
env = {
"TEST_SOURCES": self.test_source_dir,
"SUPPORT_SOURCES": self.support_source_dir,
}
mkdir(self.build_dir)
py_files = ls(os.path.join(self.test_source_dir, "*.py"))
if py_files:
cp(py_files, self.build_dir)
check_call(
self,
["gprbuild", "-P", self.project_file, "--relocate-build-tree", "-p"],
cwd=self.build_dir,
timeout=300,
env=env,
ignore_environ=False,
)
def run(self, prev, slot):
if self.result.status == TestStatus.ERROR: # means that status was not set
test_py = os.path.join(self.build_dir, "test.py")
if os.path.isfile(test_py):
self.test_process = check_call(
self, [sys.executable, "./test.py"], cwd=self.build_dir, timeout=60
)
else:
self.test_process = check_call(
self,
[os.path.join(self.build_dir, "obj", "test")]
+ self.test_env.get("test_args", []),
timeout=60,
cwd=self.build_dir,
)
def analyze(self, prev, slot):
if self.result.status == TestStatus.ERROR: # means that status was not set
if "<=== TEST PASSED ===>" not in self.test_process.out:
self.result.set_status(TestStatus.FAIL)
else:
self.result.set_status(TestStatus.PASS)
self.push_result()
def add_test(self, dag):
self.add_fragment(dag, "build")
self.add_fragment(dag, "run", after=["build"])
self.add_fragment(dag, "analyze", after=["run"])
class GNATCOLLPython3Test(Testsuite):
"""Testsuite for the bc(1) calculator."""
test_driver_map = {"default": DefaultDriver}
default_driver = "default"
tests_subdir = "tests"
if __name__ == "__main__":
Env.add_search_path("GPR_PROJECT_PATH", os.path.join(ROOT_DIR, "support"))
assert (
"ADA_PYTHON_HOME" in os.environ
), "ADA_PYTHON_HOME should point to Python distrib used to build the binding"
sys.exit(GNATCOLLPython3Test().testsuite_main())