DisjunctExclusionStrategyTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace JMS\Serializer\Tests\Exclusion;
  3. use JMS\Serializer\Exclusion\DisjunctExclusionStrategy;
  4. use JMS\Serializer\Metadata\ClassMetadata;
  5. use JMS\Serializer\Metadata\StaticPropertyMetadata;
  6. use JMS\Serializer\SerializationContext;
  7. class DisjunctExclusionStrategyTest extends \PHPUnit_Framework_TestCase
  8. {
  9. public function testShouldSkipClassShortCircuiting()
  10. {
  11. $metadata = new ClassMetadata('stdClass');
  12. $context = SerializationContext::create();
  13. $strat = new DisjunctExclusionStrategy(array(
  14. $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  15. $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  16. ));
  17. $first->expects($this->once())
  18. ->method('shouldSkipClass')
  19. ->with($metadata, $context)
  20. ->will($this->returnValue(true));
  21. $last->expects($this->never())
  22. ->method('shouldSkipClass');
  23. $this->assertTrue($strat->shouldSkipClass($metadata, $context));
  24. }
  25. public function testShouldSkipClassDisjunctBehavior()
  26. {
  27. $metadata = new ClassMetadata('stdClass');
  28. $context = SerializationContext::create();
  29. $strat = new DisjunctExclusionStrategy(array(
  30. $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  31. $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  32. ));
  33. $first->expects($this->once())
  34. ->method('shouldSkipClass')
  35. ->with($metadata, $context)
  36. ->will($this->returnValue(false));
  37. $last->expects($this->once())
  38. ->method('shouldSkipClass')
  39. ->with($metadata, $context)
  40. ->will($this->returnValue(true));
  41. $this->assertTrue($strat->shouldSkipClass($metadata, $context));
  42. }
  43. public function testShouldSkipClassReturnsFalseIfNoPredicateMatched()
  44. {
  45. $metadata = new ClassMetadata('stdClass');
  46. $context = SerializationContext::create();
  47. $strat = new DisjunctExclusionStrategy(array(
  48. $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  49. $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  50. ));
  51. $first->expects($this->once())
  52. ->method('shouldSkipClass')
  53. ->with($metadata, $context)
  54. ->will($this->returnValue(false));
  55. $last->expects($this->once())
  56. ->method('shouldSkipClass')
  57. ->with($metadata, $context)
  58. ->will($this->returnValue(false));
  59. $this->assertFalse($strat->shouldSkipClass($metadata, $context));
  60. }
  61. public function testShouldSkipPropertyShortCircuiting()
  62. {
  63. $metadata = new StaticPropertyMetadata('stdClass', 'foo', 'bar');
  64. $context = SerializationContext::create();
  65. $strat = new DisjunctExclusionStrategy(array(
  66. $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  67. $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  68. ));
  69. $first->expects($this->once())
  70. ->method('shouldSkipProperty')
  71. ->with($metadata, $context)
  72. ->will($this->returnValue(true));
  73. $last->expects($this->never())
  74. ->method('shouldSkipProperty');
  75. $this->assertTrue($strat->shouldSkipProperty($metadata, $context));
  76. }
  77. public function testShouldSkipPropertyDisjunct()
  78. {
  79. $metadata = new StaticPropertyMetadata('stdClass', 'foo', 'bar');
  80. $context = SerializationContext::create();
  81. $strat = new DisjunctExclusionStrategy(array(
  82. $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  83. $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  84. ));
  85. $first->expects($this->once())
  86. ->method('shouldSkipProperty')
  87. ->with($metadata, $context)
  88. ->will($this->returnValue(false));
  89. $last->expects($this->once())
  90. ->method('shouldSkipProperty')
  91. ->with($metadata, $context)
  92. ->will($this->returnValue(true));
  93. $this->assertTrue($strat->shouldSkipProperty($metadata, $context));
  94. }
  95. public function testShouldSkipPropertyReturnsFalseIfNoPredicateMatches()
  96. {
  97. $metadata = new StaticPropertyMetadata('stdClass', 'foo', 'bar');
  98. $context = SerializationContext::create();
  99. $strat = new DisjunctExclusionStrategy(array(
  100. $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  101. $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(),
  102. ));
  103. $first->expects($this->once())
  104. ->method('shouldSkipProperty')
  105. ->with($metadata, $context)
  106. ->will($this->returnValue(false));
  107. $last->expects($this->once())
  108. ->method('shouldSkipProperty')
  109. ->with($metadata, $context)
  110. ->will($this->returnValue(false));
  111. $this->assertFalse($strat->shouldSkipProperty($metadata, $context));
  112. }
  113. }