summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/readmeContentsBuilder.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/readmeContentsBuilder.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/readmeContentsBuilder.php110
1 files changed, 110 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/readmeContentsBuilder.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/readmeContentsBuilder.php
new file mode 100644
index 00000000..3e5fa40c
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/readmeContentsBuilder.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace SMW\Tests\Integration\JSONScript;
+
+/**
+ * Build contents from a selected folder and replaces the content of the
+ * README.md from where the script was started.
+ *
+ * @license GNU GPL v2+
+ * @since 2.4
+ *
+ * @author mwjames
+ */
+class ReadmeContentsBuilder {
+
+ /**
+ * @var string
+ */
+ CONST REPLACE_START_MARKER = '<!-- Begin of generated contents by readmeContentsBuilder.php -->';
+ CONST REPLACE_END_MARKER = '<!-- End of generated contents by readmeContentsBuilder.php -->';
+
+ /**
+ * @var array
+ */
+ private $urlLocationMap = [
+ 'TestCases' => 'https://github.com/SemanticMediaWiki/SemanticMediaWiki/tree/master/tests/phpunit/Integration/JSONScript/TestCases'
+ ];
+
+ /**
+ * @since 2.4
+ */
+ public function run() {
+
+ $file = __DIR__ . '/README.md';
+ $dateTimeUtc = new \DateTime( 'now', new \DateTimeZone( 'UTC' ) );
+
+ $replacement = self::REPLACE_START_MARKER . "\n\n";
+ $replacement .= $this->doGenerateContentFor( 'TestCases', __DIR__ . '/TestCases' );
+
+ $replacement .= "\n-- Last updated on " . $dateTimeUtc->format( 'Y-m-d' ) . " by `readmeContentsBuilder.php`". "\n";
+ $replacement .= "\n" . self::REPLACE_END_MARKER;
+
+ $contents = file_get_contents( $file );
+ $start = strpos( $contents, self::REPLACE_START_MARKER );
+ $length = strrpos( $contents, self::REPLACE_END_MARKER ) - $start + strlen( self::REPLACE_END_MARKER );
+
+ file_put_contents(
+ $file,
+ substr_replace( $contents, $replacement, $start, $length )
+ );
+ }
+
+ private function doGenerateContentFor( $title, $path ) {
+
+ $output = '';
+ $urlLocation = $this->urlLocationMap[$title];
+
+ $counter = 0;
+ $tests = 0;
+ $previousFirstKey = '';
+
+ foreach ( $this->findFilesFor( $path, 'json' ) as $key => $location ) {
+
+ if ( $previousFirstKey !== $key{0} ) {
+ $output .= "\n" . '### ' . ucfirst( $key{0} ). "\n";
+ }
+
+ $output .= '* [' . $key .'](' . $urlLocation . '/' . $key . ')';
+
+ $contents = json_decode( file_get_contents( $location ), true );
+
+ if ( $contents === null || json_last_error() !== JSON_ERROR_NONE ) {
+ continue;
+ }
+
+ if ( isset( $contents['description'] ) ) {
+ $output .= " " . $contents['description'];
+ }
+
+ if ( isset( $contents['tests'] ) ) {
+ $tests += count( $contents['tests'] );
+ }
+
+ $output .= "\n";
+ $counter++;
+ $previousFirstKey = $key{0};
+ }
+
+ return "## $title\n\n" . "Contains $counter files with a total of $tests tests:\n" . $output;
+ }
+
+ private function findFilesFor( $path, $extension ) {
+
+ $files = [];
+
+ $directoryIterator = new \RecursiveDirectoryIterator( $path );
+
+ foreach ( new \RecursiveIteratorIterator( $directoryIterator ) as $fileInfo ) {
+ if ( strtolower( substr( $fileInfo->getFilename(), -( strlen( $extension ) + 1 ) ) ) === ( '.' . $extension ) ) {
+ $files[$fileInfo->getFilename()] = $fileInfo->getPathname();
+ }
+ }
+
+ return $files;
+ }
+
+}
+
+$readmeContentsBuilder = new ReadmeContentsBuilder();
+$readmeContentsBuilder->run();