#!/usr/bin/env python
# Software License Agreement (GPL)
#
# \file      test_virtualenv_script
# \authors   Paul Bovbel <pbovbel@locusrobotics.com>
# \copyright Copyright (c) (2017,), Locus Robotics, All rights reserved.
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import importlib
import distro
import rostest
import sys
import unittest

from packaging import version


class TestVirtualenv(unittest.TestCase):

    def test_import(self):
        """
        Verify that virtualenv installs the correct version of attrs that's defined
        in this package, rather than the version defined in the dependency.
        """

        attrs = importlib.import_module("attrs")
        self.assertEqual(attrs.__version__, "25.3.0")

    def test_inherited_distro_specific_package_version(self):
        """
        Verify that the correct requirements file from the dependency was inherited.

        This package depends on test_catkin_virtualenv_distro_codename, which exports
        distro-specific requirements files. The virtualenv should have installed:
        - On Jammy: colorama==0.4.4 (from requirements-jammy.txt)
        - On Noble: colorama==0.4.5 (from requirements-noble.txt)
        - On other distros: colorama==0.4.3 (from requirements.txt)
        """
        colorama = importlib.import_module("colorama")
        codename = distro.codename().lower()

        expected_versions = {
            "jammy": "0.4.4",
            "noble": "0.4.5",
        }
        expected = expected_versions.get(codename, "0.4.3")

        self.assertEqual(
            colorama.__version__,
            expected,
            f"Expected inherited colorama {expected} on {codename}, got {colorama.__version__}",
        )


    def test_inherited_distro_specific_package_version(self):
        """
        Verify that the correct requirements file from the dependency was inherited.

        This package depends on test_catkin_virtualenv_distro_codename, which exports
        distro-specific requirements files. The virtualenv should have installed:
        - On Jammy: colorama==0.4.4 (from requirements-jammy.txt)
        - On Noble: colorama==0.4.5 (from requirements-noble.txt)
        - On other distros: colorama==0.4.3 (from requirements.txt)
        """
        colorama = importlib.import_module("colorama")
        codename = distro.codename().lower()

        expected_versions = {
            "jammy": "0.4.4",
            "noble": "0.4.5",
        }
        expected = expected_versions.get(codename, "0.4.3")

        self.assertEqual(
            colorama.__version__,
            expected,
            f"Expected inherited colorama {expected} on {codename}, got {colorama.__version__}",
        )

if __name__ == '__main__':
    rostest.rosrun('test_catkin_virtualenv_inherited', 'test_virtualenv_script', TestVirtualenv, sys.argv)
