async def test_bundle(): descriptor = PackageDescriptor('some/path') descriptor.name = 'python_package' deps = [DependencyDescriptor('pkg1', metadata={'version_eq': '1.3.2'}), DependencyDescriptor('pkg_in_workspace'), DependencyDescriptor('pkg2', metadata={'version_lt': '1.2'}), 'ignored_pkg'] descriptor.dependencies['run'] = deps workspace = {'pkg_in_workspace': 'path/to/pkg'} task_args = MagicMock(build_base='build/base', install_base='install/base', bundle_base='bundle/base') pip_installer = MagicMock() apt_installer = MagicMock() args = BundlePackageArguments( descriptor, {'pip3': pip_installer, 'apt': apt_installer}, task_args) context = TaskContext(pkg=descriptor, args=args, dependencies=workspace) task = PythonBundleTask() task.set_context(context=context) await task.bundle() pip_installer.add_to_install_list.assert_called_once_with('pkg1==1.3.2') apt_calls = apt_installer.add_to_install_list.call_args_list assert len(apt_calls) == 2 assert apt_calls[0][0][0] == 'libpython3-dev' assert apt_calls[1][0][0] == 'python3-pip'
async def test_include_ros_base(): pkg = PackageDescriptor('package/path') pkg.name = 'MyPackageName' pkg.dependencies['run'] = {} installers = { 'apt': MagicMock(), } top_level_args = MagicMock(build_base='build/base', install_base='install/base', bundle_base='bundle/base') args = BundlePackageArguments(pkg, installers, top_level_args) args.ros_distribution = 'kinetic' args.exclude_ros_base = False context = TaskContext(pkg=pkg, args=args, dependencies={}) task = RosBundle() task.set_context(context=context) # Concise read on why it's patched this way. # http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch with patch('colcon_ros_bundle.task.ros_bundle.RosdepWrapper' ) as wrapper: # noqa: E501 with patch('os.environ') as environ: environ.__getitem__.side_effect = access_var wrapper().get_rule.side_effect = _get_rule_side_effect wrapper().resolve.side_effect = _resolve_side_effect await task.bundle() installers['apt'].add_to_install_list.assert_called_with( 'ros-kinetic-ros-base')
async def test_rosdistro_not_defined(): pkg = PackageDescriptor('package/path') pkg.name = 'MyPackageName' pkg.dependencies['run'] = {} installers = { 'apt': MagicMock(), } top_level_args = MagicMock(build_base='build/base', install_base='install/base', bundle_base='bundle/base') args = BundlePackageArguments(pkg, installers, top_level_args) context = TaskContext(pkg=pkg, args=args, dependencies={}) task = RosBundle() task.set_context(context=context) # Concise read on why it's patched this way. # http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch with patch('colcon_ros_bundle.task.ros_bundle.RosdepWrapper') as wrapper: # noqa: E501 with pytest.raises(RuntimeError): wrapper().get_rule.side_effect = _get_rule_side_effect wrapper().resolve.side_effect = _resolve_side_effect await task.bundle() installers['apt'].add_to_install_list.assert_not_called()
async def test_bundle(): pkg = PackageDescriptor('package/path') pkg.name = 'MyPackageName' pkg.dependencies['run'] = { DependencyDescriptor('source_pkg'), DependencyDescriptor('other_pkg'), DependencyDescriptor('system_pkg') } installers = { 'rdmanifest': MagicMock(), 'system': MagicMock(), 'other': MagicMock() } top_level_args = MagicMock(build_base='build/base', install_base='install/base', bundle_base='bundle/base') args = BundlePackageArguments(pkg, installers, top_level_args) args.ros_distribution = 'kinetic' args.exclude_ros_base = True context = TaskContext(pkg=pkg, args=args, dependencies={}) task = RosBundle() task.set_context(context=context) # Concise read on why it's patched this way. # http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch with patch('colcon_ros_bundle.task.ros_bundle.RosdepWrapper' ) as wrapper: # noqa: E501 wrapper().get_rule.side_effect = _get_rule_side_effect wrapper().resolve.side_effect = _resolve_side_effect await task.bundle() installers['rdmanifest'].add_to_install_list.assert_called_with( 'source_pkg', { 's': 'ource', 'uri': 'rdmanifest' }) installers['other'].add_to_install_list.assert_called_with( 'other_pkg_name') installers['system'].add_to_install_list.assert_called_with( 'system_pkg_name')