wordpress-develop/tests/phpunit/tests/formatting/ExcerptRemoveBlocks.php
Sergey Biryukov 164b22cf6a Tests: First pass at using assertSame() instead of assertEquals() in most of the unit tests.
This ensures that not only the return values match the expected results, but also that their type is the same.

Going forward, stricter type checking by using `assertSame()` should generally be preferred to `assertEquals()` where appropriate, to make the tests more reliable.

Props johnbillion, jrf, SergeyBiryukov.
See #38266.

git-svn-id: https://develop.svn.wordpress.org/trunk@48937 602fd350-edb4-49c9-b593-d223f7449a82
2020-09-02 00:35:36 +00:00

130 lines
2.8 KiB
PHP

<?php
/**
* @group formatting
* @covers ::excerpt_remove_blocks
* @ticket 46133
*/
class Tests_Formatting_ExcerptRemoveBlocks extends WP_UnitTestCase {
public static $post_id;
public $content = '
<!-- wp:paragraph -->
<p>paragraph</p>
<!-- /wp:paragraph -->
<!-- wp:latest-posts {"postsToShow":3,"displayPostDate":true,"order":"asc","orderBy":"title"} /-->
<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->
<!-- wp:columns {"columns":1} -->
<div class="wp-block-columns has-1-columns">
<!-- wp:column -->
<div class="wp-block-column">
<!-- wp:archives {"displayAsDropdown":false,"showPostCounts":false} /-->
<!-- wp:paragraph -->
<p>paragraph inside column</p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:column -->
</div>
<!-- /wp:columns -->
';
public $filtered_content = '
<p>paragraph</p>
<p>paragraph inside column</p>
';
/**
* Fake block rendering function.
*
* @since 5.2.0
*
* @return string Block output.
*/
function render_fake_block() {
return get_the_excerpt( self::$post_id );
}
/**
* Set up.
*
* @since 5.2.0
*/
function setUp() {
parent::setUp();
self::$post_id = $this->factory()->post->create(
array(
'post_excerpt' => '', // Empty excerpt, so it has to be generated.
'post_content' => '<!-- wp:core/fake /-->',
)
);
register_block_type(
'core/fake',
array(
'render_callback' => array( $this, 'render_fake_block' ),
)
);
}
/**
* Tear down.
*
* @since 5.2.0
*/
function tearDown() {
parent::tearDown();
$registry = WP_Block_Type_Registry::get_instance();
$registry->unregister( 'core/fake' );
wp_delete_post( self::$post_id, true );
}
/**
* Tests excerpt_remove_blocks().
*
* @ticket 46133
*/
function test_excerpt_remove_blocks() {
// Simple dynamic block..
$content = '<!-- wp:core/block /-->';
$this->assertEmpty( excerpt_remove_blocks( $content ) );
// Dynamic block with options, embedded in other content.
$this->assertSame( $this->filtered_content, excerpt_remove_blocks( $this->content ) );
}
/**
* Tests that dynamic blocks don't cause an out-of-memory error.
*
* When dynamic blocks happen to generate an excerpt, they can cause an
* infinite loop if that block is part of the post's content.
*
* `wp_trim_excerpt()` applies the `the_content` filter, which has
* `do_blocks` attached to it, trying to render the block which again will
* attempt to return an excerpt of that post.
*
* This infinite loop can be avoided by stripping dynamic blocks before
* `the_content` gets applied, just like shortcodes.
*
* @ticket 46133
*/
function test_excerpt_infinite_loop() {
$query = new WP_Query(
array(
'post__in' => array( self::$post_id ),
)
);
$query->the_post();
$this->assertEmpty( do_blocks( '<!-- wp:core/fake /-->' ) );
}
}