|
14 | 14 | from colcon_core.shell import get_colcon_prefix_path
|
15 | 15 | from colcon_core.shell import get_command_environment
|
16 | 16 | from colcon_core.shell import get_environment_variables
|
| 17 | +from colcon_core.shell import get_find_installed_packages_extensions |
17 | 18 | from colcon_core.shell import get_shell_extensions
|
| 19 | +from colcon_core.shell import FindInstalledPackagesExtensionPoint |
18 | 20 | from colcon_core.shell import ShellExtensionPoint
|
| 21 | +from colcon_core.shell.installed_packages import IsolatedInstalledPackageFinder |
| 22 | +from colcon_core.shell.installed_packages import MergedInstalledPackageFinder |
19 | 23 | from mock import Mock
|
20 | 24 | from mock import patch
|
21 | 25 | import pytest
|
@@ -312,6 +316,22 @@ def test_check_dependency_availability():
|
312 | 316 | assert '--packages-ignore pkgA' in warn.call_args[0][0]
|
313 | 317 |
|
314 | 318 |
|
| 319 | +class FIExtension1(FindInstalledPackagesExtensionPoint): |
| 320 | + PRIORITY = 90 |
| 321 | + |
| 322 | + |
| 323 | +class FIExtension2(FindInstalledPackagesExtensionPoint): |
| 324 | + pass |
| 325 | + |
| 326 | + |
| 327 | +def test_get_find_installed_packages_extensions(): |
| 328 | + with EntryPointContext(extension1=FIExtension1, extension2=FIExtension2): |
| 329 | + extensions = get_find_installed_packages_extensions() |
| 330 | + assert list(extensions.keys()) == [100, 90] |
| 331 | + assert list(extensions[100].keys()) == ['extension2'] |
| 332 | + assert list(extensions[90].keys()) == ['extension1'] |
| 333 | + |
| 334 | + |
315 | 335 | def test_find_installed_packages_in_environment():
|
316 | 336 | with TemporaryDirectory(prefix='test_colcon_') as prefix_path:
|
317 | 337 | prefix_path = Path(prefix_path)
|
@@ -339,51 +359,55 @@ def test_find_installed_packages_in_environment():
|
339 | 359 |
|
340 | 360 |
|
341 | 361 | def test_find_installed_packages():
|
342 |
| - with TemporaryDirectory(prefix='test_colcon_') as install_base: |
343 |
| - install_base = Path(install_base) |
344 |
| - |
345 |
| - # install base doesn't exist |
346 |
| - assert find_installed_packages(install_base) is None |
| 362 | + with EntryPointContext( |
| 363 | + colcon_isolated=IsolatedInstalledPackageFinder, |
| 364 | + colcon_merged=MergedInstalledPackageFinder |
| 365 | + ): |
| 366 | + with TemporaryDirectory(prefix='test_colcon_') as install_base: |
| 367 | + install_base = Path(install_base) |
347 | 368 |
|
348 |
| - # unknown install layout |
349 |
| - marker_file = install_base / '.colcon_install_layout' |
350 |
| - marker_file.write_text('unknown') |
351 |
| - assert find_installed_packages(install_base) is None |
| 369 | + # install base doesn't exist |
| 370 | + assert find_installed_packages(install_base) is None |
352 | 371 |
|
353 |
| - # package index directory doesn't exist |
354 |
| - marker_file.write_text('merged') |
355 |
| - packages = find_installed_packages(install_base) |
356 |
| - assert len(packages) == 0 |
357 |
| - |
358 |
| - with patch( |
359 |
| - 'colcon_core.shell.installed_packages' |
360 |
| - '.get_relative_package_index_path', |
361 |
| - return_value=Path('relative/package/index') |
362 |
| - ) as rel_path: |
363 |
| - # setup for isolated case |
364 |
| - (install_base / 'dummy_file').write_text('') |
365 |
| - (install_base / '.hidden_dir').mkdir() |
366 |
| - (install_base / 'dummy_dir' / rel_path() / 'dummy_dir').mkdir( |
367 |
| - parents=True) |
368 |
| - (install_base / 'pkgA' / rel_path()).mkdir(parents=True) |
369 |
| - (install_base / 'pkgA' / rel_path() / 'pkgA').write_text('') |
370 |
| - |
371 |
| - # setup for merged case |
372 |
| - (install_base / rel_path() / 'dummy_dir').mkdir(parents=True) |
373 |
| - (install_base / rel_path() / '.dummy').write_text('') |
374 |
| - (install_base / rel_path() / 'pkgB').write_text('') |
375 |
| - (install_base / rel_path() / 'pkgC').write_text('') |
376 |
| - |
377 |
| - marker_file.write_text('isolated') |
378 |
| - packages = find_installed_packages(install_base) |
379 |
| - assert len(packages) == 1 |
380 |
| - assert 'pkgA' in packages.keys() |
381 |
| - assert packages['pkgA'] == install_base / 'pkgA' |
| 372 | + # unknown install layout |
| 373 | + marker_file = install_base / '.colcon_install_layout' |
| 374 | + marker_file.write_text('unknown') |
| 375 | + assert find_installed_packages(install_base) is None |
382 | 376 |
|
| 377 | + # package index directory doesn't exist |
383 | 378 | marker_file.write_text('merged')
|
384 | 379 | packages = find_installed_packages(install_base)
|
385 |
| - assert len(packages) == 2 |
386 |
| - assert 'pkgB' in packages.keys() |
387 |
| - assert packages['pkgC'] == install_base |
388 |
| - assert 'pkgC' in packages.keys() |
389 |
| - assert packages['pkgB'] == install_base |
| 380 | + assert len(packages) == 0 |
| 381 | + |
| 382 | + with patch( |
| 383 | + 'colcon_core.shell.installed_packages' |
| 384 | + '.get_relative_package_index_path', |
| 385 | + return_value=Path('relative/package/index') |
| 386 | + ) as rel_path: |
| 387 | + # setup for isolated case |
| 388 | + (install_base / 'dummy_file').write_text('') |
| 389 | + (install_base / '.hidden_dir').mkdir() |
| 390 | + (install_base / 'dummy_dir' / rel_path() / 'dummy_dir').mkdir( |
| 391 | + parents=True) |
| 392 | + (install_base / 'pkgA' / rel_path()).mkdir(parents=True) |
| 393 | + (install_base / 'pkgA' / rel_path() / 'pkgA').write_text('') |
| 394 | + |
| 395 | + # setup for merged case |
| 396 | + (install_base / rel_path() / 'dummy_dir').mkdir(parents=True) |
| 397 | + (install_base / rel_path() / '.dummy').write_text('') |
| 398 | + (install_base / rel_path() / 'pkgB').write_text('') |
| 399 | + (install_base / rel_path() / 'pkgC').write_text('') |
| 400 | + |
| 401 | + marker_file.write_text('isolated') |
| 402 | + packages = find_installed_packages(install_base) |
| 403 | + assert len(packages) == 1 |
| 404 | + assert 'pkgA' in packages.keys() |
| 405 | + assert packages['pkgA'] == install_base / 'pkgA' |
| 406 | + |
| 407 | + marker_file.write_text('merged') |
| 408 | + packages = find_installed_packages(install_base) |
| 409 | + assert len(packages) == 2 |
| 410 | + assert 'pkgB' in packages.keys() |
| 411 | + assert packages['pkgC'] == install_base |
| 412 | + assert 'pkgC' in packages.keys() |
| 413 | + assert packages['pkgB'] == install_base |
0 commit comments