Changeset 53751 for trunk/tests/phpunit/tests/image/functions.php
- Timestamp:
- 07/21/2022 06:01:01 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/phpunit/tests/image/functions.php
r53542 r53751 640 640 } 641 641 642 // Use legacy JPEG output. 643 add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 644 642 645 $orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf'; 643 646 $test_file = get_temp_dir() . 'wordpress-gsoc-flyer.pdf'; … … 678 681 'mime-type' => 'image/jpeg', 679 682 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-232x300.jpg' ), 683 'sources' => array( 684 'image/jpeg' => array( 685 'file' => 'wordpress-gsoc-flyer-pdf-232x300.jpg', 686 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-232x300.jpg' ), 687 ), 688 ), 680 689 ), 681 690 'large' => array( … … 685 694 'mime-type' => 'image/jpeg', 686 695 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ), 696 'sources' => array( 697 'image/jpeg' => array( 698 'file' => 'wordpress-gsoc-flyer-pdf-791x1024.jpg', 699 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ), 700 ), 701 ), 687 702 ), 688 703 'thumbnail' => array( … … 692 707 'mime-type' => 'image/jpeg', 693 708 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ), 709 'sources' => array( 710 'image/jpeg' => array( 711 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg', 712 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ), 713 ), 714 ), 694 715 ), 695 716 ), … … 703 724 unlink( $temp_dir . $size['file'] ); 704 725 } 726 remove_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 705 727 } 706 728 … … 716 738 717 739 update_option( 'medium_crop', 1 ); 740 741 // Use legacy JPEG output. 742 add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 718 743 719 744 $orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf'; … … 755 780 'mime-type' => 'image/jpeg', 756 781 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-300x300.jpg' ), 782 'sources' => array( 783 'image/jpeg' => array( 784 'file' => 'wordpress-gsoc-flyer-pdf-300x300.jpg', 785 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-300x300.jpg' ), 786 ), 787 ), 757 788 ), 758 789 'large' => array( … … 762 793 'mime-type' => 'image/jpeg', 763 794 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ), 795 'sources' => array( 796 'image/jpeg' => array( 797 'file' => 'wordpress-gsoc-flyer-pdf-791x1024.jpg', 798 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ), 799 ), 800 ), 801 764 802 ), 765 803 'thumbnail' => array( … … 769 807 'mime-type' => 'image/jpeg', 770 808 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ), 809 'sources' => array( 810 'image/jpeg' => array( 811 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg', 812 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ), 813 ), 814 ), 771 815 ), 772 816 ), … … 780 824 unlink( $temp_dir . $size['file'] ); 781 825 } 826 remove_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 827 782 828 } 783 829 … … 789 835 $this->markTestSkipped( 'Rendering PDFs is not supported on this system.' ); 790 836 } 837 838 // Use legacy JPEG output. 839 add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 791 840 792 841 $orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf'; … … 822 871 'mime-type' => 'image/jpeg', 823 872 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-77x100.jpg' ), 873 'sources' => array( 874 'image/jpeg' => array( 875 'file' => 'wordpress-gsoc-flyer-pdf-77x100.jpg', 876 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-77x100.jpg' ), 877 ), 878 ), 824 879 ); 825 880 … … 837 892 unlink( $temp_dir . $size['file'] ); 838 893 } 894 remove_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 839 895 } 840 896 … … 1027 1083 ); 1028 1084 } 1085 1086 /** 1087 * @ticket 55443 1088 */ 1089 public function test_wp_upload_image_mime_transforms_generates_webp_and_jpeg_for_both_by_default() { 1090 $result = wp_upload_image_mime_transforms( 42 ); 1091 $this->assertArrayHasKey( 'image/jpeg', $result ); 1092 $this->assertArrayHasKey( 'image/webp', $result ); 1093 $this->assertSameSets( array( 'image/jpeg', 'image/webp' ), $result['image/jpeg'] ); 1094 $this->assertSameSets( array( 'image/jpeg', 'image/webp' ), $result['image/webp'] ); 1095 } 1096 1097 /** 1098 * @ticket 55443 1099 */ 1100 public function test_wp_upload_image_mime_transforms_filter_always_use_webp_instead_of_jpeg() { 1101 add_filter( 1102 'wp_upload_image_mime_transforms', 1103 function( $transforms ) { 1104 // Ensure JPG only results in WebP files. 1105 $transforms['image/jpeg'] = array( 'image/webp' ); 1106 // Unset WebP since it does not need any transformation in that case. 1107 unset( $transforms['image/webp'] ); 1108 return $transforms; 1109 } 1110 ); 1111 1112 $result = wp_upload_image_mime_transforms( 42 ); 1113 $this->assertArrayHasKey( 'image/jpeg', $result ); 1114 $this->assertArrayNotHasKey( 'image/webp', $result ); 1115 $this->assertSameSets( array( 'image/webp' ), $result['image/jpeg'] ); 1116 } 1117 1118 /** 1119 * @ticket 55443 1120 */ 1121 public function test_wp_upload_image_mime_transforms_filter_receives_parameters() { 1122 $attachment_id = null; 1123 add_filter( 1124 'wp_upload_image_mime_transforms', 1125 function( $transforms, $param1 ) use ( &$attachment_id ) { 1126 $attachment_id = $param1; 1127 return $transforms; 1128 }, 1129 10, 1130 2 1131 ); 1132 1133 wp_upload_image_mime_transforms( 23 ); 1134 $this->assertSame( 23, $attachment_id ); 1135 } 1136 1137 /** 1138 * @ticket 55443 1139 */ 1140 public function test_wp_upload_image_mime_transforms_filter_with_empty_array() { 1141 add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 1142 $result = wp_upload_image_mime_transforms( 42 ); 1143 $this->assertSame( array(), $result ); 1144 } 1145 1146 /** 1147 * @ticket 55443 1148 */ 1149 public function test_wp_upload_image_mime_transforms_filter_with_invalid_usage() { 1150 $default = wp_upload_image_mime_transforms( 42 ); 1151 1152 add_filter( 'wp_upload_image_mime_transforms', '__return_false' ); 1153 $result = wp_upload_image_mime_transforms( 42 ); 1154 $this->assertSame( $default, $result ); 1155 } 1156 1157 /** 1158 * @ticket 55443 1159 */ 1160 public function test__wp_get_primary_and_additional_mime_types_default() { 1161 $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg'; 1162 1163 list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 ); 1164 $this->assertSame( 'image/jpeg', $primary_mime_type ); 1165 1166 // WebP may not be supported by the server, in which case it will be stripped from the results. 1167 if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) { 1168 $this->assertSame( array( 'image/webp' ), $additional_mime_types ); 1169 } else { 1170 $this->assertSame( array(), $additional_mime_types ); 1171 } 1172 } 1173 1174 /** 1175 * @ticket 55443 1176 */ 1177 public function test__wp_get_primary_and_additional_mime_types_prefer_original_mime() { 1178 $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg'; 1179 1180 // Set 'image/jpeg' only as secondary output MIME type. 1181 // Still, because it is the original, it should be chosen as primary over 'image/webp'. 1182 add_filter( 1183 'wp_upload_image_mime_transforms', 1184 function( $transforms ) { 1185 $transforms['image/jpeg'] = array( 'image/webp', 'image/jpeg' ); 1186 return $transforms; 1187 } 1188 ); 1189 1190 list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 ); 1191 $this->assertSame( 'image/jpeg', $primary_mime_type ); 1192 1193 // WebP may not be supported by the server, in which case it will be stripped from the results. 1194 if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) { 1195 $this->assertSame( array( 'image/webp' ), $additional_mime_types ); 1196 } else { 1197 $this->assertSame( array(), $additional_mime_types ); 1198 } 1199 } 1200 1201 /** 1202 * @ticket 55443 1203 */ 1204 public function test__wp_get_primary_and_additional_mime_types_use_original_mime_when_no_transformation_rules() { 1205 $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg'; 1206 1207 // Strip all transformation rules. 1208 add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' ); 1209 1210 list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 ); 1211 $this->assertSame( 'image/jpeg', $primary_mime_type ); 1212 $this->assertSame( array(), $additional_mime_types ); 1213 } 1214 1215 /** 1216 * @ticket 55443 1217 */ 1218 public function test__wp_get_primary_and_additional_mime_types_different_output_mime() { 1219 $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg'; 1220 1221 // Set 'image/webp' as the only output MIME type. 1222 // In that case, JPEG is not generated at all, so WebP becomes the primary MIME type. 1223 add_filter( 1224 'wp_upload_image_mime_transforms', 1225 function( $transforms ) { 1226 $transforms['image/jpeg'] = array( 'image/webp' ); 1227 return $transforms; 1228 } 1229 ); 1230 1231 list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 ); 1232 1233 // WebP may not be supported by the server, in which case it will fall back to the original MIME type. 1234 if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) { 1235 $this->assertSame( 'image/webp', $primary_mime_type ); 1236 } else { 1237 $this->assertSame( 'image/jpeg', $primary_mime_type ); 1238 } 1239 1240 $this->assertSame( array(), $additional_mime_types ); 1241 } 1242 1243 /** 1244 * @ticket 55443 1245 */ 1246 public function test__wp_get_primary_and_additional_mime_types_different_output_mimes() { 1247 $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg'; 1248 1249 // Set 'image/webp' and 'image/avif' as output MIME types. 1250 // In that case, JPEG is not generated at all, with WebP being the primary MIME type and AVIF the secondary. 1251 add_filter( 1252 'wp_upload_image_mime_transforms', 1253 function( $transforms ) { 1254 $transforms['image/jpeg'] = array( 'image/webp', 'image/avif' ); 1255 return $transforms; 1256 } 1257 ); 1258 1259 list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 ); 1260 1261 // WebP may not be supported by the server, in which case it will fall back to the original MIME type. 1262 if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) { 1263 $this->assertSame( 'image/webp', $primary_mime_type ); 1264 } else { 1265 $this->assertSame( 'image/jpeg', $primary_mime_type ); 1266 } 1267 1268 // AVIF may not be supported by the server, in which case it will be stripped from the results. 1269 if ( wp_image_editor_supports( array( 'mime_type' => 'image/avif' ) ) ) { 1270 $this->assertSame( array( 'image/avif' ), $additional_mime_types ); 1271 } else { 1272 $this->assertSame( array(), $additional_mime_types ); 1273 } 1274 } 1275 1276 /** 1277 * @ticket 55443 1278 * @dataProvider data__wp_filter_image_sizes_additional_mime_type_support 1279 */ 1280 public function test__wp_filter_image_sizes_additional_mime_type_support( $input_size_data, $filter_callback, $expected_size_names ) { 1281 remove_all_filters( 'wp_image_sizes_with_additional_mime_type_support' ); 1282 if ( $filter_callback ) { 1283 add_filter( 'wp_image_sizes_with_additional_mime_type_support', $filter_callback ); 1284 } 1285 1286 $expected_size_data = array_intersect_key( $input_size_data, array_flip( $expected_size_names ) ); 1287 1288 $output_size_data = _wp_filter_image_sizes_additional_mime_type_support( $input_size_data, 42 ); 1289 $this->assertEqualSetsWithIndex( $expected_size_data, $output_size_data ); 1290 } 1291 1292 public function data__wp_filter_image_sizes_additional_mime_type_support() { 1293 $thumbnail_data = array( 1294 'width' => 150, 1295 'height' => 150, 1296 'crop' => true, 1297 ); 1298 $medium_data = array( 1299 'width' => 300, 1300 'height' => 300, 1301 'crop' => false, 1302 ); 1303 $medium_large_data = array( 1304 'width' => 768, 1305 'height' => 0, 1306 'crop' => false, 1307 ); 1308 $large_data = array( 1309 'width' => 1024, 1310 'height' => 1024, 1311 'crop' => false, 1312 ); 1313 $custom_data = array( 1314 'width' => 512, 1315 'height' => 512, 1316 'crop' => true, 1317 ); 1318 1319 return array( 1320 array( 1321 array( 1322 'thumbnail' => $thumbnail_data, 1323 'medium' => $medium_data, 1324 'medium_large' => $medium_large_data, 1325 'large' => $large_data, 1326 ), 1327 null, 1328 array( 'thumbnail', 'medium', 'medium_large', 'large' ), 1329 ), 1330 array( 1331 array( 1332 'thumbnail' => $thumbnail_data, 1333 'medium' => $medium_data, 1334 'custom' => $custom_data, 1335 ), 1336 null, 1337 array( 'thumbnail', 'medium' ), 1338 ), 1339 array( 1340 array( 1341 'thumbnail' => $thumbnail_data, 1342 'medium' => $medium_data, 1343 'medium_large' => $medium_large_data, 1344 'large' => $large_data, 1345 ), 1346 function( $enabled_sizes ) { 1347 unset( $enabled_sizes['medium_large'], $enabled_sizes['large'] ); 1348 return $enabled_sizes; 1349 }, 1350 array( 'thumbnail', 'medium' ), 1351 ), 1352 array( 1353 array( 1354 'thumbnail' => $thumbnail_data, 1355 'medium' => $medium_data, 1356 'medium_large' => $medium_large_data, 1357 'large' => $large_data, 1358 ), 1359 function( $enabled_sizes ) { 1360 $enabled_sizes['medium_large'] = false; 1361 $enabled_sizes['large'] = false; 1362 return $enabled_sizes; 1363 }, 1364 array( 'thumbnail', 'medium' ), 1365 ), 1366 array( 1367 array( 1368 'thumbnail' => $thumbnail_data, 1369 'medium' => $medium_data, 1370 'custom' => $custom_data, 1371 ), 1372 function( $enabled_sizes ) { 1373 unset( $enabled_sizes['medium'] ); 1374 $enabled_sizes['custom'] = true; 1375 return $enabled_sizes; 1376 }, 1377 array( 'thumbnail', 'custom' ), 1378 ), 1379 ); 1380 } 1381 1382 /** 1383 * Test the `_wp_maybe_scale_and_rotate_image()` function. 1384 * 1385 * @dataProvider data_test__wp_maybe_scale_and_rotate_image 1386 * 1387 * @ticket 55443 1388 */ 1389 public function test__wp_maybe_scale_and_rotate_image( $file, $imagesize, $mime_type, $expected ) { 1390 if ( ! wp_image_editor_supports( array( 'mime_type' => $mime_type ) ) ) { 1391 $this->markTestSkipped( sprintf( 'This test requires %s support.', $mime_type ) ); 1392 } 1393 1394 $attributes = array( 'post_mime_type' => $mime_type ); 1395 $attachment_id = $this->factory->attachment->create_object( $file, 0, $attributes ); 1396 $exif_meta = wp_read_image_metadata( $file ); 1397 1398 list( $editor, $resized, $rotated ) = _wp_maybe_scale_and_rotate_image( $file, $attachment_id, $imagesize, $exif_meta, $mime_type ); 1399 1400 $this->assertSame( $expected['rotated'], $rotated ); 1401 $this->assertSame( $expected['resized'], $resized ); 1402 $this->assertSame( $expected['size'], $editor->get_size() ); 1403 } 1404 1405 /** 1406 * Data provider for the `test__wp_maybe_scale_and_rotate_image()` test. 1407 * 1408 * @return array 1409 */ 1410 public function data_test__wp_maybe_scale_and_rotate_image() { 1411 return array( 1412 1413 // Image that will be scaled. 1414 array( 1415 DIR_TESTDATA . '/images/test-image-large.jpg', 1416 array( 3000, 2250 ), 1417 'image/jpeg', 1418 array( 1419 'rotated' => false, 1420 'resized' => true, 1421 'size' => array( 1422 'width' => 2560, 1423 'height' => 1920, 1424 ), 1425 ), 1426 ), 1427 1428 // Image that will not be scaled. 1429 array( 1430 DIR_TESTDATA . '/images/canola.jpg', 1431 array( 640, 480 ), 1432 'image/jpeg', 1433 array( 1434 'rotated' => false, 1435 'resized' => false, 1436 'size' => array( 1437 'width' => 640, 1438 'height' => 480, 1439 ), 1440 ), 1441 ), 1442 1443 // Image that will be flipped. 1444 array( 1445 DIR_TESTDATA . '/images/test-image-upside-down.jpg', 1446 array( 600, 450 ), 1447 'image/jpeg', 1448 array( 1449 'rotated' => true, 1450 'resized' => false, 1451 'size' => array( 1452 'width' => 600, 1453 'height' => 450, 1454 ), 1455 ), 1456 ), 1457 1458 // Image that will be rotated. 1459 array( 1460 DIR_TESTDATA . '/images/test-image-rotated-90ccw.jpg', 1461 array( 1200, 1800 ), 1462 'image/jpeg', 1463 array( 1464 'rotated' => true, 1465 'resized' => false, 1466 'size' => array( 1467 'width' => 1800, 1468 'height' => 1200, 1469 ), 1470 ), 1471 ), 1472 1473 // Image that will not be rotated - WebP Exif is not supported in PHP. 1474 array( 1475 DIR_TESTDATA . '/images/test-image-rotated-90cw.webp', 1476 array( 1024, 768 ), 1477 'image/webp', 1478 array( 1479 'rotated' => false, 1480 'resized' => false, 1481 'size' => array( 1482 'width' => 1024, 1483 'height' => 768, 1484 ), 1485 ), 1486 ), 1487 1488 ); 1489 } 1490 1491 /** 1492 * Test the `_wp_get_image_suffix()` function. 1493 * @dataProvider data_test__wp_get_image_suffix 1494 * 1495 * @ticket 55443 1496 */ 1497 public function test__wp_get_image_suffix( $resized, $rotated, $expected ) { 1498 $this->assertSame( $expected, _wp_get_image_suffix( $resized, $rotated ) ); 1499 } 1500 1501 /** 1502 * Data provider for the `test__wp_get_image_suffix()` test. 1503 */ 1504 public function data_test__wp_get_image_suffix() { 1505 return array( 1506 array( false, false, '' ), 1507 array( true, false, 'scaled' ), 1508 array( false, true, 'rotated' ), 1509 array( true, true, 'scaled' ), 1510 ); 1511 } 1029 1512 }
Note: See TracChangeset
for help on using the changeset viewer.