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 93 94 95 96 97 98 99
|
#! /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())
|