CompositeExpressionTest.php 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace Doctrine\Tests\DBAL\Query\Expression;
  3. use Doctrine\DBAL\Query\Expression\CompositeExpression;
  4. require_once __DIR__ . '/../../../TestInit.php';
  5. /**
  6. * @group DBAL-12
  7. */
  8. class CompositeExpressionTest extends \Doctrine\Tests\DbalTestCase
  9. {
  10. public function testCount()
  11. {
  12. $expr = new CompositeExpression(CompositeExpression::TYPE_OR, array('u.group_id = 1'));
  13. $this->assertEquals(1, count($expr));
  14. $expr->add('u.group_id = 2');
  15. $this->assertEquals(2, count($expr));
  16. }
  17. /**
  18. * @dataProvider provideDataForConvertToString
  19. */
  20. public function testCompositeUsageAndGeneration($type, $parts, $expects)
  21. {
  22. $expr = new CompositeExpression($type, $parts);
  23. $this->assertEquals($expects, (string) $expr);
  24. }
  25. public function provideDataForConvertToString()
  26. {
  27. return array(
  28. array(
  29. CompositeExpression::TYPE_AND,
  30. array('u.user = 1'),
  31. 'u.user = 1'
  32. ),
  33. array(
  34. CompositeExpression::TYPE_AND,
  35. array('u.user = 1', 'u.group_id = 1'),
  36. '(u.user = 1) AND (u.group_id = 1)'
  37. ),
  38. array(
  39. CompositeExpression::TYPE_OR,
  40. array('u.user = 1'),
  41. 'u.user = 1'
  42. ),
  43. array(
  44. CompositeExpression::TYPE_OR,
  45. array('u.group_id = 1', 'u.group_id = 2'),
  46. '(u.group_id = 1) OR (u.group_id = 2)'
  47. ),
  48. array(
  49. CompositeExpression::TYPE_AND,
  50. array(
  51. 'u.user = 1',
  52. new CompositeExpression(
  53. CompositeExpression::TYPE_OR,
  54. array('u.group_id = 1', 'u.group_id = 2')
  55. )
  56. ),
  57. '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))'
  58. ),
  59. array(
  60. CompositeExpression::TYPE_OR,
  61. array(
  62. 'u.group_id = 1',
  63. new CompositeExpression(
  64. CompositeExpression::TYPE_AND,
  65. array('u.user = 1', 'u.group_id = 2')
  66. )
  67. ),
  68. '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))'
  69. ),
  70. );
  71. }
  72. }