WordPress.org

Make WordPress Core

Changeset 337 in tests


Ignore:
Timestamp:
02/26/2011 05:40:42 PM (7 years ago)
Author:
duck_
Message:

No more failures for TestWPQueryVars

  • Call create_initial_taxonomies() after setting permalinks, fixes tests for cats and tags
  • Improved feedback from assertQueryTrue by testing all properties before any assertion, unfortunately destroys a ridiculous assertion count
  • Paged archives 404 if the requested page # is too great => query uncategorized and skip tag for now
  • Skip tests for non-existant posts and attachments
File:
1 edited

Legend:

Unmodified
Added
Removed
  • wp-testcase/test_query.php

    r192 r337  
    1313        global $wp_rewrite;
    1414        $wp_rewrite->set_permalink_structure('/%year%/%monthnum%/%day%/%postname%/');
     15        create_initial_taxonomies();
    1516        $wp_rewrite->flush_rules();
    16         $wp_rewrite->use_verbose_page_rules = $this->use_verbose_page_rules;
    17 
     17
     18        // setting verbose page rules here is not going to have an effect.
     19        // also, does it make sense to force and test verbose page rules for a non-verbose permalink structure?
     20        //$wp_rewrite->use_verbose_page_rules = $this->use_verbose_page_rules;
    1821    }
    1922
     
    3841    }
    3942
    40     // this will check each of the wp_query is_* functions/properties
    41     // any that are listed by name as parameters will be asserted as True; any others will be asserted False
    42     // e.g. assertQueryTrue('is_single', 'is_feed') means is_single() and is_feed() must be true, and
    43     // everything else must be false
    44     function assertQueryTrue(/* .. */) {
     43    /**
     44     * Check each of the WP_Query is_* functions/properties against expected boolean value.
     45     *
     46     * Any properties that are listed by name as parameters will be expected to be true; any others are
     47     * expected to be false. For example, assertQueryTrue('is_single', 'is_feed') means is_single()
     48     * and is_feed() must be true and everything else must be false to pass.
     49     *
     50     * @param string $prop,... Any number of WP_Query properties that are expected to be true for the current request.
     51     */
     52    function assertQueryTrue(/* ... */) {
     53        global $wp_query;
     54
    4555        $all = array(
    4656            'is_admin', 'is_archive', 'is_attachment', 'is_author', 'is_category', 'is_tag', 'is_comments_popup', 'is_date',
    4757            'is_day', 'is_feed', 'is_home', 'is_month', 'is_page', 'is_paged', 'is_plugin_page', 'is_preview', 'is_robots',
    4858            'is_search', 'is_single', 'is_time', 'is_trackback', 'is_year', 'is_404', 'is_comment_feed',
    49             );
    50 
     59        );
    5160        $true = func_get_args();
    5261
    53         global $wp_query;
    54         foreach ($all as $query_thing) {
    55             if (is_callable($query_thing))
    56                 $result = call_user_func($query_thing);
    57             else
    58                 $result = $wp_query->$query_thing;
    59 
    60             if (in_array($query_thing, $true))
    61                 $this->assertTrue($result, "$query_thing should be true");
    62             else
    63                 $this->assertFalse($result, "$query_thing should be false");
    64         }
     62        $passed = true;
     63        $not_false = $not_true = array(); // properties that were not set to expected values
     64       
     65        foreach ( $all as $query_thing ) {
     66            $result = is_callable( $query_thing ) ? call_user_func( $query_thing ) : $wp_query->$query_thing;
     67
     68            if ( in_array( $query_thing, $true ) ) {
     69                if ( ! $result ) {
     70                    array_push( $not_true, $query_thing );
     71                    $passed = false;
     72                }
     73            } else if ( $result ) {
     74                array_push( $not_false, $query_thing );
     75                $passed = false;
     76            }
     77        }
     78
     79        $message = '';
     80        if ( count($not_true) )
     81            $message .= implode( $not_true, ', ' ) . ' should be true. ';
     82        if ( count($not_false) )
     83            $message .= implode( $not_false, ', ' ) . ' should be false.';
     84        $this->assertTrue( $passed, $message );
    6585    }
    6686
    6787    function test_home() {
    6888        $this->http('/');
    69 
    7089        $this->assertQueryTrue('is_home');
    7190    }
     
    7392    function test_404() {
    7493        $this->http('/'.rand_str());
    75 
    7694        $this->assertQueryTrue('is_404');
    7795    }
     
    7997    function test_permalink() {
    8098        $this->http( get_permalink($this->_get_post_id_by_name('hello-world')) );
    81 
    8299        $this->assertQueryTrue('is_single', 'is_singular');
    83100    }
     
    85102    function test_post_comments_feed() {
    86103        $this->http(get_post_comments_feed_link($this->_get_post_id_by_name('hello-world')));
    87 
    88104        $this->assertQueryTrue('is_feed', 'is_single', 'is_singular', 'is_comment_feed');
    89105    }
     
    92108        $page_id = $this->_get_post_id_by_name('about');
    93109        $this->http(get_permalink($page_id));
    94 
    95110        $this->assertQueryTrue('is_page');
    96111    }
     
    189204    // '(about)(/[0-9]+)?/?$' => 'index.php?pagename=$matches[1]&page=$matches[2]'
    190205    function test_page_page_2_short() {
    191         return $this->markTestSkipped();
     206        //return $this->markTestSkipped();
    192207        // identical to /about/page/2/ ?
    193208        $this->http('/about/2/');
    194209
    195         $this->assertQueryTrue('is_page', 'is_paged');
     210        $this->assertQueryTrue('is_page');
    196211    }
    197212
     
    235250    // 'page/?([0-9]{1,})/?$' => 'index.php?&paged=$matches[1]',
    236251    function test_paged() {
    237         for ($i=1; $i<4; $i++) {
     252        for ($i=2; $i<4; $i++) {
    238253            $this->http("/page/{$i}/");
    239254            $this->assertQueryTrue('is_home', 'is_paged');
     
    321336    // 'category/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?category_name=$matches[1]&paged=$matches[2]',
    322337    function test_category_paged() {
    323         $this->http('/category/cat-a/page/1/');
     338        $this->http('/category/uncategorized/page/2/');
    324339        $this->assertQueryTrue('is_archive', 'is_category', 'is_paged');
    325340    }
     
    351366    // 'tag/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?tag=$matches[1]&paged=$matches[2]',
    352367    function test_tag_paged() {
    353         $this->http('/tag/tag-a/page/1/');
     368        $this->markTestSkipped(); // tag-a doesn't have enough posts -> 404
     369        $this->http('/tag/tag-a/page/2/');
    354370        $this->assertQueryTrue('is_archive', 'is_tag', 'is_paged');
    355371    }
     
    515531    // '([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/page/?([0-9]{1,})/?$' => 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&paged=$matches[5]',
    516532    function test_post_paged_long() {
     533        $this->markTestSkipped(); // @todo post doesn't exist in Data Set 1, plus /page/x isn't for single posts
    517534        // the long version
    518535        $this->http('/2007/09/04/a-post-with-multiple-pages/page/2/');
     
    523540    // '([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)(/[0-9]+)?/?$' => 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&page=$matches[5]',
    524541    function test_post_paged_short() {
     542        $this->markTestSkipped(); // @todo post doesn't exist in Data Set 1
    525543        // and the short version
    526544        $this->http('/2007/09/04/a-post-with-multiple-pages/2/');
     
    532550    // '[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/?$' => 'index.php?attachment=$matches[1]',
    533551    function test_post_attachment() {
     552        $this->markTestSkipped(); // @todo ID 8 is a page in Data Set 1
    534553        $permalink = get_attachment_link(8);
    535554        $this->http($permalink);
    536555        $this->assertQueryTrue('is_attachment');
    537556    }
    538    
     557
    539558    // '[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/trackback/?$' => 'index.php?attachment=$matches[1]&tb=1',
    540559    // '[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?attachment=$matches[1]&feed=$matches[2]',
     
    545564    // '[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?attachment=$matches[1]&feed=$matches[2]',
    546565    //
    547 
    548 
    549 
    550566}
    551567
Note: See TracChangeset for help on using the changeset viewer.