123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- <?php
- namespace Codeception\Util;
- class ArrayContainsComparatorTest extends \Codeception\Test\Unit
- {
- /**
- * @var ArrayContainsComparator
- */
- protected $ary;
- protected function _before()
- {
- $this->ary = new ArrayContainsComparator(
- [
- 'ticket' => [
- 'title' => 'Bug should be fixed',
- 'user' => ['name' => 'Davert'],
- 'labels' => null
- ]
- ]
- );
- }
- // tests
- public function testInclusion()
- {
- $this->assertTrue($this->ary->containsArray(['name' => 'Davert']));
- $this->assertTrue($this->ary->containsArray(['user' => ['name' => 'Davert']]));
- $this->assertTrue($this->ary->containsArray(['ticket' => ['title' => 'Bug should be fixed']]));
- $this->assertTrue($this->ary->containsArray(['ticket' => ['user' => ['name' => 'Davert']]]));
- $this->assertTrue($this->ary->containsArray(['ticket' => ['labels' => null]]));
- }
- /**
- * @Issue https://github.com/Codeception/Codeception/issues/2070
- */
- public function testContainsArrayComparesArrayWithMultipleZeroesCorrectly()
- {
- $comparator = new ArrayContainsComparator([
- 'responseCode' => 0,
- 'message' => 'OK',
- 'data' => [9, 0, 0],
- ]);
- $expectedArray = [
- 'responseCode' => 0,
- 'message' => 'OK',
- 'data' => [0, 0, 0],
- ];
- $this->assertFalse($comparator->containsArray($expectedArray));
- }
- public function testContainsArrayComparesArrayWithMultipleIdenticalSubArraysCorrectly()
- {
- $comparator = new ArrayContainsComparator([
- 'responseCode' => 0,
- 'message' => 'OK',
- 'data' => [[9], [0], [0]],
- ]);
- $expectedArray = [
- 'responseCode' => 0,
- 'message' => 'OK',
- 'data' => [[0], [0], [0]],
- ];
- $this->assertFalse($comparator->containsArray($expectedArray));
- }
- public function testContainsArrayComparesArrayWithValueRepeatedMultipleTimesCorrectlyNegativeCase()
- {
- $comparator = new ArrayContainsComparator(['foo', 'foo', 'bar']);
- $expectedArray = ['foo', 'foo', 'foo'];
- $this->assertFalse($comparator->containsArray($expectedArray));
- }
- public function testContainsArrayComparesArrayWithValueRepeatedMultipleTimesCorrectlyPositiveCase()
- {
- $comparator = new ArrayContainsComparator(['foo', 'foo', 'bar']);
- $expectedArray = ['foo', 'bar', 'foo'];
- $this->assertTrue($comparator->containsArray($expectedArray));
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/2630
- */
- public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenSecondValueIsTheSame()
- {
- $array = [
- ['2015-09-10', 'unknown-date-1'],
- ['2015-10-10', 'unknown-date-1'],
- ];
- $comparator = new ArrayContainsComparator($array);
- $this->assertTrue($comparator->containsArray($array));
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/2630
- * @codingStandardsIgnoreStart
- */
- public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenSecondValueIsTheSameButOrderOfItemsIsDifferent()
- {
- // @codingStandardsIgnoreEnd
- $comparator = new ArrayContainsComparator([
- [
- "2015-09-10",
- "unknown-date-1"
- ],
- [
- "2015-10-10",
- "unknown-date-1"
- ]
- ]);
- $expectedArray = [
- ["2015-10-10", "unknown-date-1"],
- ["2015-09-10", "unknown-date-1"],
- ];
- $this->assertTrue($comparator->containsArray($expectedArray));
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/2630
- */
- public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenSecondValueIsDifferent()
- {
- $comparator = new ArrayContainsComparator([
- [
- "2015-09-10",
- "unknown-date-1"
- ],
- [
- "2015-10-10",
- "unknown-date-2"
- ]
- ]);
- $expectedArray = [
- ["2015-09-10", "unknown-date-1"],
- ["2015-10-10", "unknown-date-2"],
- ];
- $this->assertTrue($comparator->containsArray($expectedArray));
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/2630
- */
- public function testContainsArrayComparesNestedSequentialArraysCorrectlyWhenJsonHasMoreItemsThanExpectedArray()
- {
- $comparator = new ArrayContainsComparator([
- [
- "2015-09-10",
- "unknown-date-1"
- ],
- [
- "2015-10-02",
- "unknown-date-1"
- ],
- [
- "2015-10-10",
- "unknown-date-2"
- ]
- ]);
- $expectedArray = [
- ["2015-09-10", "unknown-date-1"],
- ["2015-10-10", "unknown-date-2"],
- ];
- $this->assertTrue($comparator->containsArray($expectedArray));
- }
- /**
- * @issue https://github.com/Codeception/Codeception/pull/2635
- */
- public function testContainsMatchesSuperSetOfExpectedAssociativeArrayInsideSequentialArray()
- {
- $comparator = new ArrayContainsComparator([[
- 'id' => '1',
- 'title' => 'Game of Thrones',
- 'body' => 'You are so awesome',
- 'created_at' => '2015-12-16 10:42:20',
- 'updated_at' => '2015-12-16 10:42:20',
- ]]);
- $expectedArray = [['id' => '1']];
- $this->assertTrue($comparator->containsArray($expectedArray));
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/2630
- */
- public function testContainsArrayWithUnexpectedLevel()
- {
- $comparator = new ArrayContainsComparator([
- "level1" => [
- "level2irrelevant" => [],
- "level2" => [
- [
- "level3" => [
- [
- "level5irrelevant1" => "a1",
- "level5irrelevant2" => "a2",
- "level5irrelevant3" => "a3",
- "level5irrelevant4" => "a4",
- "level5irrelevant5" => "a5",
- "level5irrelevant6" => "a6",
- "level5irrelevant7" => "a7",
- "level5irrelevant8" => "a8",
- "int1" => 1
- ]
- ],
- "level3irrelevant" => [
- "level4irrelevant" => 1
- ]
- ],
- [
- "level3" => [
- [
- "level5irrelevant1" => "b1",
- "level5irrelevant2" => "b2",
- "level5irrelevant3" => "b3",
- "level5irrelevant4" => "b4",
- "level5irrelevant5" => "b5",
- "level5irrelevant6" => "b6",
- "level5irrelevant7" => "b7",
- "level5irrelevant8" => "b8",
- "int1" => 1
- ]
- ],
- "level3irrelevant" => [
- "level4irrelevant" => 2
- ]
- ]
- ]
- ]
- ]);
- $expectedArray = [
- 'level1' => [
- 'level2' => [
- [
- 'int1' => 1,
- ],
- [
- 'int1' => 1,
- ],
- ]
- ]
- ];
- $this->assertTrue(
- $comparator->containsArray($expectedArray),
- "- <info>" . var_export($expectedArray, true) . "</info>\n"
- . "+ " . var_export($comparator->getHaystack(), true)
- );
- }
- /**
- * Simplified testcase for issue reproduced by testContainsArrayWithUnexpectedLevel
- */
- public function testContainsArrayComparesSequentialArraysHavingDuplicateSubArraysCorrectly()
- {
- $comparator = new ArrayContainsComparator([[1],[1]]);
- $expectedArray = [[1],[1]];
- $this->assertTrue(
- $comparator->containsArray($expectedArray),
- "- <info>" . var_export($expectedArray, true) . "</info>\n"
- . "+ " . var_export($comparator->getHaystack(), true)
- );
- }
- /**
- * @issue https://github.com/Codeception/Codeception/issues/5303
- */
- public function testContainsArrayComparesAssociativeArrayIntersectCorrectlyWhenExpectedArrayKeyIsEmptyArray()
- {
- $comparator = new ArrayContainsComparator([
- 'key' => [
- 'foo' => 'bar',
- ],
- ]);
- $expectedArray = [
- 'key' => [],
- ];
- $this->assertTrue($comparator->containsArray($expectedArray));
- }
- }
|