ComposerRepositoryTest.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. /*
  3. * This file is part of Composer.
  4. *
  5. * (c) Nils Adermann <naderman@naderman.de>
  6. * Jordi Boggiano <j.boggiano@seld.be>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Composer\Test\Repository;
  12. use Composer\Repository\ComposerRepository;
  13. use Composer\IO\NullIO;
  14. use Composer\Test\Mock\FactoryMock;
  15. use Composer\Test\TestCase;
  16. class ComposerRepositoryTest extends TestCase
  17. {
  18. /**
  19. * @dataProvider loadDataProvider
  20. */
  21. public function testLoadData(array $expected, array $repoPackages)
  22. {
  23. $repoConfig = array(
  24. 'url' => 'file://',
  25. );
  26. $repository = $this->getMock(
  27. 'Composer\Repository\ComposerRepository',
  28. array(
  29. 'loadRootServerFile',
  30. 'createPackage',
  31. ),
  32. array(
  33. $repoConfig,
  34. new NullIO,
  35. FactoryMock::createConfig(),
  36. )
  37. );
  38. $repository
  39. ->expects($this->once())
  40. ->method('loadRootServerFile')
  41. ->will($this->returnValue($repoPackages));
  42. foreach ($expected as $at => $arg) {
  43. $stubPackage = $this->getPackage('stub/stub', '1.0.0');
  44. $repository
  45. ->expects($this->at($at + 1))
  46. ->method('createPackage')
  47. ->with($this->identicalTo($arg), $this->equalTo('Composer\Package\CompletePackage'))
  48. ->will($this->returnValue($stubPackage));
  49. }
  50. // Triggers initialization
  51. $packages = $repository->getPackages();
  52. // Final sanity check, ensure the correct number of packages were added.
  53. $this->assertCount(count($expected), $packages);
  54. }
  55. public function loadDataProvider()
  56. {
  57. return array(
  58. // Old repository format
  59. array(
  60. array(
  61. array('name' => 'foo/bar', 'version' => '1.0.0'),
  62. ),
  63. array('foo/bar' => array(
  64. 'name' => 'foo/bar',
  65. 'versions' => array(
  66. '1.0.0' => array('name' => 'foo/bar', 'version' => '1.0.0')
  67. )
  68. )),
  69. ),
  70. // New repository format
  71. array(
  72. array(
  73. array('name' => 'bar/foo', 'version' => '3.14'),
  74. array('name' => 'bar/foo', 'version' => '3.145'),
  75. ),
  76. array('packages' => array(
  77. 'bar/foo' => array(
  78. '3.14' => array('name' => 'bar/foo', 'version' => '3.14'),
  79. '3.145' => array('name' => 'bar/foo', 'version' => '3.145'),
  80. ),
  81. )),
  82. ),
  83. );
  84. }
  85. }