3 namespace Drupal\Tests\serialization\Unit\CompilerPass;
5 use Drupal\Core\DependencyInjection\ContainerBuilder;
6 use Drupal\serialization\RegisterSerializationClassesCompilerPass;
7 use Drupal\Tests\UnitTestCase;
8 use Symfony\Component\DependencyInjection\Definition;
9 use Symfony\Component\Serializer\Serializer;
12 * @coversDefaultClass \Drupal\serialization\RegisterSerializationClassesCompilerPass
13 * @group serialization
15 class RegisterSerializationClassesCompilerPassTest extends UnitTestCase {
20 public function testEncoders() {
21 $container = new ContainerBuilder();
22 $container->setDefinition('serializer', new Definition(Serializer::class, [[], []]));
24 $encoder_1_definition = new Definition('TestClass');
25 $encoder_1_definition->addTag('encoder', ['format' => 'xml']);
26 $encoder_1_definition->addTag('_provider', ['provider' => 'test_provider_a']);
27 $container->setDefinition('encoder_1', $encoder_1_definition);
29 $encoder_2_definition = new Definition('TestClass');
30 $encoder_2_definition->addTag('encoder', ['format' => 'json']);
31 $encoder_2_definition->addTag('_provider', ['provider' => 'test_provider_a']);
32 $container->setDefinition('encoder_2', $encoder_2_definition);
34 $encoder_3_definition = new Definition('TestClass');
35 $encoder_3_definition->addTag('encoder', ['format' => 'hal_json']);
36 $encoder_3_definition->addTag('_provider', ['provider' => 'test_provider_b']);
37 $container->setDefinition('encoder_3', $encoder_3_definition);
39 $normalizer_1_definition = new Definition('TestClass');
40 $normalizer_1_definition->addTag('normalizer');
41 $container->setDefinition('normalizer_1', $normalizer_1_definition);
43 $compiler_pass = new RegisterSerializationClassesCompilerPass();
44 $compiler_pass->process($container);
46 // Check registration of formats and providers.
47 $this->assertEquals(['xml', 'json', 'hal_json'], $container->getParameter('serializer.formats'));
48 $this->assertEquals(['xml' => 'test_provider_a', 'json' => 'test_provider_a', 'hal_json' => 'test_provider_b'], $container->getParameter('serializer.format_providers'));
50 // Check all encoder and normalizer service definitions are marked private.
51 $this->assertFalse($encoder_1_definition->isPublic());
52 $this->assertFalse($encoder_2_definition->isPublic());
53 $this->assertFalse($encoder_3_definition->isPublic());
55 $this->assertFalse($normalizer_1_definition->isPublic());