Yurik has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/326390 )
Change subject: Add support for "null" as a valid tab value ...................................................................... Add support for "null" as a valid tab value Bug: T152753 Change-Id: Iea04f707e03b018c6a5567faca32c3439d1a78f6 --- M includes/JCValidators.php M tests/phpunit/tabular-good/06.json 2 files changed, 61 insertions(+), 25 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/JsonConfig refs/changes/90/326390/1 diff --git a/includes/JCValidators.php b/includes/JCValidators.php index 1fcb4f3..5a7c2b9 100644 --- a/includes/JCValidators.php +++ b/includes/JCValidators.php @@ -29,15 +29,17 @@ } /** Returns a validator function to check if the value is a valid boolean (true/false) + * @param bool $nullable if true, null becomes a valid value * @return callable */ - public static function isBool() { - return function ( JCValue $v, array $path ) { - if ( !is_bool( $v->getValue() ) ) { - $v->error( 'jsonconfig-err-bool', $path ); - return false; + public static function isBool( $nullable = false ) { + return function ( JCValue $v, array $path ) use ( $nullable ) { + $value = $v->getValue(); + if ( is_bool( $value ) || ( $nullable && $value === null ) ) { + return true; } - return true; + $v->error( 'jsonconfig-err-bool', $path ); + return false; }; } @@ -55,17 +57,20 @@ } /** Returns a validator function to check if the value is a valid single line string + * @param bool $nullable if true, null becomes a valid value * @param int $maxlength maximum allowed string size * @return callable */ - public static function isStringLine( $maxlength = 400 ) { - return function ( JCValue $v, array $path ) use ( $maxlength ) { - $str = $v->getValue(); - if ( !JCUtils::isValidLineString( $str, $maxlength ) ) { - $v->error( 'jsonconfig-err-stringline', $path, $maxlength ); - return false; + public static function isStringLine( $nullable = false, $maxlength = 400 ) { + return function ( JCValue $v, array $path ) use ( $nullable, $maxlength ) { + $value = $v->getValue(); + if ( JCUtils::isValidLineString( $value, $maxlength ) || + ( $nullable && $value === null ) + ) { + return true; } - return true; + $v->error( 'jsonconfig-err-stringline', $path, $maxlength ); + return false; }; } @@ -83,15 +88,17 @@ } /** Returns a validator function to check if the value is a valid integer + * @param bool $nullable if true, null becomes a valid value * @return callable */ - public static function isNumber() { - return function ( JCValue $v, array $path ) { - if ( !is_double( $v->getValue() ) && !is_int( $v->getValue() ) ) { - $v->error( 'jsonconfig-err-number', $path ); - return false; + public static function isNumber( $nullable = false ) { + return function ( JCValue $v, array $path ) use ( $nullable ) { + $value = $v->getValue(); + if ( is_double( $value ) || is_int( $value ) || ( $nullable && $value === null ) ) { + return true; } - return true; + $v->error( 'jsonconfig-err-number', $path ); + return false; }; } @@ -191,13 +198,17 @@ /** Returns a validator function that will ensure that the given value is a non-empty object, * with each key being an allowed language code, and each value being a single line string. + * @param bool $nullable if true, null becomes a valid value * @param int $maxlength * @return Closure */ - public static function isLocalizedString( $maxlength = 400 ) { - return function ( JCValue $jcv, array $path ) use ( $maxlength ) { + public static function isLocalizedString( $nullable = false, $maxlength = 400 ) { + return function ( JCValue $jcv, array $path ) use ( $nullable, $maxlength ) { if ( !$jcv->isMissing() ) { $v = $jcv->getValue(); + if ( $nullable && $v === null ) { + return true; + } if ( is_object( $v ) ) { $v = (array)$v; } @@ -279,16 +290,16 @@ if ( is_string( $value ) ) { switch ( $value ) { case 'string': - $validator = JCValidators::isStringLine(); + $validator = JCValidators::isStringLine( true ); break; case 'boolean': - $validator = JCValidators::isBool(); + $validator = JCValidators::isBool( true ); break; case 'number': - $validator = JCValidators::isNumber(); + $validator = JCValidators::isNumber( true ); break; case 'localized': - $validator = JCValidators::isLocalizedString(); + $validator = JCValidators::isLocalizedString( true ); break; } } diff --git a/tests/phpunit/tabular-good/06.json b/tests/phpunit/tabular-good/06.json index 03fe893..fc2d150 100644 --- a/tests/phpunit/tabular-good/06.json +++ b/tests/phpunit/tabular-good/06.json @@ -51,6 +51,12 @@ { "fr": "fr-baz" } + ], + [ + null, + null, + null, + null ] ] }, @@ -95,6 +101,12 @@ 0, false, "fr-baz" + ], + [ + null, + null, + null, + null ] ] }, @@ -139,7 +151,14 @@ 0, false, "fr-baz" + ], + [ + null, + null, + null, + null ] + ] }, "fr": { @@ -183,6 +202,12 @@ 0, false, "fr-baz" + ], + [ + null, + null, + null, + null ] ] } -- To view, visit https://gerrit.wikimedia.org/r/326390 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iea04f707e03b018c6a5567faca32c3439d1a78f6 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/JsonConfig Gerrit-Branch: master Gerrit-Owner: Yurik <yu...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits