/**
  * @param string $className
  * @param Blueprint $blueprint
  * @param array $attributeOverrides
  * @return object
  */
 public function make($className, Blueprint $blueprint, $attributeOverrides)
 {
     $instance = new $className();
     $attributes = $attributeOverrides;
     $sequences = array();
     if (!empty($attributes[':sequences'])) {
         $sequences = $attributes[':sequences'];
         unset($attributes[':sequences']);
     }
     $sequences = $sequences + $blueprint->getSequences();
     $this->withSequences($instance, $sequences);
     $attributes = $attributes + $blueprint->getAttributes();
     $this->withAttributes($instance, $attributes);
     return $instance;
 }
 public function testSetSequencesAndGetSequences()
 {
     $sequences = array(1, 2, 3);
     $this->blueprint->setSequences($sequences);
     $this->assertEquals($sequences, $this->blueprint->getSequences());
 }
 public function testMakeWithVariousAttributes()
 {
     $className = 'stdClass';
     $attributes = array('attribute' => 'Mindaugas', 'attributeOverride' => 'Bujanauskas', 'attributeLazy' => function () {
         return 'Short';
     }, 'attributeLazyOverride' => function () {
         return 'Time is very precious';
     });
     $sequences = array('sequence' => function ($i) {
         return $i;
     }, 'sequenceOverride' => function () {
         return 'Override me';
     });
     $attributeOverrides = array('attributeOverride' => 'MindaugasBujanauskas', 'attributeLazyOverride' => function () {
         return 'Diff';
     }, ':sequences' => array('sequenceOverride' => function ($i) {
         return "Instance #{$i}";
     }));
     $blueprint = new Blueprint();
     $blueprint->setAttributes($attributes);
     $blueprint->setSequences($sequences);
     $instance = $this->runner->make($className, $blueprint, $attributeOverrides);
     $this->assertInstanceOf($className, $instance);
     $this->assertEquals($attributes['attribute'], $instance->attribute);
     $this->assertEquals('Short', $instance->attributeLazy);
     $this->assertEquals(1, $instance->sequence);
     $this->assertEquals($attributeOverrides['attributeOverride'], $instance->attributeOverride);
     $this->assertEquals('Diff', $instance->attributeLazyOverride);
     $this->assertEquals('Instance #1', $instance->sequenceOverride);
 }