blob: 6e1a347d99669c1488d6e25ea06f64e990535933 [file] [log] [blame]
import os
import pytest
from buildstream._exceptions import ErrorDomain
from buildstream import _yaml
from buildstream.plugins.sources.pip import _match_package_name
from tests.testutils import cli
DATA_DIR = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
'pip',
)
def generate_project(project_dir, tmpdir):
project_file = os.path.join(project_dir, "project.conf")
_yaml.dump({'name': 'foo'}, project_file)
# Test that without ref, consistency is set appropriately.
@pytest.mark.datafiles(os.path.join(DATA_DIR, 'no-ref'))
def test_no_ref(cli, tmpdir, datafiles):
project = os.path.join(datafiles.dirname, datafiles.basename)
generate_project(project, tmpdir)
assert cli.get_element_state(project, 'target.bst') == 'no reference'
# Test that pip is not allowed to be the first source
@pytest.mark.datafiles(os.path.join(DATA_DIR, 'first-source-pip'))
def test_first_source(cli, tmpdir, datafiles):
project = os.path.join(datafiles.dirname, datafiles.basename)
generate_project(project, tmpdir)
result = cli.run(project=project, args=[
'show', 'target.bst'
])
result.assert_main_error(ErrorDomain.ELEMENT, None)
# Test that error is raised when neither packges nor requirements files
# have been specified
@pytest.mark.datafiles(os.path.join(DATA_DIR, 'no-packages'))
def test_no_packages(cli, tmpdir, datafiles):
project = os.path.join(datafiles.dirname, datafiles.basename)
generate_project(project, tmpdir)
result = cli.run(project=project, args=[
'show', 'target.bst'
])
result.assert_main_error(ErrorDomain.SOURCE, None)
# Test that pip source parses tar ball names correctly for the ref
@pytest.mark.parametrize(
'tarball, expected_name, expected_version',
[
('dotted.package-0.9.8.tar.gz', 'dotted.package', '0.9.8'),
('hyphenated-package-2.6.0.tar.gz', 'hyphenated-package', '2.6.0'),
('underscore_pkg-3.1.0.tar.gz', 'underscore_pkg', '3.1.0'),
('numbers2and5-1.0.1.tar.gz', 'numbers2and5', '1.0.1'),
('multiple.dots.package-5.6.7.tar.gz', 'multiple.dots.package', '5.6.7'),
('multiple-hyphens-package-1.2.3.tar.gz', 'multiple-hyphens-package', '1.2.3'),
('multiple_underscore_pkg-3.4.5.tar.gz', 'multiple_underscore_pkg', '3.4.5'),
('shortversion-1.0.tar.gz', 'shortversion', '1.0'),
('longversion-1.2.3.4.tar.gz', 'longversion', '1.2.3.4')
])
def test_match_package_name(tarball, expected_name, expected_version):
name, version = _match_package_name(tarball)
assert (expected_name, expected_version) == (name, version)