diff --git a/src/JsonSchema/SchemaBuilder.php b/src/JsonSchema/SchemaBuilder.php index 1d05e96..d4e4eb0 100644 --- a/src/JsonSchema/SchemaBuilder.php +++ b/src/JsonSchema/SchemaBuilder.php @@ -396,7 +396,15 @@ private function processOther() } elseif ($value instanceof \stdClass) { $export = '(object)' . PhpCode::varExport((array)$value); } elseif (is_string($value)) { - $export = '"' . str_replace(array('\\', "\n", "\r", "\t", '"', '${', '{$'), array('\\\\', '\n', '\r', '\t', '\"', '\${', '{\$'), $value) . '"'; + switch ($key) { + case 'pattern': + $export = '"' . str_replace(array('\\', "\n", "\r", "\t", '"', '${', '{$'), array('\\\\', '\n', '\r', '\t', '\"', '\${', '{\$'), $value) . '"'; + break; + default: + $export = '"' . str_replace(array('\\', "\n", "\r", "\t", '"', '$'), array('\\\\', '\n', '\r', '\t', '\"', '\$'), $value) . '"'; + break; + } + } else { $export = PhpCode::varExport($value); } diff --git a/tests/src/PHPUnit/Issues/Issue59Test.php b/tests/src/PHPUnit/Issues/Issue59Test.php new file mode 100644 index 0000000..0750d3e --- /dev/null +++ b/tests/src/PHPUnit/Issues/Issue59Test.php @@ -0,0 +1,72 @@ +setNamespaceRoot($appNs, '.'); + + $schema = Schema::import(json_decode($schemaJson)); + $builder = new PhpBuilder(); + $builder->buildSetters = false; + $builder->makeEnumConstants = true; + $builder->skipSchemaDescriptions = false; + + $builder->classCreatedHook = new ClassHookCallback( + function (PhpClass $class, $path, $schema) use ($app, $appNs) { + $class->setNamespace($appNs); + if ('#' === $path) { + $class->setName('Sample'); // Class name for root schema + } + $app->addClass($class); + } + ); + + + $builder->getType($schema); + + $app->clearOldFiles($appPath); + $app->store($appPath); + + exec('git diff ' . $appPath, $out); + $out = implode("\n", $out); + $this->assertSame('', $out, "Generated files changed"); + } + + + function testGeneratedValid() + { + Sample::import((object)array('foo' => 'abc')); + } + +} \ No newline at end of file diff --git a/tests/src/Tmp/Issue59/Sample.php b/tests/src/Tmp/Issue59/Sample.php new file mode 100644 index 0000000..6d2794d --- /dev/null +++ b/tests/src/Tmp/Issue59/Sample.php @@ -0,0 +1,29 @@ +foo = Schema::string(); + $ownerSchema->type = Schema::OBJECT; + $ownerSchema->description = "Description with \$dollar sign"; + } +} \ No newline at end of file