2424use Symfony \Component \DependencyInjection \Definition ;
2525use Symfony \Component \DependencyInjection \Loader \PhpFileLoader ;
2626use Symfony \Component \DependencyInjection \Reference ;
27+ use Symfony \Component \DependencyInjection \TypedReference ;
2728
2829class AddProcessorsPassTest extends TestCase
2930{
@@ -34,12 +35,40 @@ public function testHandlerProcessors()
3435 $ service = $ container ->getDefinition ('monolog.handler.test ' );
3536 $ calls = $ service ->getMethodCalls ();
3637 $ this ->assertCount (1 , $ calls );
37- $ this ->assertEquals (['pushProcessor ' , [new Reference ('test ' )]], $ calls [0 ]);
38+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('test ' , ' TestClass ' )]], $ calls [0 ]);
3839
3940 $ service = $ container ->getDefinition ('handler_test ' );
4041 $ calls = $ service ->getMethodCalls ();
4142 $ this ->assertCount (1 , $ calls );
42- $ this ->assertEquals (['pushProcessor ' , [new Reference ('test2 ' )]], $ calls [0 ]);
43+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('test2 ' , 'TestClass ' )]], $ calls [0 ]);
44+
45+ $ service = $ container ->getDefinition ('monolog.handler.priority_test ' );
46+ $ calls = $ service ->getMethodCalls ();
47+ $ this ->assertCount (5 , $ calls );
48+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor-10 ' , 'TestClass ' )]], $ calls [0 ]);
49+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor+10 ' , 'TestClass ' )]], $ calls [1 ]);
50+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor+20 ' , 'TestClass ' )]], $ calls [2 ]);
51+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor+20 ' , 'TestClass ' )]], $ calls [2 ]);
52+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor+25+35 ' , 'TestClass ' )]], $ calls [3 ]);
53+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor+35+25 ' , 'TestClass ' )]], $ calls [4 ]);
54+
55+ $ service = $ container ->getDefinition ('monolog.handler.priority_test_2 ' );
56+ $ calls = $ service ->getMethodCalls ();
57+ $ this ->assertCount (2 , $ calls );
58+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor+35+25 ' , 'TestClass ' )]], $ calls [0 ]);
59+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor+25+35 ' , 'TestClass ' )]], $ calls [1 ]);
60+
61+ $ service = $ container ->getDefinition ('monolog.logger ' );
62+ $ calls = $ service ->getMethodCalls ();
63+ $ this ->assertCount (2 , $ calls );
64+ $ this ->assertEquals (['useMicrosecondTimestamps ' , ['%monolog.use_microseconds% ' ]], $ calls [0 ]);
65+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor_all_channels+0 ' , 'TestClass ' )]], $ calls [1 ]);
66+
67+ $ service = $ container ->getDefinition ('monolog.logger.test ' );
68+ $ calls = $ service ->getMethodCalls ();
69+ $ this ->assertCount (2 , $ calls );
70+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor_test_channel-25 ' , 'TestClass ' )]], $ calls [0 ]);
71+ $ this ->assertEquals (['pushProcessor ' , [new TypedReference ('processor_all_channels+0 ' , 'TestClass ' )]], $ calls [1 ]);
4372 }
4473
4574 public function testFailureOnHandlerWithoutPushProcessor ()
@@ -88,7 +117,7 @@ public static function provideEmptyTagsData(): iterable
88117 {
89118 yield 'with empty tag ' => [
90119 [[]],
91- [['pushProcessor ' , [new Reference ( ' TestClass ' ) ]], ['useMicrosecondTimestamps ' , [' %monolog.use_microseconds% ' ]]],
120+ [['useMicrosecondTimestamps ' , [' %monolog.use_microseconds% ' ]], ['pushProcessor ' , [new Reference ( ' TestClass ' ) ]]],
92121 [['pushProcessor ' , [new Reference ('TestClass ' )]]],
93122 ];
94123
@@ -106,7 +135,7 @@ public static function provideEmptyTagsData(): iterable
106135
107136 yield 'with method and no channel ' => [
108137 [[], ['method ' => 'foo ' ]],
109- [['pushProcessor ' , [[new Reference ('TestClass ' ), 'foo ' ]]], [ ' useMicrosecondTimestamps ' , [ ' %monolog.use_microseconds% ' ]]],
138+ [['useMicrosecondTimestamps ' , [ ' %monolog.use_microseconds% ' ]], [ ' pushProcessor ' , [[new Reference ('TestClass ' ), 'foo ' ]]]],
110139 [['pushProcessor ' , [[new Reference ('TestClass ' ), 'foo ' ]]]],
111140 ];
112141 }
@@ -117,24 +146,62 @@ protected function getContainer(): ContainerBuilder
117146 $ loader = new PhpFileLoader ($ container , new FileLocator (__DIR__ .'/../../../config ' ));
118147 $ loader ->load ('monolog.php ' );
119148
149+ $ container ->setParameter ('monolog.additional_channels ' , ['test ' ]);
150+ $ container ->setParameter ('monolog.handlers_to_channels ' , []);
151+
120152 $ definition = $ container ->getDefinition ('monolog.logger_prototype ' );
121153 $ container ->setParameter ('monolog.handler.console.class ' , ConsoleHandler::class);
122154 $ container ->setDefinition ('monolog.handler.test ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
123155 $ container ->setDefinition ('handler_test ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
156+ $ container ->setDefinition ('monolog.handler.priority_test ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
157+ $ container ->setDefinition ('monolog.handler.priority_test_2 ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
124158 $ container ->setAlias ('monolog.handler.test2 ' , 'handler_test ' );
125159 $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.test ' )]);
126160 $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.test2 ' )]);
161+ $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.priority_test ' )]);
162+ $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.priority_test_2 ' )]);
127163
128- $ service = new Definition ('TestClass ' , [ ' false ' , new Reference ( ' logger ' )] );
164+ $ service = new Definition ('TestClass ' );
129165 $ service ->addTag ('monolog.processor ' , ['handler ' => 'test ' ]);
130166 $ container ->setDefinition ('test ' , $ service );
131167
132- $ service = new Definition ('TestClass ' , [ ' false ' , new Reference ( ' logger ' )] );
168+ $ service = new Definition ('TestClass ' );
133169 $ service ->addTag ('monolog.processor ' , ['handler ' => 'test2 ' ]);
134170 $ container ->setDefinition ('test2 ' , $ service );
135171
172+ $ service = new Definition ('TestClass ' );
173+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 10 ]);
174+ $ container ->setDefinition ('processor+10 ' , $ service );
175+
176+ $ service = new Definition ('TestClass ' );
177+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => -10 ]);
178+ $ container ->setDefinition ('processor-10 ' , $ service );
179+
180+ $ service = new Definition ('TestClass ' );
181+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 20 ]);
182+ $ container ->setDefinition ('processor+20 ' , $ service );
183+
184+ $ service = new Definition ('TestClass ' );
185+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 35 ]);
186+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test_2 ' , 'priority ' => 25 ]);
187+ $ container ->setDefinition ('processor+35+25 ' , $ service );
188+
189+ $ service = new Definition ('TestClass ' );
190+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 25 ]);
191+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test_2 ' , 'priority ' => 35 ]);
192+ $ container ->setDefinition ('processor+25+35 ' , $ service );
193+
194+ $ service = new Definition ('TestClass ' );
195+ $ service ->addTag ('monolog.processor ' , ['priority ' => 0 ]);
196+ $ container ->setDefinition ('processor_all_channels+0 ' , $ service );
197+
198+ $ service = new Definition ('TestClass ' );
199+ $ service ->addTag ('monolog.processor ' , ['channel ' => 'test ' , 'priority ' => -25 ]);
200+ $ container ->setDefinition ('processor_test_channel-25 ' , $ service );
201+
136202 $ container ->getCompilerPassConfig ()->setOptimizationPasses ([]);
137203 $ container ->getCompilerPassConfig ()->setRemovingPasses ([]);
204+ $ container ->addCompilerPass (new LoggerChannelPass ());
138205 $ container ->addCompilerPass (new AddProcessorsPass ());
139206 $ container ->compile ();
140207
0 commit comments