| 
<?phpnamespace TestBuilderNamespace;
 
 require_once('src/Phabstractic/Patterns/Builder.php');
 require_once('src/Phabstractic/Patterns/Resource/BuilderInterface.php');
 require_once('src/Phabstractic/Features/Resource/ConfigurationInterface.php');
 
 use PHPUnit\Framework\TestCase;
 use Phabstractic\Patterns;
 use Phabstractic\Patterns\Resource as PatternsResource;
 use Phabstractic\Features\Resource as FeaturesResource;
 
 Patterns\Builder::buildBuilder(
 'testBuilder',
 array('methodOne', 'methodTwo'),
 array('namespace' => 'TestBuilderNamespace')
 );
 
 class TestBuilder extends AbstractTestBuilderBuildable {
 public function setMethodOne($method) {
 
 }
 
 public function setMethodTwo($method) {
 
 }
 }
 
 class BuilderTest extends TestCase
 {
 public function testEmptyInstantiation() {
 $f = new Patterns\Builder('test', array(), array('strict' => true, 'namespace' => 'TestBuilderNamespace'));
 
 $this->assertInstanceOf(Patterns\Builder::class, $f);
 $this->assertInstanceOf(FeaturesResource\ConfigurationInterface::class, $f);
 
 return $f;
 }
 
 public function testPopulatedInstantiation() {
 $f = new Patterns\Builder('test',
 array('methodOne', 'methodTwo'));
 
 $this->assertInstanceOf(Patterns\Builder::class, $f);
 $this->assertInstanceOf(FeaturesResource\ConfigurationInterface::class, $f);
 $this->assertEquals(array('methodOne', 'methodTwo'), $f->getMethods());
 
 }
 
 public function testWithNamespaceInstantiation() {
 $f = new Patterns\Builder('test',
 array('methodOne', 'methodTwo'),
 array('namespace' => 'unittest'));
 
 $this->assertInstanceOf(Patterns\Builder::class, $f);
 $this->assertInstanceOf(FeaturesResource\ConfigurationInterface::class, $f);
 $this->assertEquals(array('methodOne', 'methodTwo'), $f->getMethods());
 $this->assertEquals('unittest', $f->getNamespace());
 }
 
 /**
 * @depends testEmptyInstantiation
 *
 */
 public function testProperBuilderName($builder) {
 $builder->setBuilderName('anotherTestBuilder');
 
 $this->assertEquals('anotherTestBuilder', $builder->getBuilderName());
 
 }
 
 /**
 * @depends testEmptyInstantiation
 * @expectedException Phabstractic\Patterns\Exception\RangeException
 *
 */
 public function testImproperBuilderName($builder) {
 $builder->setBuilderName('testBuilder');
 
 exit();
 
 }
 
 public function testBaked() {
 $b = new Patterns\Builder('testBuilderTwo',
 array('methodOne', 'methodTwo'),
 array('namespace' => 'unittest'));
 
 $this->assertFalse($b->isBaked());
 
 $b->bake();
 
 $this->assertTrue($b->isBaked());
 
 }
 
 /**
 * @depends testEmptyInstantiation
 *
 */
 public function testSetMethods($builder) {
 $builder->setMethods(array('methodOne', 'methodTwo', 'methodThree'));
 
 $this->assertEquals(array('methodOne', 'methodTwo', 'methodThree'), $builder->getMethods());
 
 }
 
 /**
 * @depends testEmptyInstantiation
 * @expectedException Phabstractic\Data\Types\Exception\RangeException
 *
 */
 public function testSetImproperMethods($builder) {
 $builder->setMethods(array('methodOne', 'methodTwo', 'methodTwo'));
 
 }
 
 /**
 * @depends testEmptyInstantiation
 *
 */
 public function testAddProperMethod($builder) {
 $builder->addMethod('additionalMethod');
 
 $this->assertEquals(array('methodOne', 'methodTwo', 'methodThree', 'additionalMethod'), $builder->getMethods());
 }
 
 /**
 * @depends testEmptyInstantiation
 * @expectedException Phabstractic\Data\Types\Exception\RangeException
 *
 */
 public function testAddImproperMethod($builder) {
 $builder->addMethod('methodOne');
 
 }
 
 /**
 * @depends testEmptyInstantiation
 *
 */
 public function testAddProperMethods($builder) {
 $builder->addMethods(array('anotherMethodOne', 'anotherMethodTwo'));
 
 $this->assertEquals(array('methodOne', 'methodTwo', 'methodThree', 'additionalMethod',
 'anotherMethodOne', 'anotherMethodTwo'), $builder->getMethods());
 }
 
 /**
 * @depends testEmptyInstantiation
 * @expectedException Phabstractic\Data\Types\Exception\RangeException
 *
 * NOTE:  The error stops anotherMethodTwo, not uniqueMethod  NOT ATOMIC!
 */
 public function testAddImproperMethods($builder) {
 $builder->addMethods(array('uniqueMethod', 'anotherMethodTwo'));
 
 }
 
 /**
 * @depends testEmptyInstantiation
 *
 */
 public function testRemoveMethod($builder) {
 $builder->removeMethod('methodOne');
 
 $this->assertEquals(array('methodTwo', 'methodThree', 'additionalMethod',
 'anotherMethodOne', 'anotherMethodTwo', 'uniqueMethod'), $builder->getMethods());
 }
 
 /**
 * @depends testEmptyInstantiation
 * @expectedException Phabstractic\Data\Types\Exception\RangeException
 *
 */
 public function testNonexistentRemoveMethod($builder) {
 $builder->removeMethod('nonExistingMethod');
 
 }
 
 public function testSetProperNamespace() {
 $b = new Patterns\Builder('testBuilderThree',
 array('methodOne', 'methodTwo'),
 array('namespace' => ''));
 
 $b->setNamespace('testnamespace');
 
 $this->assertEquals('testnamespace', $b->getNamespace());
 
 }
 
 /**
 * @expectedException Phabstractic\Patterns\Exception\RangeException
 *
 */
 public function testSetImproperNamespace() {
 $b = new Patterns\Builder('testBuilderTwo',
 array('methodOne', 'methodTwo'),
 array('namespace' => '', 'strict' => true));
 
 $b->setNamespace('unittest');
 
 }
 
 public function testBuildBuilder() {
 Patterns\Builder::buildBuilder('staticFunctionTest',
 array('methodOne', 'methodTwo'),
 array('namespace' => 'unittest'));
 
 $this->assertTrue(class_exists('unittest\\AbstractStaticFunctionTestBuildable'));
 
 }
 
 public function testGeneratedInstantiation() {
 $test = new TestBuilder();
 
 $this->assertInstanceOf(TestBuilderBuildableInterface::class, $test);
 $this->assertInstanceOf(AbstractTestBuilderBuildable::class, $test);
 
 $builder = new TestBuilderBuilder();
 
 $this->assertInstanceOf(PatternsResource\BuilderInterface::class, $builder);
 
 $obj = $builder->setMethodOne(5)->setMethodTwo(6)->getBuiltObject();
 
 $this->assertInstanceOf(TestBuilder::class, $obj);
 
 }
 
 public function testSetDebugInfo() {
 $b = new Patterns\Builder('TestBuilderTwo',
 array('methodOne', 'methodTwo', 'methodThree'),
 array('namespace' => ''));
 
 ob_start();
 
 var_dump($b);
 
 $output = ob_get_clean();
 
 $this->assertRegExp("/\\[?\"?methods\"?\]?.*=\\>\n.*array\\(3\\)/", $output);
 
 }
 
 }
 
 |