Krinkle has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/188621

Change subject: Move wfThumbIsStandard() to GlobalFunctions and add tests
......................................................................

Move wfThumbIsStandard() to GlobalFunctions and add tests

Change-Id: Ife9c011a476a4022cd72d433497944cbd7258e67
---
M includes/GlobalFunctions.php
A tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
M thumb.php
3 files changed, 147 insertions(+), 60 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/21/188621/1

diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 2025e17..0495864 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -4198,3 +4198,64 @@
        wfDeprecated( __METHOD__, '1.24' );
        return IP::isConfiguredProxy( $ip );
 }
+
+/**
+ * Returns true if these thumbnail parameters match one that MediaWiki
+ * requests from file description pages and/or parser output.
+ *
+ * $params is considered non-standard if they involve a non-standard
+ * width or any non-default parameters aside from width and page number.
+ * The number of possible files with standard parameters is far less than
+ * that of all combinations; rate-limiting for them can thus be more generious.
+ *
+ * @param File $file
+ * @param array $params
+ * @return bool
+ * @since 1.24 Moved from thumb.php to GlobalFunctions in 1.25
+ */
+function wfThumbIsStandard( File $file, array $params ) {
+       global $wgThumbLimits, $wgImageLimits;
+
+       $handler = $file->getHandler();
+       if ( !$handler || !isset( $params['width'] ) ) {
+               return false;
+       }
+
+       $basicParams = array();
+       if ( isset( $params['page'] ) ) {
+               $basicParams['page'] = $params['page'];
+       }
+
+       // Check if the width matches one of $wgThumbLimits
+       if ( in_array( $params['width'], $wgThumbLimits ) ) {
+               $normalParams = $basicParams + array( 'width' => 
$params['width'] );
+               // Append any default values to the map (e.g. "lossy", 
"lossless", ...)
+               $handler->normaliseParams( $file, $normalParams );
+       } else {
+               // If not, then check if the width matchs one of $wgImageLimits
+               $match = false;
+               foreach ( $wgImageLimits as $pair ) {
+                       $normalParams = $basicParams + array( 'width' => 
$pair[0], 'height' => $pair[1] );
+                       // Decide whether the thumbnail should be scaled on 
width or height.
+                       // Also append any default values to the map (e.g. 
"lossy", "lossless", ...)
+                       $handler->normaliseParams( $file, $normalParams );
+                       // Check if this standard thumbnail size maps to the 
given width
+                       if ( $normalParams['width'] == $params['width'] ) {
+                               $match = true;
+                               break;
+                       }
+               }
+               if ( !$match ) {
+                       return false; // not standard for description pages
+               }
+       }
+
+       // Check that the given values for non-page, non-width, params are just 
defaults
+       foreach ( $params as $key => $value ) {
+               if ( !isset( $normalParams[$key] ) || $normalParams[$key] != 
$value ) {
+                       return false;
+               }
+       }
+
+       return true;
+}
diff --git a/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php 
b/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
new file mode 100644
index 0000000..25f665b
--- /dev/null
+++ b/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfThumbIsStandard
+ */
+class WfThumbIsStandardTest extends MediaWikiTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgThumbLimits' => array(
+                               100,
+                               400
+                       ),
+                       'wgImageLimits' => array(
+                               array( 300, 225 ),
+                               array( 800, 600 ),
+                       ),
+                       'wgMediaHandlers' => array(
+                               'unknown/unknown' => 'MockBitmapHandler',
+                       ),
+               ) );
+       }
+
+       public static function provideThumbParams() {
+               return array(
+                       // Thumb limits
+                       array(
+                               'Standard thumb width',
+                               true,
+                               array( 'width' => 100 ),
+                       ),
+                       array(
+                               'Standard thumb width',
+                               true,
+                               array( 'width' => 400 ),
+                       ),
+                       array(
+                               'Non-standard thumb width',
+                               false,
+                               array( 'width' => 300 ),
+                       ),
+                       // Image limits
+                       // Note: Image limits are measured as pairs. Individual 
values
+                       // may be non-standard based on the aspect ratio.
+                       array(
+                               'Standard image width/height pair',
+                               true,
+                               array( 'width' => 250, 'height' => 225 ),
+                       ),
+                       array(
+                               'Standard image width/height pair',
+                               true,
+                               array( 'width' => 667, 'height' => 600 ),
+                       ),
+                       array(
+                               'Standard image width is non-standard if image 
does not fit aspect ratio',
+                               false,
+                               array( 'width' => 300 ),
+                       ),
+                       array(
+                               'Non-standard height is standard if it 
corresponds to standard image width',
+                               true,
+                               array( 'width' => 250 ),
+                       ),
+                       array(
+                               'Height-only is always non-standard',
+                               false,
+                               array( 'height' => 225 ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideThumbParams
+        */
+       public function testIsStandard( $message, $expected, $params ) {
+               $this->assertSame(
+                       $expected,
+                       wfThumbIsStandard( new FakeDimensionFile( array( 2000, 
1800 ) ), $params ),
+                       $message
+               );
+       }
+}
diff --git a/thumb.php b/thumb.php
index 7352dc4..5ab181d 100644
--- a/thumb.php
+++ b/thumb.php
@@ -425,66 +425,6 @@
 }
 
 /**
- * Returns true if this thumbnail is one that MediaWiki generates
- * links to on file description pages and possibly parser output.
- *
- * $params is considered non-standard if they involve a non-standard
- * width or any non-default parameters aside from width and page number.
- * The number of possible files with standard parameters is far less than
- * that of all combinations; rate-limiting for them can thus be more generious.
- *
- * @param File $file
- * @param array $params
- * @return bool
- */
-function wfThumbIsStandard( File $file, array $params ) {
-       global $wgThumbLimits, $wgImageLimits;
-
-       $handler = $file->getHandler();
-       if ( !$handler || !isset( $params['width'] ) ) {
-               return false;
-       }
-
-       $basicParams = array();
-       if ( isset( $params['page'] ) ) {
-               $basicParams['page'] = $params['page'];
-       }
-
-       // Check if the width matches one of $wgThumbLimits
-       if ( in_array( $params['width'], $wgThumbLimits ) ) {
-               $normalParams = $basicParams + array( 'width' => 
$params['width'] );
-               // Append any default values to the map (e.g. "lossy", 
"lossless", ...)
-               $handler->normaliseParams( $file, $normalParams );
-       } else {
-               // If not, then check if the width matchs one of $wgImageLimits
-               $match = false;
-               foreach ( $wgImageLimits as $pair ) {
-                       $normalParams = $basicParams + array( 'width' => 
$pair[0], 'height' => $pair[1] );
-                       // Decide whether the thumbnail should be scaled on 
width or height.
-                       // Also append any default values to the map (e.g. 
"lossy", "lossless", ...)
-                       $handler->normaliseParams( $file, $normalParams );
-                       // Check if this standard thumbnail size maps to the 
given width
-                       if ( $normalParams['width'] == $params['width'] ) {
-                               $match = true;
-                               break;
-                       }
-               }
-               if ( !$match ) {
-                       return false; // not standard for description pages
-               }
-       }
-
-       // Check that the given values for non-page, non-width, params are just 
defaults
-       foreach ( $params as $key => $value ) {
-               if ( !isset( $normalParams[$key] ) || $normalParams[$key] != 
$value ) {
-                       return false;
-               }
-       }
-
-       return true;
-}
-
-/**
  * Convert pathinfo type parameter, into normal request parameters
  *
  * So for example, if the request was redirected from

-- 
To view, visit https://gerrit.wikimedia.org/r/188621
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ife9c011a476a4022cd72d433497944cbd7258e67
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Krinkle <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to