WordPress.org

Make WordPress Core

Changeset 918 in tests


Ignore:
Timestamp:
07/19/12 15:51:42 (2 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.