SingleScalarHydratorTest.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Doctrine\Tests\ORM\Hydration;
  3. use Doctrine\Tests\Mocks\HydratorMockStatement;
  4. use Doctrine\ORM\Query\ResultSetMapping;
  5. require_once __DIR__ . '/../../TestInit.php';
  6. class SingleScalarHydratorTest extends HydrationTestCase
  7. {
  8. /** Result set provider for the HYDRATE_SINGLE_SCALAR tests */
  9. public static function singleScalarResultSetProvider() {
  10. return array(
  11. // valid
  12. array('name' => 'result1',
  13. 'resultSet' => array(
  14. array(
  15. 'u__name' => 'romanb'
  16. )
  17. )),
  18. // valid
  19. array('name' => 'result2',
  20. 'resultSet' => array(
  21. array(
  22. 'u__id' => '1'
  23. )
  24. )),
  25. // invalid
  26. array('name' => 'result3',
  27. 'resultSet' => array(
  28. array(
  29. 'u__id' => '1',
  30. 'u__name' => 'romanb'
  31. )
  32. )),
  33. // invalid
  34. array('name' => 'result4',
  35. 'resultSet' => array(
  36. array(
  37. 'u__id' => '1'
  38. ),
  39. array(
  40. 'u__id' => '2'
  41. )
  42. )),
  43. );
  44. }
  45. /**
  46. * select u.name from CmsUser u where u.id = 1
  47. *
  48. * @dataProvider singleScalarResultSetProvider
  49. */
  50. public function testHydrateSingleScalar($name, $resultSet)
  51. {
  52. $rsm = new ResultSetMapping;
  53. $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
  54. $rsm->addFieldResult('u', 'u__id', 'id');
  55. $rsm->addFieldResult('u', 'u__name', 'name');
  56. $stmt = new HydratorMockStatement($resultSet);
  57. $hydrator = new \Doctrine\ORM\Internal\Hydration\SingleScalarHydrator($this->_em);
  58. if ($name == 'result1') {
  59. $result = $hydrator->hydrateAll($stmt, $rsm);
  60. $this->assertEquals('romanb', $result);
  61. } else if ($name == 'result2') {
  62. $result = $hydrator->hydrateAll($stmt, $rsm);
  63. $this->assertEquals(1, $result);
  64. } else if ($name == 'result3' || $name == 'result4') {
  65. try {
  66. $result = $hydrator->hydrateAll($stmt, $rsm);
  67. $this->fail();
  68. } catch (\Doctrine\ORM\NonUniqueResultException $e) {}
  69. }
  70. }
  71. }