blob: d22f95fe108b4dd3706083ceee21a7cbb03d66ad [file] [log] [blame] [edit]
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for package_completers."""
import argparse
from pathlib import Path
from typing import Callable, List
import pytest
from chromite.lib import portage_util
from chromite.lib import sysroot_lib
from chromite.lib.completers import package_completers
# Pytest's method of declaring fixtures causes Pylint to complain about
# redefined outer names.
# pylint: disable=redefined-outer-name
class MockSysroot:
"""Class to mock a Sysroot object for testing."""
def get_overlays(self):
return [
'/test/path/overlay1',
'/test/path/overlay2',
]
@pytest.fixture
def simple_parser() -> argparse.ArgumentParser:
"""Create a simple parser with arguments needed for testing."""
parser = argparse.ArgumentParser()
parser.add_argument('--sysroot')
parser.add_argument('--board')
parser.add_argument('--build-target')
parser.add_argument('--foo')
return parser
@pytest.fixture
def get_ebuilds() -> Callable:
"""Returns ebuild files for testing."""
def mock_return(*_args, **_kwargs) -> List[Path]:
return [
Path('/package1/bar1/bar1-1.0.ebuild'),
Path('/package2/bar2/bar2-2.0.ebuild'),
]
return mock_return
def test_package(monkeypatch, get_ebuilds, simple_parser):
"""Test that the package completer returns packages with versions."""
def mock_sysroot(sysroot_path, *_args, **_kwargs):
assert sysroot_path == '/build/grunt'
return MockSysroot()
monkeypatch.setattr(sysroot_lib, 'Sysroot', mock_sysroot)
monkeypatch.setattr(portage_util, 'FindEbuildsForOverlays', get_ebuilds)
expected_packages = ['package1/bar1-1.0', 'package2/bar2-2.0']
packages = package_completers.package(
None, None, None, simple_parser.parse_args(['--board', 'grunt']))
assert packages == expected_packages
def test_package_atom(monkeypatch, get_ebuilds, simple_parser):
"""Test that the package atom completer returns packages without versions."""
def mock_sysroot(sysroot_path, *_args, **_kwargs):
assert sysroot_path == '/'
return MockSysroot()
monkeypatch.setattr(sysroot_lib, 'Sysroot', mock_sysroot)
monkeypatch.setattr(portage_util, 'FindEbuildsForOverlays', get_ebuilds)
expected_packages = ['package1/bar1', 'package2/bar2']
packages = package_completers.package_atom(
None, None, None, simple_parser.parse_args(['--foo', 'bar']))
assert packages == expected_packages