diff --git a/templates/python/README.md.twig b/templates/python/README.md.twig index ab883ef870..ff3877740d 100644 --- a/templates/python/README.md.twig +++ b/templates/python/README.md.twig @@ -34,7 +34,7 @@ uv add {{ language.params.pipPackage }} ``` {% if sdk.gettingStarted %} -{{ sdk.gettingStarted|raw|trim }} +{{ sdk.gettingStarted|trim|raw }} {% endif %} ## Contribution diff --git a/templates/ruby/README.md.twig b/templates/ruby/README.md.twig index 008eea50ee..3d27103ddf 100644 --- a/templates/ruby/README.md.twig +++ b/templates/ruby/README.md.twig @@ -34,7 +34,7 @@ gem install {{ language.params.gemPackage }} ``` {% if sdk.gettingStarted %} -{{ sdk.gettingStarted|raw|trim }} +{{ sdk.gettingStarted|trim|raw }} {% endif %} ## Contribution diff --git a/tests/generation/GenerationTest.php b/tests/generation/GenerationTest.php index c6bb1d9724..7185cc69ff 100644 --- a/tests/generation/GenerationTest.php +++ b/tests/generation/GenerationTest.php @@ -801,6 +801,40 @@ public function testPackageMetadataIsDeclared(string $name): void } } + /** @return iterable */ + public static function guideLanguages(): iterable + { + foreach (\array_keys(self::languageClasses()) as $name) { + if (!\in_array($name, ['rest', 'graphql'], true)) { + yield $name => [$name]; + } + } + } + + #[DataProvider('guideLanguages')] + public function testReadmeRendersTheGuideVerbatim(string $name): void + { + $guide = "```\nclient.set('', \"a & b\") => ok\n```"; + $dir = self::OUTPUT . '/' . $name . '/guide'; + $this->removeDirectory($dir); + + new SDK($this->language($name), Parser::parse((string) \file_get_contents(self::FIXTURE))) + ->setName('test') + ->setVersion('0.0.1') + ->setPlatform('server') + ->setNamespace(\in_array($name, ['android', 'kotlin'], true) ? 'io.appwrite' : 'appwrite') + ->setGettingStarted($guide) + ->setExamples($guide) + ->setTest('true') + ->generate($dir); + + $readme = (string) \file_get_contents($dir . '/README.md'); + $this->assertStringContainsString($guide, $readme, "{$name}: README.md escapes the getting started guide"); + if (\is_file($dir . '/example/README.md')) { + $this->assertStringContainsString($guide, (string) \file_get_contents($dir . '/example/README.md'), "{$name}: example/README.md escapes the examples"); + } + } + /** @return iterable */ public static function peerLanguages(): iterable {