#
# SPDX-License-Identifier: MIT
#

class TestSDK(object):
    def run(self, d):
        import json
        import logging
        from oeqa.sdk.context import OESDKTestContext, OESDKTestContextExecutor
        from oeqa.utils import make_logger_bitbake_compatible

        pn = d.getVar("PN")

        logger = make_logger_bitbake_compatible(logging.getLogger("BitBake"))

        sdk_dir = d.expand("${WORKDIR}/testsdk/")
        bb.utils.remove(sdk_dir, True)
        bb.utils.mkdirhier(sdk_dir)

        sdk_envs = OESDKTestContextExecutor._get_sdk_environs(d.getVar("DEPLOY_DIR_IMAGE"))
        tdname = d.expand("${DEPLOY_DIR_IMAGE}/${PN}.testdata.json")
        test_data = json.load(open(tdname, "r"))

        host_pkg_manifest = {"cmake-native":"", "gcc-cross":"", "gettext-native":"", "meson-native":"", "perl-native":"", "python3-core-native":"", }
        target_pkg_manifest = {"gtk+3":""}

        for s in sdk_envs:
            bb.plain("meta-ide-support based SDK testing environment: %s" % s)

            sdk_env = sdk_envs[s]

            tc = OESDKTestContext(td=test_data, logger=logger, sdk_dir=sdk_dir,
                sdk_env=sdk_env, target_pkg_manifest=target_pkg_manifest,
                host_pkg_manifest=host_pkg_manifest)

            tc.loadTests(OESDKTestContextExecutor.default_cases)

            results = tc.runTests()
            if results:
                results.logSummary(pn)

            if (not results) or (not results.wasSuccessful()):
                bb.fatal('%s - FAILED' % (pn,), forcelog=True)
