<?php
/**
 * Tests for add-textdomain.php
 *
 * @package wordpress-i18n
 * @subpackage tools
 */
error_reporting( E_ALL );
require_once dirname( dirname( __FILE__ ) ) . '/add-textdomain.php';

class AddTextDomainTest extends PHPUnit_Framework_TestCase {

	function setUp() {
		parent::setUp();
		$this->atd = new AddTextdomain();
	}

	function test_add() {
		// Copy to a new file, so that we don't corrupt the old one.
		copy( 'data/add-textdomain-0.php', 'data/add-textdomain-0-work.php' );
		$this->atd->process_file( 'test-domain', 'data/add-textdomain-0-work.php', true );
		$this->assertEquals( file_get_contents( 'data/add-textdomain-0-result.php' ), file_get_contents( 'data/add-textdomain-0-work.php' ) );
		unlink( 'data/add-textdomain-0-work.php' );
	}

	/**
	 * @dataProvider data_textdomain_sources
	 */
	function test_basic_add_textdomain( $source, $expected ) {
		$tokens = token_get_all( $source );
		$result = $this->atd->process_tokens( 'foo', $tokens );
		$this->assertEquals( $expected, $result );
	}

	function data_textdomain_sources() {
		return array(
			array( "<?php __('string'); ?>", "<?php __('string', 'foo'); ?>" ), // Simple single quotes
			array( '<?php __("string"); ?>', "<?php __(\"string\", 'foo'); ?>" ), // Simple double quotes
			array( "<?php __( 'string' ); ?>", "<?php __( 'string', 'foo' ); ?>" ), // Simple single quotes CS
			array( '<?php __( "string" ); ?>', "<?php __( \"string\", 'foo' ); ?>" ), // Simple double quotes CS
			array( "<?php __( 'string', 'string2' ); ?>", "<?php __( 'string', 'string2', 'foo' ); ?>" ), // Multiple string args
			array( '<?php __( \'string\', $var ); ?>', '<?php __( \'string\', $var, \'foo\' ); ?>' ), // Multiple string / var args
			array( "<?php __( 'string', 'foo' ); ?>", "<?php __( 'string', 'foo' ); ?>" ), // Existing textdomain
		);
	}
}