Make WordPress Core

Changeset 918 in tests


Ignore:
Timestamp:
07/19/2012 03:51:42 PM (14 years ago)
Author:
nacin
Message:

When calling phpunit with a --group of a @ticket annotation (--group 12345, --group UT123), force the tests associated with them, rather than skipping them.

Minimizes the need to use WP_TESTS_FORCE_KNOWN_BUGS and makes it easier to run tests for a specific ticket.

see #49.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bootstrap.php

    r890 r918  
    7979require dirname( __FILE__ ) . '/includes/exceptions.php';
    8080require dirname( __FILE__ ) . '/includes/utils.php';
     81
     82/**
     83 * A child class of the PHP test runner.
     84 *
     85 * Not actually used as a runner. Rather, used to access the protected
     86 * longOptions property, to parse the arguments passed to the script.
     87 *
     88 * If it is determined that phpunit was called with a --group that corresponds
     89 * to an @ticket annotation (such as `phpunit --group 12345` for bugs marked
     90 * as #WP12345), then it is assumed that known bugs should not be skipped.
     91 *
     92 * If WP_TESTS_FORCE_KNOWN_BUGS is already set in wp-tests-config.php, then
     93 * how you call phpunit has no effect.
     94 */
     95class WP_PHPUnit_TextUI_Command extends PHPUnit_TextUI_Command {
     96        function __construct( $argv ) {
     97                $options = PHPUnit_Util_Getopt::getopt(
     98                        $argv,
     99                        'd:c:hv',
     100                        array_keys( $this->longOptions )
     101                );
     102                foreach ( $options[0] as $option ) {
     103                        if ( $option[0] !== '--group' )
     104                                continue;
     105                        $groups = explode( ',', $option[1] );
     106                        foreach ( $groups as $group ) {
     107                                if ( is_numeric( $group ) || preg_match( '/^(UT|Plugin)\d+$/', $group ) )
     108                                        WP_UnitTestCase::forceTicket( $group );
     109                        }
     110                }
     111    }
     112}
     113new WP_PHPUnit_TextUI_Command( $_SERVER['argv'] );
  • trunk/includes/testcase.php

    r906 r918  
    11<?php
    22
    3 require_once 'factory.php';
    4 require_once 'trac.php';
     3require_once dirname( __FILE__ ) . '/factory.php';
     4require_once dirname( __FILE__ ) . '/trac.php';
    55
    66class WP_UnitTestCase extends PHPUnit_Framework_TestCase {
     7
     8        protected static $forced_tickets = array();
    79
    810        function setUp() {
    … …  
    128130                                $this->knownWPBug( $ticket );
    129131                        } elseif ( 'UT' == substr( $ticket, 0, 2 ) ) {
    130                                 $this->knownUTBug( substr( $ticket, 2 ) );
     132                                $ticket = substr( $ticket, 2 );
     133                                if ( $ticket && is_numeric( $ticket ) )
     134                                        $this->knownUTBug( $ticket );
     135                        } elseif ( 'Plugin' == substr( $ticket, 0, 6 ) ) {
     136                                $ticket = substr( $ticket, 6 );
     137                                if ( $ticket && is_numeric( $ticket ) )
     138                                        $this->knownPluginBug( $ticket );
    131139                        }
    132140                }
    … …  
    137145         */
    138146        function knownWPBug( $ticket_id ) {
    139                 if ( ! WP_TESTS_FORCE_KNOWN_BUGS && ! TracTickets::isTracTicketClosed( 'http://core.trac.wordpress.org', $ticket_id ) ) {
     147                if ( WP_TESTS_FORCE_KNOWN_BUGS || in_array( $ticket_id, self::$forced_tickets ) )
     148                        return;
     149                if ( ! TracTickets::isTracTicketClosed( 'http://core.trac.wordpress.org', $ticket_id ) )
    140150                        $this->markTestSkipped( sprintf( 'WordPress Ticket #%d is not fixed', $ticket_id ) );
    141                 }
    142151        }
    143152
    … …  
    146155         */
    147156        function knownUTBug( $ticket_id ) {
    148                 if ( ! WP_TESTS_FORCE_KNOWN_BUGS && ! TracTickets::isTracTicketClosed( 'http://unit-tests.trac.wordpress.org', $ticket_id ) ) {
     157                if ( WP_TESTS_FORCE_KNOWN_BUGS || in_array( 'UT' . $ticket_id, self::$forced_tickets ) )
     158                        return;
     159                if ( ! TracTickets::isTracTicketClosed( 'http://unit-tests.trac.wordpress.org', $ticket_id ) )
    149160                        $this->markTestSkipped( sprintf( 'Unit Tests Ticket #%d is not fixed', $ticket_id ) );
    150                 }
    151161        }
    152162
    … …  
    155165         */
    156166        function knownPluginBug( $ticket_id ) {
    157                 if ( ! WP_TESTS_FORCE_KNOWN_BUGS && ! TracTickets::isTracTicketClosed( 'http://plugins.trac.wordpress.org', $ticket_id ) ) {
     167                if ( WP_TESTS_FORCE_KNOWN_BUGS || in_array( 'Plugin' . $ticket_id, self::$forced_tickets ) )
     168                        return;
     169                if ( ! TracTickets::isTracTicketClosed( 'http://plugins.trac.wordpress.org', $ticket_id ) )
    158170                        $this->markTestSkipped( sprintf( 'WordPress Plugin Ticket #%d is not fixed', $ticket_id ) );
    159                 }
     171        }
     172
     173        public static function forceTicket( $ticket ) {
     174                self::$forced_tickets[] = $ticket;
    160175        }
    161176
Note: See TracChangeset for help on using the changeset viewer.