From 3b1e8a5cef1be91e7780dda9b2ff991746a29695 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 17 Aug 2018 22:31:36 -0700 Subject: [PATCH] Move wfMakeStaticArrayFile() into a class And include tests :) This code is independent of MediaWiki, but not really large enough to be worth librarizing right now. Bug: T200626 Change-Id: I022c074e8a708fb5219bc4ff4b53e7e31f60dc4b --- autoload.php | 1 + includes/GlobalFunctions.php | 16 ++---- includes/libs/StaticArrayWriter.php | 49 +++++++++++++++++++ .../language/generateCollationData.php | 3 +- .../language/generateNormalizerDataAr.php | 3 +- .../language/generateNormalizerDataMl.php | 3 +- .../includes/libs/StaticArrayWriterTest.php | 44 +++++++++++++++++ 7 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 includes/libs/StaticArrayWriter.php create mode 100644 tests/phpunit/includes/libs/StaticArrayWriterTest.php diff --git a/autoload.php b/autoload.php index 999d82dba9..3b4f0253a9 100644 --- a/autoload.php +++ b/autoload.php @@ -1682,6 +1682,7 @@ $wgAutoloadLocalClasses = [ 'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php', 'Wikimedia\\Rdbms\\Subquery' => __DIR__ . '/includes/libs/rdbms/encasing/Subquery.php', 'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php', + 'Wikimedia\\StaticArrayWriter' => __DIR__ . '/includes/libs/StaticArrayWriter.php', 'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php', 'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php', 'WikitextLogFormatter' => __DIR__ . '/includes/logging/WikitextLogFormatter.php', diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index d24b74d719..433cd2bbd6 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -30,6 +30,7 @@ use MediaWiki\Session\SessionManager; use MediaWiki\MediaWikiServices; use MediaWiki\Shell\Shell; use Wikimedia\ScopedCallback; +use Wikimedia\StaticArrayWriter; use Wikimedia\Rdbms\DBReplicationWaitError; use Wikimedia\WrappedString; @@ -2675,25 +2676,14 @@ function wfGetPrecompiledData( $name ) { } /** + * @deprecated since 1.32 use StaticArrayWriter instead * @since 1.32 * @param string[] $data Array with string keys/values to export * @param string $header * @return string PHP code */ function wfMakeStaticArrayFile( array $data, $header = 'Automatically generated' ) { - $format = "\t%s => %s,\n"; - $code = " $value ) { - $code .= sprintf( - $format, - var_export( $key, true ), - var_export( $value, true ) - ); - } - $code .= "];\n"; - return $code; + return ( new StaticArrayWriter() )->create( $data, $header ); } /** diff --git a/includes/libs/StaticArrayWriter.php b/includes/libs/StaticArrayWriter.php new file mode 100644 index 0000000000..cd1860ffe4 --- /dev/null +++ b/includes/libs/StaticArrayWriter.php @@ -0,0 +1,49 @@ + %s,\n"; + $code = " $value ) { + $code .= sprintf( + $format, + var_export( $key, true ), + var_export( $value, true ) + ); + } + $code .= "];\n"; + return $code; + } +} diff --git a/maintenance/language/generateCollationData.php b/maintenance/language/generateCollationData.php index 32adafd747..97b46f7302 100644 --- a/maintenance/language/generateCollationData.php +++ b/maintenance/language/generateCollationData.php @@ -321,9 +321,10 @@ class GenerateCollationData extends Maintenance { print "Out of order: $numOutOfOrder / " . count( $headerChars ) . "\n"; global $IP; + $writer = new StaticArrayWriter(); file_put_contents( "$IP/includes/collation/data/first-letters-root.php", - wfMakeStaticArrayFile( $headerChars, 'File created by generateCollationData.php' ) + $writer->create( $headerChars, 'File created by generateCollationData.php' ) ); echo "first-letters-root: file written.\n"; } diff --git a/maintenance/language/generateNormalizerDataAr.php b/maintenance/language/generateNormalizerDataAr.php index fad35cb753..d3e065563a 100644 --- a/maintenance/language/generateNormalizerDataAr.php +++ b/maintenance/language/generateNormalizerDataAr.php @@ -127,7 +127,8 @@ class GenerateNormalizerDataAr extends Maintenance { } global $IP; - file_put_contents( "$IP/languages/data/normalize-ar.php", wfMakeStaticArrayFile( + $writer = new StaticArrayWriter(); + file_put_contents( "$IP/languages/data/normalize-ar.php", $writer->create( $pairs, 'File created by generateNormalizerDataAr.php' ) ); diff --git a/maintenance/language/generateNormalizerDataMl.php b/maintenance/language/generateNormalizerDataMl.php index 5b75d8b43d..1b8ea09410 100644 --- a/maintenance/language/generateNormalizerDataMl.php +++ b/maintenance/language/generateNormalizerDataMl.php @@ -61,7 +61,8 @@ class GenerateNormalizerDataMl extends Maintenance { } global $IP; - file_put_contents( "$IP/languages/data/normalize-ml.php", wfMakeStaticArrayFile( + $writer = new StaticArrayWriter(); + file_put_contents( "$IP/languages/data/normalize-ml.php", $writer->create( $pairs, 'File created by generateNormalizerDataMl.php' ) ); diff --git a/tests/phpunit/includes/libs/StaticArrayWriterTest.php b/tests/phpunit/includes/libs/StaticArrayWriterTest.php new file mode 100644 index 0000000000..bfb3b584c9 --- /dev/null +++ b/tests/phpunit/includes/libs/StaticArrayWriterTest.php @@ -0,0 +1,44 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +use Wikimedia\StaticArrayWriter; + +class StaticArrayWriterTest extends PHPUnit\Framework\TestCase { + public function testCreate() { + $data = [ + 'foo' => 'bar', + 'baz' => 'rawr', + ]; + $writer = new StaticArrayWriter(); + $actual = $writer->create( $data, "Header\nWith\nNewlines" ); + $expected = << 'bar', + 'baz' => 'rawr', +]; + +PHP; + $this->assertSame( $expected, $actual ); + } +} -- 2.20.1