1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
<?php
namespace Illuminate\Tests\Support;
use ArrayIterator;
use Illuminate\Support\Fluent;
use IteratorAggregate;
use PHPUnit\Framework\TestCase;
use ReflectionObject;
class SupportFluentTest extends TestCase
{
public function testAttributesAreSetByConstructor()
{
$array = ['name' => 'Taylor', 'age' => 25];
$fluent = new Fluent($array);
$refl = new ReflectionObject($fluent);
$attributes = $refl->getProperty('attributes');
$this->assertEquals($array, $attributes->getValue($fluent));
$this->assertEquals($array, $fluent->getAttributes());
}
public function testAttributesAreSetByConstructorGivenstdClass()
{
$array = ['name' => 'Taylor', 'age' => 25];
$fluent = new Fluent((object) $array);
$refl = new ReflectionObject($fluent);
$attributes = $refl->getProperty('attributes');
$this->assertEquals($array, $attributes->getValue($fluent));
$this->assertEquals($array, $fluent->getAttributes());
}
public function testAttributesAreSetByConstructorGivenArrayIterator()
{
$array = ['name' => 'Taylor', 'age' => 25];
$fluent = new Fluent(new FluentArrayIteratorStub($array));
$refl = new ReflectionObject($fluent);
$attributes = $refl->getProperty('attributes');
$this->assertEquals($array, $attributes->getValue($fluent));
$this->assertEquals($array, $fluent->getAttributes());
}
public function testGetMethodReturnsAttribute()
{
$fluent = new Fluent(['name' => 'Taylor']);
$this->assertSame('Taylor', $fluent->get('name'));
$this->assertSame('Default', $fluent->get('foo', 'Default'));
$this->assertSame('Taylor', $fluent->name);
$this->assertNull($fluent->foo);
}
public function testArrayAccessToAttributes()
{
$fluent = new Fluent(['attributes' => '1']);
$this->assertTrue(isset($fluent['attributes']));
$this->assertEquals(1, $fluent['attributes']);
$fluent->attributes();
$this->assertTrue($fluent['attributes']);
}
public function testMagicMethodsCanBeUsedToSetAttributes()
{
$fluent = new Fluent;
$fluent->name = 'Taylor';
$fluent->developer();
$fluent->age(25);
$this->assertSame('Taylor', $fluent->name);
$this->assertTrue($fluent->developer);
$this->assertEquals(25, $fluent->age);
$this->assertInstanceOf(Fluent::class, $fluent->programmer());
}
public function testIssetMagicMethod()
{
$array = ['name' => 'Taylor', 'age' => 25];
$fluent = new Fluent($array);
$this->assertTrue(isset($fluent->name));
unset($fluent->name);
$this->assertFalse(isset($fluent->name));
}
public function testToArrayReturnsAttribute()
{
$array = ['name' => 'Taylor', 'age' => 25];
$fluent = new Fluent($array);
$this->assertEquals($array, $fluent->toArray());
}
public function testToJsonEncodesTheToArrayResult()
{
$fluent = $this->getMockBuilder(Fluent::class)->onlyMethods(['toArray'])->getMock();
$fluent->expects($this->once())->method('toArray')->willReturn(['foo']);
$results = $fluent->toJson();
$this->assertJsonStringEqualsJsonString(json_encode(['foo']), $results);
}
}
class FluentArrayIteratorStub implements IteratorAggregate
{
protected $items = [];
public function __construct(array $items = [])
{
$this->items = $items;
}
public function getIterator(): ArrayIterator
{
return new ArrayIterator($this->items);
}
}
|