w = new GP_Builtin_Translation_Warnings;
$this->l = $this->factory->locale->create();
$this->longer_than_20 = 'The little boy hid behind the counter and then came the wizard of all green wizards!';
$this->shorter_than_5 = 'Boom';
}
function _assertWarning( $assert, $warning, $original, $translation, $locale = null ) {
if ( is_null( $locale ) ) $locale = $this->l;
$method = "warning_$warning";
$this->$assert( true, $this->w->$method( $original, $translation, $locale ) );
}
function assertHasWarnings( $warning, $original, $translation, $locale = null ) {
$this->_assertWarning( 'assertNotSame', $warning, $original, $translation, $locale );
}
function assertNoWarnings( $warning, $original, $translation, $locale = null ) {
$this->_assertWarning( 'assertSame', $warning, $original, $translation, $locale );
}
function test_length() {
$this->assertNoWarnings( 'length', $this->longer_than_20, $this->longer_than_20 );
$this->assertHasWarnings( 'length', $this->longer_than_20, $this->shorter_than_5 );
}
function test_length_exclude() {
$w_without_locale = new GP_Builtin_Translation_Warnings;
$w_without_locale->length_exclude_languages = array( $this->l->slug );
$this->assertSame( true, $w_without_locale->warning_length( $this->longer_than_20, $this->longer_than_20, $this->l ) );
$this->assertSame( true, $w_without_locale->warning_length( $this->longer_than_20, $this->shorter_than_5, $this->l ) );
}
function test_tags() {
$this->assertNoWarnings( 'tags', 'Baba', 'Баба' );
$this->assertNoWarnings( 'tags', 'Baba', 'Баба' );
$this->assertNoWarnings( 'tags', 'Baba', 'Баба' );
$this->assertHasWarnings( 'tags', 'Baba', 'Баба' );
$this->assertHasWarnings( 'tags', 'Baba', 'Баба' );
$this->assertHasWarnings( 'tags', 'Baba', 'Баба' );
$this->assertHasWarnings( 'tags', 'Baba', 'Баба' );
}
function test_add_all() {
$warnings = $this->getMock( 'GP_Translation_Warnings' );
// we check for the number of warnings, because PHPUnit doesn't allow
// us to check if each argument is a callable
$warnings->expects( $this->exactly( 4 ) )->method( 'add' )->will( $this->returnValue( true ) );
$this->w->add_all( $warnings );
}
function test_placeholders() {
$this->assertHasWarnings( 'placeholders', '%s baba', 'баба' );
$this->assertHasWarnings( 'placeholders', '%s baba', '% баба' );
$this->assertNoWarnings( 'placeholders', '%s baba', '%s баба' );
$this->assertNoWarnings( 'placeholders', '%s baba', 'баба %s' );
$this->assertNoWarnings( 'placeholders', '%s baba', 'баба %s' );
$this->assertNoWarnings( 'placeholders', '%1$s baba %2$s dyado', '%1$sбабадядо%2$s' );
$this->assertNoWarnings( 'placeholders', '% baba', 'баба' );
$this->assertNoWarnings( 'placeholders', '% baba', '% баба' );
$this->assertHasWarnings( 'placeholders', '%1$s baba', 'баба' );
$this->assertNoWarnings( 'placeholders', '%1$s baba', '%1$s баба' );
$this->assertNoWarnings( 'placeholders', '%sHome%s', '%sНачало%s' );
$this->assertNoWarnings( 'placeholders', 'This string has %stwo variables%s.', 'Deze string heeft %stwee variabelen%s.' );
}
function test_both_begin_end_on_newlines() {
$this->assertHasWarnings( 'both_begin_end_on_newlines', "baba\n", "baba" );
$this->assertHasWarnings( 'both_begin_end_on_newlines', "baba", "baba\n" );
$this->assertNoWarnings( 'both_begin_end_on_newlines', "baba", "baba" );
$this->assertNoWarnings( 'both_begin_end_on_newlines', "baba\n", "baba\n" );
$this->assertHasWarnings( 'both_begin_end_on_newlines', "\nbaba", "baba" );
$this->assertHasWarnings( 'both_begin_end_on_newlines', "baba", "\nbaba" );
$this->assertNoWarnings( 'both_begin_end_on_newlines', "\nbaba", "\nbaba" );
}
function test_placeholders_using_check() {
$w = new GP_Translation_Warnings;
$builtin = new GP_Builtin_Translation_Warnings;
$w->add( 'placeholder', array( $builtin, 'warning_placeholders' ) );
$fr = new GP_Locale( array(
'nplurals' => 2,
'plural_expression' => 'n > 1'
));
$this->assertEquals( null,
$w->check( 'original %1$s', 'original %2$s', array( 'translation %1$s', 'translation %2$s' ), $fr ) );
$this->assertEquals( null,
$w->check( 'original', 'original %s', array( 'translation', 'translation %s' ), $fr ) );
$this->assertEquals( array( 1 => array( 'placeholder' => 'Missing %2$s placeholder in translation.' ) ),
$w->check( 'original %1$s', 'original %2$s', array( 'translation %1$s', 'translation' ), $fr ) );
$de = new GP_Locale( array(
'nplurals' => 2,
'plural_expression' => 'n != 1'
));
$this->assertEquals( null,
$w->check( 'original %1$s', 'original %2$s', array( 'translation %1$s', 'translation %2$s' ), $de ) );
$this->assertEquals( null,
$w->check( 'original', 'original %s', array( 'translation', 'translation %s' ), $de ) );
$ja = new GP_Locale( array(
'nplurals' => 1,
'plural_expression' => '0'
));
$this->assertEquals( null,
$w->check( 'original %1$s', 'original %2$s', array( 'translation %2$s' ), $ja ) );
$this->assertEquals( null,
$w->check( 'original', 'original %s', array( 'translation %s' ), $ja ) );
$this->assertEquals( array( 0 => array( 'placeholder' => 'Missing %2$s placeholder in translation.' ) ),
$w->check( 'original %1$s', 'original %2$s', array( 'translation' ), $ja ) );
$ru = new GP_Locale( array(
'nplurals' => 3,
'plural_expression' => '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)'
));
$this->assertEquals( null,
$w->check( 'original %1$s', 'original %2$s', array( 'translation %1$s', 'translation %2$s', 'translation 2 %2$s' ), $ru ) );
$this->assertEquals( null,
$w->check( 'original', 'original %s', array( 'translation', 'translation 2 %s', 'translation 3 %s' ), $ru ) );
$this->assertEquals( array( 1 => array( 'placeholder' => 'Missing %2$s placeholder in translation.' ) ),
$w->check( 'original %1$s', 'original %2$s', array( 'translation %1$s', 'translation 2', 'translation 3 %2$s' ), $ru ) );
$this->assertEquals( array( 2 => array( 'placeholder' => 'Missing %s placeholder in translation.' ) ),
$w->check( 'original', 'original %s', array( 'translation', 'translation 2 %s', 'translation 3' ), $ru ) );
$this->assertEquals( array( 1 => array( 'placeholder' => 'Missing %s placeholder in translation.' ),
2 => array( 'placeholder' => 'Missing %s placeholder in translation.' ) ),
$w->check( 'original', 'original %s', array( 'translation', 'translation 2', 'translation 3' ), $ru ) );
}
}