public function testCreate() { $props = new Props(['a' => 5, 'b' => 1000, 'c' => 'c']); $props->computed('sum', function ($props) { return $props->a + $props->b; }); $this->assertEquals(['a', 'b', 'c', 'sum'], $props->keys()); $clone1 = $props->create(['a', 'sum'], ['extra' => 'extra_value']); $this->assertFalse($clone1->immutable()); $this->assertEquals(['extra', 'a', 'sum'], $clone1->keys()); $clone1->computed('b', function ($props) { return $props->a * 100; }); $this->assertEquals(['extra', 'a', 'sum', 'b'], $clone1->keys()); $this->assertEquals(500, $clone1->b); $this->assertEquals(505, $clone1->sum); $this->assertException(function () use($props) { $props->create(['a', 'b'], ['a' => 3]); }, 'Ra\\PropExistsException'); }