/** * Write the model to a file * * @param ClassModel $classModel */ public function write(ClassModel $classModel) { // create cache directory and get filename $path = $this->cacheDir . $this->interfaceToPath($classModel->getInterface()); $this->filesystem->mkdir($path); $filename = $path . DIRECTORY_SEPARATOR . $classModel->getName() . '.php'; // convert class model to string $statements = $this->classModelTransformer->transform($classModel); $class = $this->printer->prettyPrintFile($statements); // write file $this->filesystem->dumpFile($filename, $class); }
/** * @expectedException \UnexpectedValueException * @expectedExceptionMessage Property visibility must be public, protected, private */ public function testThrowsException() { $classModel = Mockery::mock(ClassModel::class); $propertyModel = Mockery::mock(PropertyModel::class); $builderFactory = Mockery::mock(BuilderFactory::class); $parser = Mockery::mock(ParserAbstract::class); $traverser = Mockery::mock(NodeTraverserInterface::class); $namespace = Mockery::mock(Namespace_::class); $class = Mockery::mock(Class_::class); $property = Mockery::mock(Property::class); $classModel->shouldReceive('getNamespace')->times(1)->withNoArgs()->andReturn(self::CLASS_NAMESPACE); $classModel->shouldReceive('getName')->times(1)->withNoArgs()->andReturn(self::CLASS_NAME); $classModel->shouldReceive('getInterface')->times(1)->withNoArgs()->andReturn(self::CLASS_INTERFACE); $classModel->shouldReceive('getProperties')->times(1)->withNoArgs()->andReturn([$propertyModel]); $propertyModel->shouldReceive('getName')->times(1)->withNoArgs()->andReturn('testProperty'); $propertyModel->shouldReceive('getDefaultValue')->times(1)->withNoArgs()->andReturn([]); $propertyModel->shouldReceive('getVisibility')->times(1)->withNoArgs()->andReturn('foo'); $builderFactory->shouldReceive('namespace')->times(1)->with(self::CLASS_NAMESPACE)->andReturn($namespace); $builderFactory->shouldReceive('class')->times(1)->with(self::CLASS_NAME)->andReturn($class); $builderFactory->shouldReceive('property')->times(1)->with(self::CLASS_PROPERTY)->andReturn($property); $class->shouldReceive('implement')->times(1)->with(self::CLASS_INTERFACE)->andReturnNull(); $property->shouldReceive('setDefault')->times(1)->with([])->andReturnNull(); $transformer = new ClassModelTransformer($builderFactory, $parser, $traverser); $transformer->transform($classModel); }