# Copyright 2014 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Unit tests for the cros_list_modified_packages program"""

import functools

from chromite.lib import cros_test_lib
from chromite.lib import parallel_unittest
from chromite.lib import sysroot_lib
from chromite.scripts import cros_list_modified_packages


class ListModifiedWorkonPackagesTest(cros_test_lib.MockTestCase):
    """Test for cros_list_modified_packages.ListModifiedWorkonPackages."""

    def testListModifiedWorkonPackages(self) -> None:
        """Test that no ebuild breaks cros_list_modified_packages"""

        # A hook to set the "all_opt" parameter when calling ListWorkonPackages
        _ListWorkonPackagesPatch = functools.partial(
            cros_list_modified_packages.ListWorkonPackages, all_opt=True
        )

        with self.PatchObject(
            cros_list_modified_packages,
            "ListWorkonPackages",
            side_effect=_ListWorkonPackagesPatch,
        ):
            # ListModifiedWorkonPackages returns a generator object and doesn't
            # actually do any work automatically. We have to extract the
            # elements from it to get it to exercise the code, and we can do
            # that by turning it into a list.
            with parallel_unittest.ParallelMock():
                list(
                    cros_list_modified_packages.ListModifiedWorkonPackages(
                        sysroot=sysroot_lib.Sysroot("/")
                    )
                )
