# -*- coding: utf-8 -*-

try:
    import unittest2 as unittest
except ImportError:
    import unittest
import argparse

from parameterized import parameterized

from pungi_utils import config_utils


class TestDefineHelpers(unittest.TestCase):
    @parameterized.expand(
        [
            ([], {}),
            (["foo=bar", "baz=quux"], {"foo": "bar", "baz": "quux"}),
            (["foo="], {"foo": ""}),
            (["foo==bar"], {"foo": "=bar"}),
        ]
    )
    def test_extract_defines(self, input, expected):
        self.assertEqual(config_utils.extract_defines(input), expected)

    @parameterized.expand(["foo=bar", "foo=", "foo==bar"])
    def test_validate_define_correct(self, value):
        self.assertEqual(config_utils.validate_definition(value), value)

    @parameterized.expand(["foo", "=", "=foo", "1=2"])
    def test_validate_define_incorrect(self, value):
        with self.assertRaises(argparse.ArgumentTypeError):
            config_utils.validate_definition(value)

    def test_remove_unknown(self):
        conf = {"foo": "bar"}
        config_utils.remove_unknown(conf, ["foo"])
        self.assertEqual(conf, {})

    def test_remove_known(self):
        conf = {"release_name": "bar"}
        config_utils.remove_unknown(conf, ["release_name"])
        self.assertEqual(conf, {"release_name": "bar"})