attachment->create_upload_object( $filename );
}
public static function wpTearDownAfterClass() {
$GLOBALS['_wp_additional_image_sizes'] = self::$_sizes;
}
public static function tearDownAfterClass() {
wp_delete_post( self::$large_id, true );
parent::tearDownAfterClass();
}
function setUp() {
parent::setUp();
$this->caption = 'A simple caption.';
$this->alternate_caption = 'Alternate caption.';
$this->html_content = <<bolded caption with a link.
CAP;
$this->img_content = <<
CAP;
$this->img_name = 'image.jpg';
$this->img_url = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/' . $this->img_name;
$this->img_html = '
';
$this->img_meta = array(
'width' => 100,
'height' => 100,
'sizes' => '',
);
}
function test_img_caption_shortcode_added() {
global $shortcode_tags;
$this->assertEquals( 'img_caption_shortcode', $shortcode_tags['caption'] );
$this->assertEquals( 'img_caption_shortcode', $shortcode_tags['wp_caption'] );
}
function test_img_caption_shortcode_with_empty_params() {
$result = img_caption_shortcode( array() );
$this->assertNull( $result );
}
/**
* @ticket 33981
*/
function test_img_caption_shortcode_with_empty_params_but_content() {
$result = img_caption_shortcode( array(), $this->caption );
$this->assertEquals( $this->caption, $result );
}
/**
* @ticket 33981
*/
function test_img_caption_shortcode_short_circuit_filter() {
add_filter( 'img_caption_shortcode', array( $this, '_return_alt_caption' ) );
$result = img_caption_shortcode( array(), $this->caption );
$this->assertEquals( $this->alternate_caption, $result );
}
/**
* Filter used in test_img_caption_shortcode_short_circuit_filter()
*/
function _return_alt_caption() {
return $this->alternate_caption;
}
/**
* @ticket 33981
*/
function test_img_caption_shortcode_empty_width() {
$result = img_caption_shortcode(
array(
'width' => 0,
),
$this->caption
);
$this->assertEquals( $this->caption, $result );
}
/**
* @ticket 33981
*/
function test_img_caption_shortcode_empty_caption() {
$result = img_caption_shortcode(
array(
'caption' => '',
)
);
$this->assertNull( $result );
}
/**
* @ticket 33981
*/
function test_img_caption_shortcode_empty_caption_and_content() {
$result = img_caption_shortcode(
array(
'caption' => '',
),
$this->caption
);
$this->assertEquals( $this->caption, $result );
}
function test_img_caption_shortcode_with_old_format() {
$result = img_caption_shortcode(
array(
'width' => 20,
'caption' => $this->caption,
)
);
$this->assertEquals( 2, preg_match_all( '/wp-caption/', $result, $_r ) );
$this->assertEquals( 1, preg_match_all( '/alignnone/', $result, $_r ) );
$this->assertEquals( 1, preg_match_all( "/{$this->caption}/", $result, $_r ) );
if ( current_theme_supports( 'html5', 'caption' ) ) {
$this->assertEquals( 1, preg_match_all( '/width: 20/', $result, $_r ) );
} else {
$this->assertEquals( 1, preg_match_all( '/width: 30/', $result, $_r ) );
}
}
function test_img_caption_shortcode_with_old_format_id_and_align() {
$result = img_caption_shortcode(
array(
'width' => 20,
'caption' => $this->caption,
'id' => '"myId',
'align' => '&myAlignment',
)
);
$this->assertEquals( 1, preg_match_all( '/wp-caption &myAlignment/', $result, $_r ) );
$this->assertEquals( 1, preg_match_all( '/id="myId"/', $result, $_r ) );
$this->assertEquals( 1, preg_match_all( "/{$this->caption}/", $result, $_r ) );
}
function test_img_caption_shortcode_with_old_format_and_class() {
$result = img_caption_shortcode(
array(
'width' => 20,
'class' => 'some-class another-class',
'caption' => $this->caption,
)
);
$this->assertEquals( 1, preg_match_all( '/wp-caption alignnone some-class another-class/', $result, $_r ) );
}
function test_new_img_caption_shortcode_with_html_caption() {
$result = img_caption_shortcode(
array(
'width' => 20,
'caption' => $this->html_content,
)
);
$our_preg = preg_quote( $this->html_content );
$this->assertEquals( 1, preg_match_all( "~{$our_preg}~", $result, $_r ) );
}
function test_new_img_caption_shortcode_new_format() {
$result = img_caption_shortcode(
array( 'width' => 20 ),
$this->img_content . $this->html_content
);
$img_preg = preg_quote( $this->img_content );
$content_preg = preg_quote( $this->html_content );
$this->assertEquals( 1, preg_match_all( "~{$img_preg}.*wp-caption-text~", $result, $_r ) );
$this->assertEquals( 1, preg_match_all( "~wp-caption-text.*{$content_preg}~", $result, $_r ) );
}
function test_new_img_caption_shortcode_new_format_and_linked_image() {
$linked_image = "{$this->img_content}";
$result = img_caption_shortcode(
array( 'width' => 20 ),
$linked_image . $this->html_content
);
$img_preg = preg_quote( $linked_image );
$content_preg = preg_quote( $this->html_content );
$this->assertEquals( 1, preg_match_all( "~{$img_preg}.*wp-caption-text~", $result, $_r ) );
$this->assertEquals( 1, preg_match_all( "~wp-caption-text.*{$content_preg}~", $result, $_r ) );
}
function test_new_img_caption_shortcode_new_format_and_linked_image_with_newline() {
$linked_image = "{$this->img_content}";
$result = img_caption_shortcode(
array( 'width' => 20 ),
$linked_image . "\n\n" . $this->html_content
);
$img_preg = preg_quote( $linked_image );
$content_preg = preg_quote( $this->html_content );
$this->assertEquals( 1, preg_match_all( "~{$img_preg}.*wp-caption-text~", $result, $_r ) );
$this->assertEquals( 1, preg_match_all( "~wp-caption-text.*{$content_preg}~", $result, $_r ) );
}
/**
* @ticket 34595
*/
function test_img_caption_shortcode_has_aria_describedby() {
$result = img_caption_shortcode(
array(
'width' => 20,
'id' => 'myId',
),
$this->img_content . $this->html_content
);
$this->assertEquals( 1, preg_match_all( '/aria-describedby="caption-myId"/', $result, $_r ) );
}
function test_add_remove_oembed_provider() {
wp_oembed_add_provider( 'http://foo.bar/*', 'http://foo.bar/oembed' );
$this->assertTrue( wp_oembed_remove_provider( 'http://foo.bar/*' ) );
$this->assertFalse( wp_oembed_remove_provider( 'http://foo.bar/*' ) );
}
/**
* @ticket 23776
*/
function test_autoembed_empty() {
global $wp_embed;
$content = '';
$result = $wp_embed->autoembed( $content );
$this->assertEquals( $content, $result );
}
/**
* @ticket 23776
*/
function test_autoembed_no_paragraphs_around_urls() {
global $wp_embed;
$content = <<http://some.link/
http://some.other.link/
EOF;
$result = $wp_embed->autoembed( $content );
$this->assertEquals( $content, $result );
}
function data_autoembed() {
return array(
// Should embed
array(
'https://w.org',
'[embed]',
),
array(
'test
https://w.org
test',
'test
[embed]
test',
),
array(
'https://w.org
',
'[embed]
',
),
array(
' https://w.org
',
' [embed]
',
),
array(
'test
https://w.org
test
',
'test
[embed]
test
',
),
array(
'https://w.org
',
'[embed]
',
),
// Should NOT embed
array(
'test https://w.org
',
),
array(
'https://w.org',
),
array(
'https://w.org
',
),
array(
'
https://w.org',
),
);
}
/**
* @dataProvider data_autoembed
*/
function test_autoembed( $content, $result = null ) {
$wp_embed = new Test_Autoembed;
$this->assertEquals( $wp_embed->autoembed( $content ), $result ? $result : $content );
}
function test_wp_prepare_attachment_for_js() {
// Attachment without media
$id = wp_insert_attachment(
array(
'post_status' => 'publish',
'post_title' => 'Prepare',
'post_content_filtered' => 'Prepare',
'post_type' => 'post',
)
);
$post = get_post( $id );
$prepped = wp_prepare_attachment_for_js( $post );
$this->assertInternalType( 'array', $prepped );
$this->assertEquals( 0, $prepped['uploadedTo'] );
$this->assertEquals( '', $prepped['mime'] );
$this->assertEquals( '', $prepped['type'] );
$this->assertEquals( '', $prepped['subtype'] );
// #21963, there will be a guid always, so there will be a URL
$this->assertNotEquals( '', $prepped['url'] );
$this->assertEquals( site_url( 'wp-includes/images/media/default.png' ), $prepped['icon'] );
// Fake a mime
$post->post_mime_type = 'image/jpeg';
$prepped = wp_prepare_attachment_for_js( $post );
$this->assertEquals( 'image/jpeg', $prepped['mime'] );
$this->assertEquals( 'image', $prepped['type'] );
$this->assertEquals( 'jpeg', $prepped['subtype'] );
// Fake a mime without a slash. See #WP22532
$post->post_mime_type = 'image';
$prepped = wp_prepare_attachment_for_js( $post );
$this->assertEquals( 'image', $prepped['mime'] );
$this->assertEquals( 'image', $prepped['type'] );
$this->assertEquals( '', $prepped['subtype'] );
// Test that if author is not found, we return "(no author)" as `display_name`.
// The previously used test post contains no author, so we can reuse it.
$this->assertEquals( '(no author)', $prepped['authorName'] );
// Test that if author has HTML entities in display_name, they're decoded correctly.
$html_entity_author = self::factory()->user->create(
array(
'display_name' => 'You & Me',
)
);
$post->post_author = $html_entity_author;
$prepped = wp_prepare_attachment_for_js( $post );
$this->assertEquals( 'You & Me', $prepped['authorName'] );
}
/**
* @ticket 38965
*/
function test_wp_prepare_attachment_for_js_without_image_sizes() {
// Create the attachement post.
$id = wp_insert_attachment(
array(
'post_title' => 'Attachment Title',
'post_type' => 'attachment',
'post_parent' => 0,
'post_mime_type' => 'image/jpeg',
'guid' => 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/test-image.jpg',
)
);
// Add attachment metadata without sizes.
wp_update_attachment_metadata(
$id,
array(
'width' => 50,
'height' => 50,
'file' => 'test-image.jpg',
)
);
$prepped = wp_prepare_attachment_for_js( get_post( $id ) );
$this->assertTrue( isset( $prepped['sizes'] ) );
}
/**
* @ticket 19067
* @expectedDeprecated wp_convert_bytes_to_hr
*/
function test_wp_convert_bytes_to_hr() {
$kb = 1024;
$mb = $kb * 1024;
$gb = $mb * 1024;
$tb = $gb * 1024;
// test if boundaries are correct
$this->assertEquals( '1TB', wp_convert_bytes_to_hr( $tb ) );
$this->assertEquals( '1GB', wp_convert_bytes_to_hr( $gb ) );
$this->assertEquals( '1MB', wp_convert_bytes_to_hr( $mb ) );
$this->assertEquals( '1KB', wp_convert_bytes_to_hr( $kb ) );
$this->assertEquals( '1 TB', size_format( $tb ) );
$this->assertEquals( '1 GB', size_format( $gb ) );
$this->assertEquals( '1 MB', size_format( $mb ) );
$this->assertEquals( '1 KB', size_format( $kb ) );
// now some values around
$hr = wp_convert_bytes_to_hr( $tb + $tb / 2 + $mb );
$this->assertEquals( 1.50000095367, (float) str_replace( ',', '.', $hr ), 'The values should be equal', 0.0001 );
$hr = wp_convert_bytes_to_hr( $tb - $mb - $kb );
$this->assertEquals( 1023.99902248, (float) str_replace( ',', '.', $hr ), 'The values should be equal', 0.0001 );
$hr = wp_convert_bytes_to_hr( $gb + $gb / 2 + $mb );
$this->assertEquals( 1.5009765625, (float) str_replace( ',', '.', $hr ), 'The values should be equal', 0.0001 );
$hr = wp_convert_bytes_to_hr( $gb - $mb - $kb );
$this->assertEquals( 1022.99902344, (float) str_replace( ',', '.', $hr ), 'The values should be equal', 0.0001 );
// edge
$this->assertEquals( '-1B', wp_convert_bytes_to_hr( -1 ) );
$this->assertEquals( '0B', wp_convert_bytes_to_hr( 0 ) );
}
/**
* @ticket 22960
*/
function test_get_attached_images() {
$post_id = self::factory()->post->create();
$attachment_id = self::factory()->attachment->create_object(
$this->img_name,
$post_id,
array(
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$images = get_attached_media( 'image', $post_id );
$this->assertEquals( $images, array( $attachment_id => get_post( $attachment_id ) ) );
}
/**
* @ticket 22960
*/
function test_post_galleries_images() {
$ids1 = array();
$ids1_srcs = array();
foreach ( range( 1, 3 ) as $i ) {
$attachment_id = self::factory()->attachment->create_object(
"image$i.jpg",
0,
array(
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$metadata = array_merge( array( 'file' => "image$i.jpg" ), $this->img_meta );
wp_update_attachment_metadata( $attachment_id, $metadata );
$ids1[] = $attachment_id;
$ids1_srcs[] = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/' . "image$i.jpg";
}
$ids2 = array();
$ids2_srcs = array();
foreach ( range( 4, 6 ) as $i ) {
$attachment_id = self::factory()->attachment->create_object(
"image$i.jpg",
0,
array(
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$metadata = array_merge( array( 'file' => "image$i.jpg" ), $this->img_meta );
wp_update_attachment_metadata( $attachment_id, $metadata );
$ids2[] = $attachment_id;
$ids2_srcs[] = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/' . "image$i.jpg";
}
$ids1_joined = join( ',', $ids1 );
$ids2_joined = join( ',', $ids2 );
$blob = <<post->create( array( 'post_content' => $blob ) );
$srcs = get_post_galleries_images( $post_id );
$this->assertEquals( $srcs, array( $ids1_srcs, $ids2_srcs ) );
}
/**
* @ticket 39304
*/
function test_post_galleries_images_without_global_post() {
// Set up an unattached image.
$this->factory->attachment->create_object(
array(
'file' => 'test.jpg',
'post_parent' => 0,
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$post_id = $this->factory->post->create(
array(
'post_content' => '[gallery]',
)
);
$galleries = get_post_galleries( $post_id, false );
$this->assertEmpty( $galleries[0]['src'] );
}
/**
* @ticket 39304
*/
function test_post_galleries_ignores_global_post() {
$global_post_id = $this->factory->post->create(
array(
'post_content' => 'Global Post',
)
);
$post_id = $this->factory->post->create(
array(
'post_content' => '[gallery]',
)
);
$this->factory->attachment->create_object(
array(
'file' => 'test.jpg',
'post_parent' => $post_id,
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$expected_srcs = array(
'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/test.jpg',
);
// Set the global $post context to the other post.
$GLOBALS['post'] = get_post( $global_post_id );
$galleries = get_post_galleries( $post_id, false );
$this->assertNotEmpty( $galleries[0]['src'] );
$this->assertSame( $galleries[0]['src'], $expected_srcs );
}
/**
* @ticket 39304
*/
function test_post_galleries_respects_id_attrs() {
$post_id = $this->factory->post->create(
array(
'post_content' => 'No gallery defined',
)
);
$post_id_two = $this->factory->post->create(
array(
'post_content' => "[gallery id='$post_id']",
)
);
$this->factory->attachment->create_object(
array(
'file' => 'test.jpg',
'post_parent' => $post_id,
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$expected_srcs = array(
'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/test.jpg',
);
$galleries = get_post_galleries( $post_id_two, false );
// Set the global $post context
$GLOBALS['post'] = get_post( $post_id_two );
$galleries_with_global_context = get_post_galleries( $post_id_two, false );
// Check that the global post state doesn't affect the results
$this->assertSame( $galleries, $galleries_with_global_context );
$this->assertNotEmpty( $galleries[0]['src'] );
$this->assertSame( $galleries[0]['src'], $expected_srcs );
}
/**
* @ticket 22960
*/
function test_post_gallery_images() {
$ids1 = array();
$ids1_srcs = array();
foreach ( range( 1, 3 ) as $i ) {
$attachment_id = self::factory()->attachment->create_object(
"image$i.jpg",
0,
array(
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$metadata = array_merge( array( 'file' => "image$i.jpg" ), $this->img_meta );
wp_update_attachment_metadata( $attachment_id, $metadata );
$ids1[] = $attachment_id;
$ids1_srcs[] = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/' . "image$i.jpg";
}
$ids2 = array();
$ids2_srcs = array();
foreach ( range( 4, 6 ) as $i ) {
$attachment_id = self::factory()->attachment->create_object(
"image$i.jpg",
0,
array(
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
)
);
$metadata = array_merge( array( 'file' => "image$i.jpg" ), $this->img_meta );
wp_update_attachment_metadata( $attachment_id, $metadata );
$ids2[] = $attachment_id;
$ids2_srcs[] = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/' . "image$i.jpg";
}
$ids1_joined = join( ',', $ids1 );
$ids2_joined = join( ',', $ids2 );
$blob = <<post->create( array( 'post_content' => $blob ) );
$srcs = get_post_gallery_images( $post_id );
$this->assertEquals( $srcs, $ids1_srcs );
}
function test_get_media_embedded_in_content() {
$object = <<
OBJ;
$embed = <<
EMBED;
$iframe = <<
IFRAME;
$audio = <<
AUDIO;
$video = <<
VIDEO;
$content = <<assertEquals( array( $audio ), $matches );
$matches = get_media_embedded_in_content( $content, 'video' );
$this->assertEquals( array( $video ), $matches );
$matches = get_media_embedded_in_content( $content, 'object' );
$this->assertEquals( array( $object ), $matches );
$matches = get_media_embedded_in_content( $content, 'embed' );
$this->assertEquals( array( $embed ), $matches );
$matches = get_media_embedded_in_content( $content, 'iframe' );
$this->assertEquals( array( $iframe ), $matches );
$matches = get_media_embedded_in_content( $content, $types );
$this->assertEquals( $contents, $matches );
}
function test_get_media_embedded_in_content_order() {
$audio = <<
AUDIO;
$video = <<
VIDEO;
$content = $audio . $video;
$matches1 = get_media_embedded_in_content( $content, array( 'audio', 'video' ) );
$this->assertEquals( array( $audio, $video ), $matches1 );
$reversed = $video . $audio;
$matches2 = get_media_embedded_in_content( $reversed, array( 'audio', 'video' ) );
$this->assertEquals( array( $video, $audio ), $matches2 );
}
/**
* @ticket 35367
*/
function test_wp_audio_shortcode_with_empty_params() {
$this->assertNull( wp_audio_shortcode( array() ) );
}
/**
* @ticket 35367
*/
function test_wp_audio_shortcode_with_bad_attr() {
$this->assertSame(
'https://example.com/foo.php',
wp_audio_shortcode(
array(
'src' => 'https://example.com/foo.php',
)
)
);
}
/**
* @ticket 35367
*/
function test_wp_audio_shortcode_attributes() {
$actual = wp_audio_shortcode(
array(
'src' => 'https://example.com/foo.mp3',
)
);
$this->assertContains( 'src="https://example.com/foo.mp3', $actual );
$this->assertNotContains( 'loop', $actual );
$this->assertNotContains( 'autoplay', $actual );
$this->assertContains( 'preload="none"', $actual );
$this->assertContains( 'class="wp-audio-shortcode"', $actual );
$this->assertContains( 'style="width: 100%;"', $actual );
$actual = wp_audio_shortcode(
array(
'src' => 'https://example.com/foo.mp3',
'loop' => true,
'autoplay' => true,
'preload' => true,
'class' => 'foobar',
'style' => 'padding:0;',
)
);
$this->assertContains( 'src="https://example.com/foo.mp3', $actual );
$this->assertContains( 'loop="1"', $actual );
$this->assertContains( 'autoplay="1"', $actual );
$this->assertContains( 'preload="1"', $actual );
$this->assertContains( 'class="foobar"', $actual );
$this->assertContains( 'style="padding:0;"', $actual );
}
/**
* Test [video] shortcode processing
*/
function test_video_shortcode_body() {
$width = 720;
$height = 480;
$w = empty( $GLOBALS['content_width'] ) ? 640 : $GLOBALS['content_width'];
if ( $width > $w ) {
$width = $w;
}
$post_id = get_post() ? get_the_ID() : 0;
$video = <<