diff --git a/app/config.php b/app/config.php index 104183b0..f2a3328f 100644 --- a/app/config.php +++ b/app/config.php @@ -3,6 +3,7 @@ use Colors\Color; use function DI\object; use function DI\factory; +use Kadet\Highlighter\KeyLighter; use function PhpSchool\PhpWorkshop\Event\containerListener; use Interop\Container\ContainerInterface; use League\CommonMark\DocParser; @@ -312,11 +313,15 @@ function (CgiResult $result) use ($c) { $c->get(Color::class), $c->get(TerminalInterface::class), $c->get(ExerciseRepository::class), - $c->get(SyntaxHighlighter::class), + $c->get(KeyLighter::class), $c->get(ResultRendererFactory::class) ); }, + KeyLighter::class => function () { + return new KeyLighter; + }, + 'coreContributors' => [ '@AydinHassan' => 'Aydin Hassan', '@mikeymike' => 'Michael Woodward', diff --git a/composer.json b/composer.json index a8cd2975..6e6d784f 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,8 @@ "psr/http-message": "^1.0", "zendframework/zend-diactoros": "^1.3.6", "myclabs/php-enum": "^1.4", - "nikic/php-parser": "^2.1" + "nikic/php-parser": "^2.1", + "kadet/keylighter": "^0.8.2" }, "require-dev": { "composer/composer": "^1.2", diff --git a/composer.lock b/composer.lock index b334ba93..2efb6e6e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "bea3db6062cfb2b8d5bbcac5c9cfc1e9", + "content-hash": "205b31ee5354bbeae6bbe1ac5af6744e", "packages": [ { "name": "aydin-hassan/cli-md-renderer", @@ -51,16 +51,16 @@ }, { "name": "beberlei/assert", - "version": "v2.6.7", + "version": "v2.6.8", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "2b4c9249a7ceef51402d39bd797aae16cfd8f36f" + "reference": "848c8f0bde97b48d1e159075e20a6667583f3978" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/2b4c9249a7ceef51402d39bd797aae16cfd8f36f", - "reference": "2b4c9249a7ceef51402d39bd797aae16cfd8f36f", + "url": "https://api.github.com/repos/beberlei/assert/zipball/848c8f0bde97b48d1e159075e20a6667583f3978", + "reference": "848c8f0bde97b48d1e159075e20a6667583f3978", "shasum": "" }, "require": { @@ -68,13 +68,13 @@ "php": ">=5.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "2.0.0-alpha", + "friendsofphp/php-cs-fixer": "^2.0", "phpunit/phpunit": "@stable" }, "type": "library", "autoload": { - "psr-0": { - "Assert": "lib/" + "psr-4": { + "Assert\\": "lib/Assert" }, "files": [ "lib/Assert/functions.php" @@ -102,7 +102,7 @@ "assertion", "validation" ], - "time": "2016-11-14T16:46:13+00:00" + "time": "2016-12-05T11:33:17+00:00" }, { "name": "container-interop/container-interop", @@ -179,6 +179,55 @@ ], "time": "2016-04-29T12:21:54+00:00" }, + { + "name": "kadet/keylighter", + "version": "v0.8.2", + "source": { + "type": "git", + "url": "https://github.com/kadet1090/KeyLighter.git", + "reference": "0d2e6e4e542c282c22c66567174554ad67d047be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kadet1090/KeyLighter/zipball/0d2e6e4e542c282c22c66567174554ad67d047be", + "reference": "0d2e6e4e542c282c22c66567174554ad67d047be", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "4.8.*", + "symfony/console": "^2.8|^3.0" + }, + "suggest": { + "symfony/console": "Allows usage of keylighters CLI utility." + }, + "bin": [ + "bin/keylighter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Kadet\\Highlighter\\": "." + }, + "files": [ + "./functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kacper Donat", + "email": "contact@kadet.net" + } + ], + "description": "Yet another syntax highlighter for PHP", + "time": "2016-09-16T21:34:34+00:00" + }, { "name": "kevinlebrun/colors.php", "version": "0.4.1", @@ -682,7 +731,7 @@ }, { "name": "symfony/filesystem", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -731,7 +780,7 @@ }, { "name": "symfony/process", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -890,32 +939,32 @@ }, { "name": "composer/composer", - "version": "1.2.3", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "e7f19286a7e7f940950c9069a0f549d483c30ba7" + "reference": "e53f9e5381e70f76e098136343e27d92601eade7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/e7f19286a7e7f940950c9069a0f549d483c30ba7", - "reference": "e7f19286a7e7f940950c9069a0f549d483c30ba7", + "url": "https://api.github.com/repos/composer/composer/zipball/e53f9e5381e70f76e098136343e27d92601eade7", + "reference": "e53f9e5381e70f76e098136343e27d92601eade7", "shasum": "" }, "require": { "composer/ca-bundle": "^1.0", "composer/semver": "^1.0", "composer/spdx-licenses": "^1.0", - "justinrainbow/json-schema": "^1.6 || ^2.0", + "justinrainbow/json-schema": "^1.6 || ^2.0 || ^3.0 || ^4.0", "php": "^5.3.2 || ^7.0", "psr/log": "^1.0", "seld/cli-prompt": "^1.0", "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.0", - "symfony/console": "^2.5 || ^3.0", - "symfony/filesystem": "^2.5 || ^3.0", - "symfony/finder": "^2.2 || ^3.0", - "symfony/process": "^2.1 || ^3.0" + "symfony/console": "^2.7 || ^3.0", + "symfony/filesystem": "^2.7 || ^3.0", + "symfony/finder": "^2.7 || ^3.0", + "symfony/process": "^2.7 || ^3.0" }, "require-dev": { "phpunit/phpunit": "^4.5 || ^5.0.5", @@ -932,7 +981,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -963,7 +1012,7 @@ "dependency", "package" ], - "time": "2016-12-01T13:33:53+00:00" + "time": "2016-12-23T23:47:04+00:00" }, { "name": "composer/semver", @@ -1144,16 +1193,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "2.0.5", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "6b2a33e6a768f96bdc2ead5600af0822eed17d67" + "reference": "d39c56a46b3ebe1f3696479966cd2b9f50aaa24f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/6b2a33e6a768f96bdc2ead5600af0822eed17d67", - "reference": "6b2a33e6a768f96bdc2ead5600af0822eed17d67", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/d39c56a46b3ebe1f3696479966cd2b9f50aaa24f", + "reference": "d39c56a46b3ebe1f3696479966cd2b9f50aaa24f", "shasum": "" }, "require": { @@ -1170,7 +1219,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1206,7 +1255,7 @@ "json", "schema" ], - "time": "2016-06-02T10:59:52+00:00" + "time": "2016-12-22T16:43:46+00:00" }, { "name": "myclabs/deep-copy", @@ -1461,16 +1510,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "903fd6318d0a90b4770a009ff73e4a4e9c437929" + "reference": "c14196e64a78570034afd0b7a9f3757ba71c2a0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/903fd6318d0a90b4770a009ff73e4a4e9c437929", - "reference": "903fd6318d0a90b4770a009ff73e4a4e9c437929", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c14196e64a78570034afd0b7a9f3757ba71c2a0a", + "reference": "c14196e64a78570034afd0b7a9f3757ba71c2a0a", "shasum": "" }, "require": { @@ -1520,7 +1569,7 @@ "testing", "xunit" ], - "time": "2016-11-28T16:00:31+00:00" + "time": "2016-12-20T15:22:42+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1705,16 +1754,16 @@ }, { "name": "phpunit/phpunit", - "version": "5.7.2", + "version": "5.7.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "336aff0ac52e306c98e7455bc3e8d7b0bf777a5e" + "reference": "af91da3f2671006ff5d0628023de3b7ac4d1ef09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/336aff0ac52e306c98e7455bc3e8d7b0bf777a5e", - "reference": "336aff0ac52e306c98e7455bc3e8d7b0bf777a5e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/af91da3f2671006ff5d0628023de3b7ac4d1ef09", + "reference": "af91da3f2671006ff5d0628023de3b7ac4d1ef09", "shasum": "" }, "require": { @@ -1725,7 +1774,7 @@ "ext-xml": "*", "myclabs/deep-copy": "~1.3", "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", + "phpspec/prophecy": "^1.6.2", "phpunit/php-code-coverage": "^4.0.3", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", @@ -1735,7 +1784,7 @@ "sebastian/diff": "~1.2", "sebastian/environment": "^1.3.4 || ^2.0", "sebastian/exporter": "~2.0", - "sebastian/global-state": "~1.0", + "sebastian/global-state": "^1.0 || ^2.0", "sebastian/object-enumerator": "~2.0", "sebastian/resource-operations": "~1.0", "sebastian/version": "~1.0|~2.0", @@ -1783,20 +1832,20 @@ "testing", "xunit" ], - "time": "2016-12-03T08:33:00+00:00" + "time": "2016-12-13T16:19:44+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.4.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "90a08f5deed5f7ac35463c161f2e8fa0e5652faf" + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/90a08f5deed5f7ac35463c161f2e8fa0e5652faf", - "reference": "90a08f5deed5f7ac35463c161f2e8fa0e5652faf", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", "shasum": "" }, "require": { @@ -1842,7 +1891,7 @@ "mock", "xunit" ], - "time": "2016-11-27T07:52:03+00:00" + "time": "2016-12-08T20:27:08+00:00" }, { "name": "psr/log", @@ -2622,16 +2671,16 @@ }, { "name": "symfony/console", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "09d0fd33560e3573185a2ea17614e37ba38716c5" + "reference": "d12aa9ca20f4db83ec58410978dab6afcb9d6aaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/09d0fd33560e3573185a2ea17614e37ba38716c5", - "reference": "09d0fd33560e3573185a2ea17614e37ba38716c5", + "url": "https://api.github.com/repos/symfony/console/zipball/d12aa9ca20f4db83ec58410978dab6afcb9d6aaa", + "reference": "d12aa9ca20f4db83ec58410978dab6afcb9d6aaa", "shasum": "" }, "require": { @@ -2681,11 +2730,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-11-16T22:18:16+00:00" + "time": "2016-12-11T14:34:22+00:00" }, { "name": "symfony/debug", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", @@ -2742,16 +2791,16 @@ }, { "name": "symfony/finder", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4263e35a1e342a0f195c9349c0dee38148f8a14f" + "reference": "a69cb5d455b4885ca376dc5bb3e1155cc8c08c4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4263e35a1e342a0f195c9349c0dee38148f8a14f", - "reference": "4263e35a1e342a0f195c9349c0dee38148f8a14f", + "url": "https://api.github.com/repos/symfony/finder/zipball/a69cb5d455b4885ca376dc5bb3e1155cc8c08c4b", + "reference": "a69cb5d455b4885ca376dc5bb3e1155cc8c08c4b", "shasum": "" }, "require": { @@ -2787,7 +2836,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-11-03T08:11:03+00:00" + "time": "2016-12-13T09:39:43+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -2850,16 +2899,16 @@ }, { "name": "symfony/yaml", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f2300ba8fbb002c028710b92e1906e7457410693" + "reference": "a7095af4b97a0955f85c8989106c249fa649011f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f2300ba8fbb002c028710b92e1906e7457410693", - "reference": "f2300ba8fbb002c028710b92e1906e7457410693", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a7095af4b97a0955f85c8989106c249fa649011f", + "reference": "a7095af4b97a0955f85c8989106c249fa649011f", "shasum": "" }, "require": { @@ -2901,7 +2950,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-11-18T21:17:59+00:00" + "time": "2016-12-10T10:07:06+00:00" }, { "name": "webmozart/assert", diff --git a/src/ResultRenderer/ResultsRenderer.php b/src/ResultRenderer/ResultsRenderer.php index bc1ebd76..c589fd29 100644 --- a/src/ResultRenderer/ResultsRenderer.php +++ b/src/ResultRenderer/ResultsRenderer.php @@ -3,6 +3,8 @@ namespace PhpSchool\PhpWorkshop\ResultRenderer; use Colors\Color; +use Kadet\Highlighter\Formatter\CliFormatter; +use Kadet\Highlighter\KeyLighter; use PhpSchool\CliMenu\Terminal\TerminalInterface; use PhpSchool\CliMenu\Util\StringUtil; use PhpSchool\PhpWorkshop\Exercise\ProvidesSolution; @@ -45,9 +47,9 @@ class ResultsRenderer private $terminal; /** - * @var SyntaxHighlighter + * @var KeyLighter */ - private $syntaxHighlighter; + private $keyLighter; /** * @var ResultRendererFactory @@ -59,7 +61,7 @@ class ResultsRenderer * @param Color $color A instance of `Color` used to colour strings with ANSI escape codes. * @param TerminalInterface $terminal A helper to get information regarding the current terminal. * @param ExerciseRepository $exerciseRepository The exercise repository. - * @param SyntaxHighlighter $syntaxHighlighter A PHP syntax highlighter for the terminal, uses ANSI escape codes. + * @param KeyLighter $keyLighter A syntax highlighter * @param ResultRendererFactory $resultRendererFactory */ public function __construct( @@ -67,13 +69,13 @@ public function __construct( Color $color, TerminalInterface $terminal, ExerciseRepository $exerciseRepository, - SyntaxHighlighter $syntaxHighlighter, + KeyLighter $keyLighter, ResultRendererFactory $resultRendererFactory ) { $this->color = $color; $this->terminal = $terminal; $this->exerciseRepository = $exerciseRepository; - $this->syntaxHighlighter = $syntaxHighlighter; + $this->keyLighter = $keyLighter; $this->appName = $appName; $this->resultRendererFactory = $resultRendererFactory; } @@ -186,10 +188,11 @@ private function renderSuccessInformation( $output->writeLine($this->style($file->getRelativePath(), ['bold', 'cyan', 'underline'])); $output->emptyLine(); - $code = $file->getContents(); - if (pathinfo($file->getRelativePath(), PATHINFO_EXTENSION) === 'php') { - $code = $this->syntaxHighlighter->highlight($code); - } + $code = $this->keyLighter->highlight( + $file->getContents(), + $this->keyLighter->languageByExt('.' . $file->getExtension()), + new CliFormatter + ); //make sure there is a new line at the end $code = preg_replace('/\n$/', '', $code) . "\n"; diff --git a/src/Solution/SolutionFile.php b/src/Solution/SolutionFile.php index b8afe4c9..a9e0c2e3 100644 --- a/src/Solution/SolutionFile.php +++ b/src/Solution/SolutionFile.php @@ -89,6 +89,16 @@ public function getContents() return file_get_contents($this->getAbsolutePath()); } + /** + * Get the file extension. + * + * @return string + */ + public function getExtension() + { + return pathinfo($this->getRelativePath(), PATHINFO_EXTENSION); + } + /** * Proxy to the absolute path. * diff --git a/test/ResultRenderer/AbstractResultRendererTest.php b/test/ResultRenderer/AbstractResultRendererTest.php index 842763ce..724010cc 100644 --- a/test/ResultRenderer/AbstractResultRendererTest.php +++ b/test/ResultRenderer/AbstractResultRendererTest.php @@ -3,6 +3,7 @@ namespace PhpSchool\PhpWorkshopTest\ResultRenderer; use Colors\Color; +use Kadet\Highlighter\KeyLighter; use PhpSchool\CliMenu\Terminal\TerminalInterface; use PhpSchool\PhpWorkshop\Factory\ResultRendererFactory; use PhpSchool\PSX\Factory; @@ -52,13 +53,12 @@ protected function getRenderer() $terminal->getWidth()->willReturn(50); $exerciseRepo = $this->createMock(ExerciseRepository::class); - $syntaxHighlighter = (new Factory)->__invoke(); $this->renderer = new ResultsRenderer( 'appName', $color, $terminal->reveal(), $exerciseRepo, - $syntaxHighlighter, + new KeyLighter, $this->getResultRendererFactory() ); } diff --git a/test/ResultRenderer/ResultsRendererTest.php b/test/ResultRenderer/ResultsRendererTest.php index ff444b13..82448d8f 100644 --- a/test/ResultRenderer/ResultsRendererTest.php +++ b/test/ResultRenderer/ResultsRendererTest.php @@ -3,6 +3,9 @@ namespace PhpSchool\PhpWorkshopTest\ResultRenderer; use Colors\Color; +use Kadet\Highlighter\Formatter\CliFormatter; +use Kadet\Highlighter\KeyLighter; +use Kadet\Highlighter\Language\Php; use PhpSchool\CliMenu\Terminal\TerminalInterface; use PhpSchool\PhpWorkshop\Exercise\ExerciseInterface; use PhpSchool\PhpWorkshop\Exercise\ProvidesSolution; @@ -47,7 +50,7 @@ public function testRenderIndividualResult() $color, $terminal->reveal(), new ExerciseRepository([]), - (new Factory)->__invoke(), + new KeyLighter, $resultRendererFactory ); @@ -69,7 +72,7 @@ public function testLineBreak() $color, $terminal->reveal(), new ExerciseRepository([]), - (new Factory)->__invoke(), + new KeyLighter, new ResultRendererFactory ); @@ -95,7 +98,7 @@ public function testRenderSuccess() $color, $terminal, $exerciseRepo->reveal(), - (new Factory)->__invoke(), + new KeyLighter, $resultRendererFactory ); @@ -142,7 +145,7 @@ public function testRenderSuccessWithSolution() $color, $terminal, $exerciseRepo->reveal(), - (new Factory)->__invoke(), + new KeyLighter, $resultRendererFactory ); @@ -187,8 +190,12 @@ public function testRenderSuccessWithPhpSolutionFileIsSyntaxHighlighted() $exercise->willImplement(ProvidesSolution::class); $exercise->getSolution()->willReturn($solution); - $syntaxHighlighter = $this->prophesize(SyntaxHighlighter::class); - $syntaxHighlighter->highlight('FILE CONTENTS')->willReturn('FILE CONTENTS'); + $syntaxHighlighter = $this->prophesize(KeyLighter::class); + $php = new Php; + $syntaxHighlighter->languageByExt('.php')->willReturn($php); + $syntaxHighlighter + ->highlight('FILE CONTENTS', $php, Argument::type(CliFormatter::class)) + ->willReturn('FILE CONTENTS'); $renderer = new ResultsRenderer( 'app', @@ -240,7 +247,7 @@ public function testRenderSuccessAndFailure() $color, $terminal, $exerciseRepo->reveal(), - (new Factory)->__invoke(), + new KeyLighter, $resultRendererFactory ); @@ -283,7 +290,7 @@ public function testAllSuccessResultsAreHoistedToTheTop() $color, $terminal, $exerciseRepo->reveal(), - (new Factory)->__invoke(), + new KeyLighter, $resultRendererFactory ); @@ -327,7 +334,7 @@ public function testRenderAllFailures() $color, $terminal, $exerciseRepo->reveal(), - (new Factory)->__invoke(), + new KeyLighter, $resultRendererFactory ); diff --git a/test/Solution/SolutionFileTest.php b/test/Solution/SolutionFileTest.php index b5329e07..8e02e7af 100644 --- a/test/Solution/SolutionFileTest.php +++ b/test/Solution/SolutionFileTest.php @@ -92,4 +92,16 @@ public function testConstructionWithManualBaseDirectory() unlink($filePath); rmdir($tempPath); } + + public function testGetExtension() + { + $tempPath = sprintf('%s/%s/sub-dir', sys_get_temp_dir(), $this->getName()); + $filePath = sprintf('%s/test.php', $tempPath); + + @mkdir($tempPath, 0775, true); + touch($filePath); + + $file = new SolutionFile('test.php', $tempPath); + $this->assertSame('php', $file->getExtension()); + } } diff --git a/test/res/exercise-renderer/test-render-success-with-solution.txt b/test/res/exercise-renderer/test-render-success-with-solution.txt index 47afaf8b..93453380 100644 --- a/test/res/exercise-renderer/test-render-success-with-solution.txt +++ b/test/res/exercise-renderer/test-render-success-with-solution.txt @@ -20,7 +20,7 @@ ──────────────────────────────────────────────────────────────────────────────────────────────────── some-file -FILE CONTENTS +FILE CONTENTS ──────────────────────────────────────────────────────────────────────────────────────────────────── You have 1 challenges left.