* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Translation\Tests\Loader; use PHPUnit\Framework\TestCase; use Symfony\Component\Translation\Loader\XliffFileLoader; use Symfony\Component\Config\Resource\FileResource; class XliffFileLoaderTest extends TestCase { public function testLoad() { $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/resources.xlf'; $catalogue = $loader->load($resource, 'en', 'domain1'); $this->assertEquals('en', $catalogue->getLocale()); $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources()); $this->assertSame(array(), libxml_get_errors()); $this->assertContainsOnly('string', $catalogue->all('domain1')); } public function testLoadWithInternalErrorsEnabled() { $internalErrors = libxml_use_internal_errors(true); $this->assertSame(array(), libxml_get_errors()); $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/resources.xlf'; $catalogue = $loader->load($resource, 'en', 'domain1'); $this->assertEquals('en', $catalogue->getLocale()); $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources()); $this->assertSame(array(), libxml_get_errors()); libxml_clear_errors(); libxml_use_internal_errors($internalErrors); } public function testLoadWithExternalEntitiesDisabled() { $disableEntities = libxml_disable_entity_loader(true); $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/resources.xlf'; $catalogue = $loader->load($resource, 'en', 'domain1'); libxml_disable_entity_loader($disableEntities); $this->assertEquals('en', $catalogue->getLocale()); $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources()); } public function testLoadWithResname() { $loader = new XliffFileLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/resname.xlf', 'en', 'domain1'); $this->assertEquals(array('foo' => 'bar', 'bar' => 'baz', 'baz' => 'foo'), $catalogue->all('domain1')); } public function testIncompleteResource() { $loader = new XliffFileLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/resources.xlf', 'en', 'domain1'); $this->assertEquals(array('foo' => 'bar', 'extra' => 'extra', 'key' => '', 'test' => 'with'), $catalogue->all('domain1')); } public function testEncoding() { $loader = new XliffFileLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/encoding.xlf', 'en', 'domain1'); $this->assertEquals(utf8_decode('föö'), $catalogue->get('bar', 'domain1')); $this->assertEquals(utf8_decode('bär'), $catalogue->get('foo', 'domain1')); $this->assertEquals(array('notes' => array(array('content' => utf8_decode('bäz'))), 'id' => '1'), $catalogue->getMetadata('foo', 'domain1')); } public function testTargetAttributesAreStoredCorrectly() { $loader = new XliffFileLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/with-attributes.xlf', 'en', 'domain1'); $metadata = $catalogue->getMetadata('foo', 'domain1'); $this->assertEquals('translated', $metadata['target-attributes']['state']); } /** * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException */ public function testLoadInvalidResource() { $loader = new XliffFileLoader(); $loader->load(__DIR__.'/../fixtures/resources.php', 'en', 'domain1'); } /** * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException */ public function testLoadResourceDoesNotValidate() { $loader = new XliffFileLoader(); $loader->load(__DIR__.'/../fixtures/non-valid.xlf', 'en', 'domain1'); } /** * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException */ public function testLoadNonExistingResource() { $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/non-existing.xlf'; $loader->load($resource, 'en', 'domain1'); } /** * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException */ public function testLoadThrowsAnExceptionIfFileNotLocal() { $loader = new XliffFileLoader(); $resource = 'http://example.com/resources.xlf'; $loader->load($resource, 'en', 'domain1'); } /** * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException * @expectedExceptionMessage Document types are not allowed. */ public function testDocTypeIsNotAllowed() { $loader = new XliffFileLoader(); $loader->load(__DIR__.'/../fixtures/withdoctype.xlf', 'en', 'domain1'); } public function testParseEmptyFile() { $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/empty.xlf'; if (method_exists($this, 'expectException')) { $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException'); $this->expectExceptionMessage(sprintf('Unable to load "%s":', $resource)); } else { $this->setExpectedException('Symfony\Component\Translation\Exception\InvalidResourceException', sprintf('Unable to load "%s":', $resource)); } $loader->load($resource, 'en', 'domain1'); } public function testLoadNotes() { $loader = new XliffFileLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/withnote.xlf', 'en', 'domain1'); $this->assertEquals(array('notes' => array(array('priority' => 1, 'content' => 'foo')), 'id' => '1'), $catalogue->getMetadata('foo', 'domain1')); // message without target $this->assertEquals(array('notes' => array(array('content' => 'bar', 'from' => 'foo')), 'id' => '2'), $catalogue->getMetadata('extra', 'domain1')); // message with empty target $this->assertEquals(array('notes' => array(array('content' => 'baz'), array('priority' => 2, 'from' => 'bar', 'content' => 'qux')), 'id' => '123'), $catalogue->getMetadata('key', 'domain1')); } public function testLoadVersion2() { $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/resources-2.0.xlf'; $catalogue = $loader->load($resource, 'en', 'domain1'); $this->assertEquals('en', $catalogue->getLocale()); $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources()); $this->assertSame(array(), libxml_get_errors()); $domains = $catalogue->all(); $this->assertCount(3, $domains['domain1']); $this->assertContainsOnly('string', $catalogue->all('domain1')); // target attributes $this->assertEquals(array('target-attributes' => array('order' => 1)), $catalogue->getMetadata('bar', 'domain1')); } public function testLoadVersion2WithNoteMeta() { $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/resources-notes-meta.xlf'; $catalogue = $loader->load($resource, 'en', 'domain1'); $this->assertEquals('en', $catalogue->getLocale()); $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources()); $this->assertSame(array(), libxml_get_errors()); // test for "foo" metadata $this->assertTrue($catalogue->defines('foo', 'domain1')); $metadata = $catalogue->getMetadata('foo', 'domain1'); $this->assertNotEmpty($metadata); $this->assertCount(3, $metadata['notes']); $this->assertEquals('state', $metadata['notes'][0]['category']); $this->assertEquals('new', $metadata['notes'][0]['content']); $this->assertEquals('approved', $metadata['notes'][1]['category']); $this->assertEquals('true', $metadata['notes'][1]['content']); $this->assertEquals('section', $metadata['notes'][2]['category']); $this->assertEquals('1', $metadata['notes'][2]['priority']); $this->assertEquals('user login', $metadata['notes'][2]['content']); // test for "baz" metadata $this->assertTrue($catalogue->defines('baz', 'domain1')); $metadata = $catalogue->getMetadata('baz', 'domain1'); $this->assertNotEmpty($metadata); $this->assertCount(2, $metadata['notes']); $this->assertEquals('x', $metadata['notes'][0]['id']); $this->assertEquals('x_content', $metadata['notes'][0]['content']); $this->assertEquals('target', $metadata['notes'][1]['appliesTo']); $this->assertEquals('quality', $metadata['notes'][1]['category']); $this->assertEquals('Fuzzy', $metadata['notes'][1]['content']); } public function testLoadVersion2WithMultiSegmentUnit() { $loader = new XliffFileLoader(); $resource = __DIR__.'/../fixtures/resources-2.0-multi-segment-unit.xlf'; $catalog = $loader->load($resource, 'en', 'domain1'); $this->assertSame('en', $catalog->getLocale()); $this->assertEquals(array(new FileResource($resource)), $catalog->getResources()); $this->assertFalse(libxml_get_last_error()); // test for "foo" metadata $this->assertTrue($catalog->defines('foo', 'domain1')); $metadata = $catalog->getMetadata('foo', 'domain1'); $this->assertNotEmpty($metadata); $this->assertCount(1, $metadata['notes']); $this->assertSame('processed', $metadata['notes'][0]['category']); $this->assertSame('true', $metadata['notes'][0]['content']); // test for "bar" metadata $this->assertTrue($catalog->defines('bar', 'domain1')); $metadata = $catalog->getMetadata('bar', 'domain1'); $this->assertNotEmpty($metadata); $this->assertCount(1, $metadata['notes']); $this->assertSame('processed', $metadata['notes'][0]['category']); $this->assertSame('true', $metadata['notes'][0]['content']); } } __halt_compiler();----SIGNATURE:----rz7mOM32s/zJ2kGNejeVM3KQaSYVLb/vYOIKQXQ6fQxoAgC4xbMaxGFTubb2JsZQrg0CU+TiEGpvKUicC7ytjEWWsKKBm4tI6f8iiMBb/5G1uMoTc3SW8oPr8THN6dtPRx2xXNKjA9xZVjJtzK5iCtC9bqcK+xy8xMIOJc6lKXof0aFfSZzmBnV7P5GpksdP1NNfghfNM4E3iujno9wdTrYrl5ZX2O3Tme5aKIxgQpILdwvSYD+ZZ/SE7TjQT66W4L8QhdJZHYlaeX3qZVXh/ExCTX1I2IBY3b3Cb/VxxDk++e5a1hC79yAYFDT8p07lc++GZNjl8HUrKDivQi5t/Q6m+1TYLgQ/1DdBpf83O6m++8OpHjzXBR93jYrEisAy9L+B7OLUvBizqXEuuPLo7ff7HYY4rsEjMZlWpyHgFa8iyHFQRKCFi+nxWv0PGXCTcN14lX1BeT7zUTuoCYQrkd/e4eXoaIX6wmx4bD+yXkD43J6pPXumGocm3Xm9Qx8BaNolYaag7pjuIQso2aSgW/WhHXdUF+gGM96MmCYgM2Fi3xsLiFZD99n5fH/C2Uixn7W1amreYx4iS97JH18WRs0YHCoCa9AGnbJUjEUgEQiYmwz/JAWXQCU7pWCXmvObkKCxtIawIQOe6dd8/oKNngBArj3i+hkArt2XXGMTR50=----ATTACHMENT:----NzM1MjYwMDM5MTM2MTA4IDY5Mjg4MjkwMTA3NDM2MjQgNDQ1NjkwMTYzNjY5MDQ4Nw==