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 ()
@@ -97,7 +126,7 @@ public static function provideEmptyTagsData(): iterable
97126 {
98127 yield 'with empty tag ' => [
99128 [[]],
100- [['pushProcessor ' , [new Reference ( ' TestClass ' ) ]], ['useMicrosecondTimestamps ' , [' %monolog.use_microseconds% ' ]]],
129+ [['useMicrosecondTimestamps ' , [' %monolog.use_microseconds% ' ]], ['pushProcessor ' , [new Reference ( ' TestClass ' ) ]]],
101130 [['pushProcessor ' , [new Reference ('TestClass ' )]]],
102131 ];
103132
@@ -115,7 +144,7 @@ public static function provideEmptyTagsData(): iterable
115144
116145 yield 'with method and no channel ' => [
117146 [[], ['method ' => 'foo ' ]],
118- [['pushProcessor ' , [[new Reference ('TestClass ' ), 'foo ' ]]], [ ' useMicrosecondTimestamps ' , [ ' %monolog.use_microseconds% ' ]]],
147+ [['useMicrosecondTimestamps ' , [ ' %monolog.use_microseconds% ' ]], [ ' pushProcessor ' , [[new Reference ('TestClass ' ), 'foo ' ]]]],
119148 [['pushProcessor ' , [[new Reference ('TestClass ' ), 'foo ' ]]]],
120149 ];
121150 }
@@ -126,24 +155,62 @@ protected function getContainer()
126155 $ loader = new PhpFileLoader ($ container , new FileLocator (__DIR__ .'/../../../config ' ));
127156 $ loader ->load ('monolog.php ' );
128157
158+ $ container ->setParameter ('monolog.additional_channels ' , ['test ' ]);
159+ $ container ->setParameter ('monolog.handlers_to_channels ' , []);
160+
129161 $ definition = $ container ->getDefinition ('monolog.logger_prototype ' );
130162 $ container ->setParameter ('monolog.handler.console.class ' , ConsoleHandler::class);
131163 $ container ->setDefinition ('monolog.handler.test ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
132164 $ container ->setDefinition ('handler_test ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
165+ $ container ->setDefinition ('monolog.handler.priority_test ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
166+ $ container ->setDefinition ('monolog.handler.priority_test_2 ' , new Definition ('%monolog.handler.console.class% ' , [100 , false ]));
133167 $ container ->setAlias ('monolog.handler.test2 ' , 'handler_test ' );
134168 $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.test ' )]);
135169 $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.test2 ' )]);
170+ $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.priority_test ' )]);
171+ $ definition ->addMethodCall ('pushHandler ' , [new Reference ('monolog.handler.priority_test_2 ' )]);
136172
137- $ service = new Definition ('TestClass ' , [ ' false ' , new Reference ( ' logger ' )] );
173+ $ service = new Definition ('TestClass ' );
138174 $ service ->addTag ('monolog.processor ' , ['handler ' => 'test ' ]);
139175 $ container ->setDefinition ('test ' , $ service );
140176
141- $ service = new Definition ('TestClass ' , [ ' false ' , new Reference ( ' logger ' )] );
177+ $ service = new Definition ('TestClass ' );
142178 $ service ->addTag ('monolog.processor ' , ['handler ' => 'test2 ' ]);
143179 $ container ->setDefinition ('test2 ' , $ service );
144180
181+ $ service = new Definition ('TestClass ' );
182+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 10 ]);
183+ $ container ->setDefinition ('processor+10 ' , $ service );
184+
185+ $ service = new Definition ('TestClass ' );
186+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => -10 ]);
187+ $ container ->setDefinition ('processor-10 ' , $ service );
188+
189+ $ service = new Definition ('TestClass ' );
190+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 20 ]);
191+ $ container ->setDefinition ('processor+20 ' , $ service );
192+
193+ $ service = new Definition ('TestClass ' );
194+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 35 ]);
195+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test_2 ' , 'priority ' => 25 ]);
196+ $ container ->setDefinition ('processor+35+25 ' , $ service );
197+
198+ $ service = new Definition ('TestClass ' );
199+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test ' , 'priority ' => 25 ]);
200+ $ service ->addTag ('monolog.processor ' , ['handler ' => 'priority_test_2 ' , 'priority ' => 35 ]);
201+ $ container ->setDefinition ('processor+25+35 ' , $ service );
202+
203+ $ service = new Definition ('TestClass ' );
204+ $ service ->addTag ('monolog.processor ' , ['priority ' => 0 ]);
205+ $ container ->setDefinition ('processor_all_channels+0 ' , $ service );
206+
207+ $ service = new Definition ('TestClass ' );
208+ $ service ->addTag ('monolog.processor ' , ['channel ' => 'test ' , 'priority ' => -25 ]);
209+ $ container ->setDefinition ('processor_test_channel-25 ' , $ service );
210+
145211 $ container ->getCompilerPassConfig ()->setOptimizationPasses ([]);
146212 $ container ->getCompilerPassConfig ()->setRemovingPasses ([]);
213+ $ container ->addCompilerPass (new LoggerChannelPass ());
147214 $ container ->addCompilerPass (new AddProcessorsPass ());
148215 $ container ->compile ();
149216
0 commit comments