jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/326906 )
Change subject: Reindex tabular data array for easier lua access
......................................................................
Reindex tabular data array for easier lua access
change 0-based array indexes to 1-based,
otherwise lua users get very surprised of the
missing data
Bug: T152809
Change-Id: I5262edc279cd7737623e721faed968fa43b170b6
---
M includes/JCLuaLibrary.php
M tests/phpunit/JCTabularContentTest.php
2 files changed, 72 insertions(+), 3 deletions(-)
Approvals:
MaxSem: Looks good to me, approved
jenkins-bot: Verified
diff --git a/includes/JCLuaLibrary.php b/includes/JCLuaLibrary.php
index 1bc5ee6..49a491e 100644
--- a/includes/JCLuaLibrary.php
+++ b/includes/JCLuaLibrary.php
@@ -3,11 +3,8 @@
namespace JsonConfig;
use Language;
-use MalformedTitleException;
use Scribunto_LuaError;
use Scribunto_LuaLibraryBase;
-use Title;
-use TitleValue;
class JCLuaLibrary extends Scribunto_LuaLibraryBase {
@@ -72,8 +69,35 @@
} else {
/** @var JCDataContent $content */
$result = $content->getLocalizedData( $language );
+
+ if ( $content instanceof JCTabularContent ) {
+ self::reindexTabularData( $result );
+ }
}
return [ $result ];
}
+
+ /**
+ * Reindex tabular data so it can be processed by Lua more easily
+ * @param object $data
+ */
+ public static function reindexTabularData( $data ) {
+ $columnCount = count( $data->schema->fields );
+ $rowCount = count( $data->data );
+ if ( $columnCount > 0 ) {
+ $rowIndexes = range( 1, $columnCount );
+ $data->schema->fields = array_combine( $rowIndexes,
$data->schema->fields );
+ if ( $rowCount > 0 ) {
+ $data->data =
+ array_combine( range( 1, $rowCount ),
+ array_map( function ( $row )
use ( $rowIndexes ) {
+ return array_combine(
$rowIndexes, $row );
+ }, $data->data ) );
+ }
+ } elseif ( $rowCount > 0 ) {
+ // Weird, but legal
+ $data->data = array_combine( range( 1, $rowCount ),
$data->data );
+ }
+ }
}
diff --git a/tests/phpunit/JCTabularContentTest.php
b/tests/phpunit/JCTabularContentTest.php
index c8cf511..23e00b6 100644
--- a/tests/phpunit/JCTabularContentTest.php
+++ b/tests/phpunit/JCTabularContentTest.php
@@ -3,6 +3,7 @@
namespace JsonConfig\Tests;
use FormatJson;
+use JsonConfig\JCLuaLibrary;
use JsonConfig\JCTabularContent;
use Language;
use MediaWikiTestCase;
@@ -97,4 +98,48 @@
return $result;
}
+
+
+ /**
+ * @dataProvider provideLuaReindexingTests
+ * @param int $fieldCount
+ * @param array $data
+ * @param array $expected
+ */
+ public function testLuaTabDataReindexing( $fieldCount, $data, $expected
) {
+ if ( !class_exists( 'Scribunto_LuaLibraryBase' ) ) {
+ $this->markTestSkipped( "Scribunto is required for this
integration test" );
+ }
+
+ $value = (object)[ 'schema' => (object)[] ];
+ $value->data = $data;
+ $value->schema->fields = $fieldCount > 0 ? array_fill( 0,
$fieldCount, (object) [ ] ) : [ ];
+ JCLuaLibrary::reindexTabularData( $value );
+ $this->assertEquals( $expected, $value->data );
+ $this->assertEquals( $fieldCount > 0 ? range( 1, $fieldCount )
: [ ],
+ array_keys( $value->schema->fields ) );
+ }
+
+ public function provideLuaReindexingTests() {
+ return [
+ // fieldCount, data, expected
+ [ 0, [], [] ],
+ [ 1, [], [] ],
+ [
+ 1,
+ [ [ "a" ] ],
+ [ 1 => [ 1 => "a" ] ]
+ ],
+ [
+ 2,
+ [ [ 0, "a" ] ],
+ [ 1 => [ 1 => 0, 2 => "a" ] ]
+ ],
+ [
+ 2,
+ [ [ 0, "a" ], [ - 1, "-" ] ],
+ [ 1 => [ 1 => 0, 2 => "a" ], 2 => [ 1 => -1, 2
=> "-" ] ]
+ ],
+ ];
+ }
}
--
To view, visit https://gerrit.wikimedia.org/r/326906
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I5262edc279cd7737623e721faed968fa43b170b6
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/extensions/JsonConfig
Gerrit-Branch: master
Gerrit-Owner: Yurik <[email protected]>
Gerrit-Reviewer: Hashar <[email protected]>
Gerrit-Reviewer: MaxSem <[email protected]>
Gerrit-Reviewer: Yurik <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits