Beispiel #1
0
def test_get_package_discovery_extensions():
    with EntryPointContext(
            extension1=Extension1,
            extension2=Extension2,
            extension3=Extension3,
            extension4=Extension4,
    ):
        extensions = get_package_discovery_extensions()
        assert ['extension2', 'extension4', 'extension3', 'extension1'] == \
            list(extensions.keys())
Beispiel #2
0
def test__discover_packages():
    descs = _discover_packages(None, None, {})
    assert descs == set()

    with EntryPointContext(
            extension1=Extension1,
            extension2=Extension2,
            extension3=Extension3,
            extension4=Extension4,
    ):
        extensions = get_package_discovery_extensions()

        # mock the discover method in the order the extensions are being called
        extensions['extension2'].discover = Mock(
            side_effect=ValueError('exception in discover'))
        extensions['extension4'].discover = Mock(
            side_effect=extensions['extension4'].discover)
        extensions['extension3'].discover = Mock(
            return_value={
                PackageDescriptor('/extension3/pkg1'),
                PackageDescriptor('/extension3/pkg2')
            })
        # returns None instead of a set
        extensions['extension1'].discover = Mock()

        with patch('colcon_core.package_discovery.logger.error') as error:
            descs = _discover_packages(Mock(), None, extensions)

            # in the order the extensions are being called
            assert extensions['extension2'].discover.call_count == 1
            assert extensions['extension4'].discover.call_count == 1
            assert extensions['extension3'].discover.call_count == 1
            assert extensions['extension1'].discover.call_count == 1

            # the raised exceptions are catched and result in error messages
            assert error.call_count == 2
            assert len(error.call_args_list[0][0]) == 1
            assert error.call_args_list[0][0][0].startswith(
                "Exception in package discovery extension 'extension2': "
                'exception in discover\n')
            assert len(error.call_args_list[1][0]) == 1
            assert error.call_args_list[1][0][0].startswith(
                "Exception in package discovery extension 'extension1': "
                'discover() should return a set\n')

        assert len(descs) == 2
        expected_path = '/extension3/pkg1'.replace('/', os.sep)
        assert expected_path in (str(d.path) for d in descs)
        expected_path = '/extension3/pkg2'.replace('/', os.sep)
        assert expected_path in (str(d.path) for d in descs)
Beispiel #3
0
def test_discover_packages():
    # check without any extensions
    with patch(
            'colcon_core.package_discovery.get_package_discovery_extensions',
            return_value={},
    ) as get_extensions:
        with patch('colcon_core.package_discovery.logger.warning') as warn:
            descs = discover_packages(None, None)
    assert get_extensions.call_count == 1
    warn.assert_called_once_with('No package discovery extensions found')
    assert descs == set()

    with EntryPointContext(
            extension1=Extension1,
            extension2=Extension2,
            extension3=Extension3,
            extension4=Extension4,
    ):
        extensions = get_package_discovery_extensions()
        assert len(extensions) == 4

        # check without any parameters
        extensions['extension1'].discover = Mock(
            return_value={PackageDescriptor('/extension1/pkg1')})
        extensions['extension2'].discover = Mock(
            return_value={PackageDescriptor('/extension2/pkg1')})

        descs = discover_packages(None, None, discovery_extensions=extensions)
        assert len(descs) == 2
        expected_path = '/extension1/pkg1'.replace('/', os.sep)
        assert expected_path in (str(d.path) for d in descs)
        expected_path = '/extension2/pkg1'.replace('/', os.sep)
        assert expected_path in (str(d.path) for d in descs)

        # check with parameters
        extensions['extension3'].has_parameters = Mock(return_value=True)
        extensions['extension3'].discover = Mock(
            return_value={
                PackageDescriptor('/extension3/pkg1'),
                PackageDescriptor('/extension3/pkg2')
            })

        descs = discover_packages(None, None, discovery_extensions=extensions)
        assert len(descs) == 2
        expected_path = '/extension3/pkg1'.replace('/', os.sep)
        assert expected_path in (str(d.path) for d in descs)
        expected_path = '/extension3/pkg2'.replace('/', os.sep)
        assert expected_path in (str(d.path) for d in descs)
Beispiel #4
0
def test_add_package_discovery_arguments():
    parser = Mock()
    with EntryPointContext(
            extension1=Extension1,
            extension2=Extension2,
            extension3=Extension3,
            extension4=Extension4,
    ):
        add_package_discovery_arguments(parser)

        all_extensions = get_package_discovery_extensions()

        extensions = {'extension2': all_extensions['extension2']}
        # mock the has_default method
        extensions['extension2'].has_default = Mock(
            side_effect=ValueError('exception in has_default'))
        with patch('colcon_core.package_discovery.logger.error') as error:
            add_package_discovery_arguments(parser, extensions=extensions)
            # the raised exception is catched and results in an error message
            assert error.call_count == 1
            assert len(error.call_args[0]) == 1
            assert error.call_args[0][0].startswith(
                "Exception in package discovery extension 'extension2': "
                'exception in has_default\n')

        extensions = {'extension3': all_extensions['extension3']}
        # mock the add_arguments method
        extensions['extension3'].add_arguments = Mock(
            side_effect=ValueError('exception in add_arguments'))
        with patch('colcon_core.package_discovery.logger.error') as error:
            add_package_discovery_arguments(parser, extensions=extensions)
            # the raised exception is catched and results in an error message
            assert error.call_count == 1
            assert len(error.call_args[0]) == 1
            assert error.call_args[0][0].startswith(
                "Exception in package discovery extension 'extension3': "
                'exception in add_arguments\n')

        # mock the has_default method and return True
        extensions['extension3'].has_default = Mock(return_value=True)
        add_package_discovery_arguments(parser, extensions=extensions)
Beispiel #5
0
def test__get_extensions_with_parameters():
    with EntryPointContext(
            extension1=Extension1,
            extension2=Extension2,
            extension3=Extension3,
            extension4=Extension4,
    ):
        extensions = get_package_discovery_extensions()

        # mock the has_parameters method
        extensions['extension1'].has_parameters = Mock(return_value=True)
        extensions['extension2'].has_parameters = Mock(
            side_effect=ValueError('exception in has_parameters'))
        extensions['extension3'].has_parameters = Mock(
            side_effect=PackageDiscoveryExtensionPoint.has_parameters)
        extensions['extension4'].has_parameters = Mock(return_value=False)

        with_parameters = _get_extensions_with_parameters(Mock(), extensions)
        assert extensions['extension1'].has_parameters.call_count == 1
        assert extensions['extension2'].has_parameters.call_count == 1
        assert extensions['extension3'].has_parameters.call_count == 1
        assert extensions['extension4'].has_parameters.call_count == 1
        assert set(with_parameters.keys()) == {'extension1'}