File: /var/www/web37/htdocs/sexnetzwerk24/wp-content/themes/classipress/tests/lib/testcase.php
<?php
require_once dirname( __FILE__ ) . '/constraints.php';
abstract class APP_UnitTestCase extends WP_UnitTestCase {
	function setUp() {
		parent::setUp();
		do_action( 'appthemes_first_run' );
		$this->catcher = new APP_Mail_Catcher;
	}
	function tearDown() {
		parent::tearDown();
		// hooks aren't automatically reset between tests
		$this->catcher->detach();
	}
	function assertMailSentTo( $expected ) {
		$results = wp_list_pluck( $this->catcher->get_bounty(), 'to' );
		sort( $results );
		sort( $expected );
		$constraint = new PHPUnit_Framework_Constraint_IsEqual( $expected );
		self::assertThat( $results, $constraint );
	}
	function assertPostCount( $expected ) {
		self::assertThat( $GLOBALS['wp_query'], $this->postCount( $expected ) );
	}
	function assertArrayHasPairs( $expected, $actual ){
		foreach( $expected as $key => $value ){
			self::assertArrayHasKey( $key, $actual );
			self::assertEquals( $value, $actual[ $key ] );
		}
	}
	protected function postCount( $expected ) {
		return new APP_Constraint_Post_Count( $expected );
	}
}
class APP_Callback_Catcher {
	protected $hook;
	protected $history = array();
	function __construct( $hook ) {
		$this->hook = $hook;
		add_action( $hook, array( $this, '_catch' ) );
	}
	function detach() {
		remove_action( $this->hook, array( $this, '_catch' ) );
	}
	function _catch( $args ) {
		$this->history[] = func_get_args();
	}
	function was_called() {
		return ! empty( $this->history );
	}
}
class APP_Mail_Catcher extends APP_Callback_Catcher {
	function __construct() {
		parent::__construct( '_wp_mail_sent' );
	}
	function _catch( $args ) {
		$this->history[] = $args;
	}
	function get_bounty() {
		return $this->history;
	}
}