import pytest

from pip._internal.commands.debug import create_vendor_txt_map
from pip._internal.utils import compatibility_tags


@pytest.mark.parametrize('expected_text', [
    'sys.executable: ',
    'sys.getdefaultencoding: ',
    'sys.getfilesystemencoding: ',
    'locale.getpreferredencoding: ',
    'sys.platform: ',
    'sys.implementation:',
    '\'cert\' config value: ',
    'REQUESTS_CA_BUNDLE: ',
    'CURL_CA_BUNDLE: ',
    'pip._vendor.certifi.where(): ',
    'pip._vendor.DEBUNDLED: ',
    'vendored library versions:',

])
def test_debug(script, expected_text):
    """
    Check that certain strings are present in the output.
    """
    args = ['debug']
    result = script.pip(*args, allow_stderr_warning=True)
    stdout = result.stdout

    assert expected_text in stdout


def test_debug__library_versions(script):
    """
    Check the library versions normal output.
    """
    args = ['debug']
    result = script.pip(*args, allow_stderr_warning=True)
    print(result.stdout)

    vendored_versions = create_vendor_txt_map()
    for name, value in vendored_versions.items():
        assert '{}=={}'.format(name, value) in result.stdout


@pytest.mark.parametrize(
    'args',
    [
        [],
        ['--verbose'],
    ]
)
def test_debug__tags(script, args):
    """
    Check the compatible tag output.
    """
    args = ['debug'] + args
    result = script.pip(*args, allow_stderr_warning=True)
    stdout = result.stdout

    tags = compatibility_tags.get_supported()
    expected_tag_header = 'Compatible tags: {}'.format(len(tags))
    assert expected_tag_header in stdout

    show_verbose_note = '--verbose' not in args
    assert (
        '...\n  [First 10 tags shown. Pass --verbose to show all.]' in stdout
    ) == show_verbose_note


@pytest.mark.parametrize(
    'args, expected',
    [
        (['--python-version', '3.7'], "(target: version_info='3.7')"),
    ]
)
def test_debug__target_options(script, args, expected):
    """
    Check passing target-related options.
    """
    args = ['debug'] + args
    result = script.pip(*args, allow_stderr_warning=True)
    stdout = result.stdout

    assert 'Compatible tags: ' in stdout
    assert expected in stdout
