# Copyright 2022 Antoine Fontaine
# Copyright 2022 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
import pytest
import sys

import pmb_test
import pmb_test.const
import pmb.parse.kconfig


@pytest.fixture
def args(tmpdir, request):
    import pmb.parse
    sys.argv = ["pmbootstrap.py", "kconfig", "check"]
    args = pmb.parse.arguments()
    args.log = args.work + "/log_testsuite.txt"
    pmb.helpers.logging.init(args)
    request.addfinalizer(pmb.helpers.logging.logfd.close)
    return args


def test_kconfig_check(args):
    # basic checks, from easiers to hard-ish
    dir = f"{pmb_test.const.testdata}/kconfig_check/"
    assert not pmb.parse.kconfig.check_file(dir +
                                            "bad-missing-required-option")
    assert pmb.parse.kconfig.check_file(dir + "good")
    assert not pmb.parse.kconfig.check_file(dir + "bad-wrong-option-set")
    assert pmb.parse.kconfig.check_file(dir + "good-anbox",
                                        anbox=True)
    assert not pmb.parse.kconfig.check_file(dir +
                                            "bad-array-missing-some-options",
                                            anbox=True)
    assert pmb.parse.kconfig.check_file(dir + "good-nftables",
                                        nftables=True)
    assert not pmb.parse.kconfig.check_file(dir + "bad-nftables",
                                            nftables=True)
    assert pmb.parse.kconfig.check_file(dir + "good-zram",
                                        zram=True)

    # tests on real devices

    # it's a postmarketOS device, it will have the required options, and
    # supports nftables (with pmb:kconfigcheck-nftables)
    assert pmb.parse.kconfig.check(args, "nokia-n900")

    # supports Anbox (with pmb:kconfigcheck-anbox)
    assert pmb.parse.kconfig.check(args, "postmarketos-allwinner")

    # testing the force param: nokia-n900 will never have anbox support
    assert not pmb.parse.kconfig.check(args, "nokia-n900",
                                       force_anbox_check=True)

    # supports zram (with pmb:kconfigcheck-zram), nftables
    assert pmb.parse.kconfig.check(args, "linux-purism-librem5")
