@@ -40,96 +40,84 @@ protected function setUp(): void
4040
4141 public function testDiscoversAllElementTypesCorrectlyFromFixtureFiles ()
4242 {
43- $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
43+ $ discovery = $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
4444
45- $ tools = $ this -> registry ->getTools ();
45+ $ tools = $ discovery ->getTools ();
4646 $ this ->assertCount (4 , $ tools );
4747
48- $ greetUserTool = $ this ->registry ->getTool ('greet_user ' );
49- $ this ->assertInstanceOf (ToolReference::class, $ greetUserTool );
50- $ this ->assertFalse ($ greetUserTool ->isManual );
51- $ this ->assertEquals ('greet_user ' , $ greetUserTool ->tool ->name );
52- $ this ->assertEquals ('Greets a user by name. ' , $ greetUserTool ->tool ->description );
53- $ this ->assertEquals ([DiscoverableToolHandler::class, 'greet ' ], $ greetUserTool ->handler );
54- $ this ->assertArrayHasKey ('name ' , $ greetUserTool ->tool ->inputSchema ['properties ' ] ?? []);
55-
56- $ repeatActionTool = $ this ->registry ->getTool ('repeatAction ' );
57- $ this ->assertInstanceOf (ToolReference::class, $ repeatActionTool );
58- $ this ->assertEquals ('A tool with more complex parameters and inferred name/description. ' , $ repeatActionTool ->tool ->description );
59- $ this ->assertTrue ($ repeatActionTool ->tool ->annotations ->readOnlyHint );
60- $ this ->assertEquals (['count ' , 'loudly ' , 'mode ' ], array_keys ($ repeatActionTool ->tool ->inputSchema ['properties ' ] ?? []));
61-
62- $ invokableCalcTool = $ this ->registry ->getTool ('InvokableCalculator ' );
63- $ this ->assertInstanceOf (ToolReference::class, $ invokableCalcTool );
64- $ this ->assertFalse ($ invokableCalcTool ->isManual );
65- $ this ->assertEquals ([InvocableToolFixture::class, '__invoke ' ], $ invokableCalcTool ->handler );
66-
67- $ this ->assertNull ($ this ->registry ->getTool ('private_tool_should_be_ignored ' ));
68- $ this ->assertNull ($ this ->registry ->getTool ('protected_tool_should_be_ignored ' ));
69- $ this ->assertNull ($ this ->registry ->getTool ('static_tool_should_be_ignored ' ));
70-
71- $ resources = $ this ->registry ->getResources ();
48+ $ this ->assertArrayHasKey ('greet_user ' , $ tools );
49+ $ this ->assertFalse ($ tools ['greet_user ' ]->isManual );
50+ $ this ->assertEquals ('greet_user ' , $ tools ['greet_user ' ]->tool ->name );
51+ $ this ->assertEquals ('Greets a user by name. ' , $ tools ['greet_user ' ]->tool ->description );
52+ $ this ->assertEquals ([DiscoverableToolHandler::class, 'greet ' ], $ tools ['greet_user ' ]->handler );
53+ $ this ->assertArrayHasKey ('name ' , $ tools ['greet_user ' ]->tool ->inputSchema ['properties ' ] ?? []);
54+
55+ $ this ->assertArrayHasKey ('repeatAction ' , $ tools );
56+ $ this ->assertEquals ('A tool with more complex parameters and inferred name/description. ' , $ tools ['repeatAction ' ]->tool ->description );
57+ $ this ->assertTrue ($ tools ['repeatAction ' ]->tool ->annotations ->readOnlyHint );
58+ $ this ->assertEquals (['count ' , 'loudly ' , 'mode ' ], array_keys ($ tools ['repeatAction ' ]->tool ->inputSchema ['properties ' ] ?? []));
59+
60+ $ this ->assertArrayHasKey ('InvokableCalculator ' , $ tools );
61+ $ this ->assertInstanceOf (ToolReference::class, $ tools ['InvokableCalculator ' ]);
62+ $ this ->assertFalse ($ tools ['InvokableCalculator ' ]->isManual );
63+ $ this ->assertEquals ([InvocableToolFixture::class, '__invoke ' ], $ tools ['InvokableCalculator ' ]->handler );
64+
65+ $ this ->assertArrayNotHasKey ('private_tool_should_be_ignored ' , $ tools );
66+ $ this ->assertArrayNotHasKey ('protected_tool_should_be_ignored ' , $ tools );
67+ $ this ->assertArrayNotHasKey ('static_tool_should_be_ignored ' , $ tools );
68+
69+ $ resources = $ discovery ->getResources ();
7270 $ this ->assertCount (3 , $ resources );
7371
74- $ appVersionRes = $ this ->registry ->getResource ('app://info/version ' );
75- $ this ->assertInstanceOf (ResourceReference::class, $ appVersionRes );
76- $ this ->assertFalse ($ appVersionRes ->isManual );
77- $ this ->assertEquals ('app_version ' , $ appVersionRes ->schema ->name );
78- $ this ->assertEquals ('text/plain ' , $ appVersionRes ->schema ->mimeType );
72+ $ this ->assertArrayHasKey ('app://info/version ' , $ resources );
73+ $ this ->assertFalse ($ resources ['app://info/version ' ]->isManual );
74+ $ this ->assertEquals ('app_version ' , $ resources ['app://info/version ' ]->schema ->name );
75+ $ this ->assertEquals ('text/plain ' , $ resources ['app://info/version ' ]->schema ->mimeType );
7976
80- $ invokableStatusRes = $ this ->registry ->getResource ('invokable://config/status ' );
81- $ this ->assertInstanceOf (ResourceReference::class, $ invokableStatusRes );
82- $ this ->assertFalse ($ invokableStatusRes ->isManual );
83- $ this ->assertEquals ([InvocableResourceFixture::class, '__invoke ' ], $ invokableStatusRes ->handler );
77+ $ this ->assertArrayHasKey ('invokable://config/status ' , $ resources );
78+ $ this ->assertFalse ($ resources ['invokable://config/status ' ]->isManual );
79+ $ this ->assertEquals ([InvocableResourceFixture::class, '__invoke ' ], $ resources ['invokable://config/status ' ]->handler );
8480
85- $ prompts = $ this -> registry ->getPrompts ();
81+ $ prompts = $ discovery ->getPrompts ();
8682 $ this ->assertCount (4 , $ prompts );
8783
88- $ storyPrompt = $ this ->registry ->getPrompt ('creative_story_prompt ' );
89- $ this ->assertInstanceOf (PromptReference::class, $ storyPrompt );
90- $ this ->assertFalse ($ storyPrompt ->isManual );
91- $ this ->assertCount (2 , $ storyPrompt ->prompt ->arguments );
92- $ this ->assertEquals (CompletionProviderFixture::class, $ storyPrompt ->completionProviders ['genre ' ]);
84+ $ this ->assertArrayHasKey ('creative_story_prompt ' , $ prompts );
85+ $ this ->assertFalse ($ prompts ['creative_story_prompt ' ]->isManual );
86+ $ this ->assertCount (2 , $ prompts ['creative_story_prompt ' ]->prompt ->arguments );
87+ $ this ->assertEquals (CompletionProviderFixture::class, $ prompts ['creative_story_prompt ' ]->completionProviders ['genre ' ]);
9388
94- $ simplePrompt = $ this ->registry ->getPrompt ('simpleQuestionPrompt ' );
95- $ this ->assertInstanceOf (PromptReference::class, $ simplePrompt );
96- $ this ->assertFalse ($ simplePrompt ->isManual );
89+ $ this ->assertArrayHasKey ('simpleQuestionPrompt ' , $ prompts );
90+ $ this ->assertFalse ($ prompts ['simpleQuestionPrompt ' ]->isManual );
9791
98- $ invokableGreeter = $ this ->registry ->getPrompt ('InvokableGreeterPrompt ' );
99- $ this ->assertInstanceOf (PromptReference::class, $ invokableGreeter );
100- $ this ->assertFalse ($ invokableGreeter ->isManual );
101- $ this ->assertEquals ([InvocablePromptFixture::class, '__invoke ' ], $ invokableGreeter ->handler );
92+ $ this ->assertArrayHasKey ('InvokableGreeterPrompt ' , $ prompts );
93+ $ this ->assertFalse ($ prompts ['InvokableGreeterPrompt ' ]->isManual );
94+ $ this ->assertEquals ([InvocablePromptFixture::class, '__invoke ' ], $ prompts ['InvokableGreeterPrompt ' ]->handler );
10295
103- $ contentCreatorPrompt = $ this ->registry ->getPrompt ('content_creator ' );
104- $ this ->assertInstanceOf (PromptReference::class, $ contentCreatorPrompt );
105- $ this ->assertFalse ($ contentCreatorPrompt ->isManual );
106- $ this ->assertCount (3 , $ contentCreatorPrompt ->completionProviders );
96+ $ this ->assertArrayHasKey ('content_creator ' , $ prompts );
97+ $ this ->assertFalse ($ prompts ['content_creator ' ]->isManual );
98+ $ this ->assertCount (3 , $ prompts ['content_creator ' ]->completionProviders );
10799
108- $ templates = $ this -> registry ->getResourceTemplates ();
100+ $ templates = $ discovery ->getResourceTemplates ();
109101 $ this ->assertCount (4 , $ templates );
110102
111- $ productTemplate = $ this ->registry ->getResourceTemplate ('product://{region}/details/{productId} ' );
112- $ this ->assertInstanceOf (ResourceTemplateReference::class, $ productTemplate );
113- $ this ->assertFalse ($ productTemplate ->isManual );
114- $ this ->assertEquals ('product_details_template ' , $ productTemplate ->resourceTemplate ->name );
115- $ this ->assertEquals (CompletionProviderFixture::class, $ productTemplate ->completionProviders ['region ' ]);
116- $ this ->assertEqualsCanonicalizing (['region ' , 'productId ' ], $ productTemplate ->getVariableNames ());
117-
118- $ invokableUserTemplate = $ this ->registry ->getResourceTemplate ('invokable://user-profile/{userId} ' );
119- $ this ->assertInstanceOf (ResourceTemplateReference::class, $ invokableUserTemplate );
120- $ this ->assertFalse ($ invokableUserTemplate ->isManual );
121- $ this ->assertEquals ([InvocableResourceTemplateFixture::class, '__invoke ' ], $ invokableUserTemplate ->handler );
103+ $ this ->assertArrayHasKey ('product://{region}/details/{productId} ' , $ templates );
104+ $ this ->assertFalse ($ templates ['product://{region}/details/{productId} ' ]->isManual );
105+ $ this ->assertEquals ('product_details_template ' , $ templates ['product://{region}/details/{productId} ' ]->resourceTemplate ->name );
106+ $ this ->assertEquals (CompletionProviderFixture::class, $ templates ['product://{region}/details/{productId} ' ]->completionProviders ['region ' ]);
107+ $ this ->assertEqualsCanonicalizing (['region ' , 'productId ' ], $ templates ['product://{region}/details/{productId} ' ]->getVariableNames ());
108+
109+ $ this ->assertArrayHasKey ('invokable://user-profile/{userId} ' , $ templates );
110+ $ this ->assertFalse ($ templates ['invokable://user-profile/{userId} ' ]->isManual );
111+ $ this ->assertEquals ([InvocableResourceTemplateFixture::class, '__invoke ' ], $ templates ['invokable://user-profile/{userId} ' ]->handler );
122112 }
123113
124114 public function testDoesNotDiscoverElementsFromExcludedDirectories ()
125115 {
126- $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
127- $ this ->assertInstanceOf (ToolReference::class, $ this ->registry ->getTool ('hidden_subdir_tool ' ));
128-
129- $ this ->registry ->clear ();
116+ $ discovery = $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
117+ $ this ->assertArrayHasKey ('hidden_subdir_tool ' , $ discovery ->getTools ());
130118
131- $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ], ['SubDir ' ]);
132- $ this ->assertNull ( $ this -> registry -> getTool ( ' hidden_subdir_tool ' ));
119+ $ discovery = $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ], ['SubDir ' ]);
120+ $ this ->assertArrayNotHasKey ( ' hidden_subdir_tool ' , $ discovery -> getTools ( ));
133121 }
134122
135123 public function testHandlesEmptyDirectoriesOrDirectoriesWithNoPhpFiles ()
@@ -141,43 +129,41 @@ public function testHandlesEmptyDirectoriesOrDirectoriesWithNoPhpFiles()
141129
142130 public function testCorrectlyInfersNamesAndDescriptionsFromMethodsOrClassesIfNotSetInAttribute ()
143131 {
144- $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
132+ $ discovery = $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
145133
146- $ repeatActionTool = $ this ->registry -> getTool ('repeatAction ' );
147- $ this ->assertEquals ('repeatAction ' , $ repeatActionTool ->tool ->name );
148- $ this ->assertEquals ('A tool with more complex parameters and inferred name/description. ' , $ repeatActionTool ->tool ->description );
134+ $ this ->assertArrayHasKey ('repeatAction ' , $ tools = $ discovery -> getTools () );
135+ $ this ->assertEquals ('repeatAction ' , $ tools [ ' repeatAction ' ] ->tool ->name );
136+ $ this ->assertEquals ('A tool with more complex parameters and inferred name/description. ' , $ tools [ ' repeatAction ' ] ->tool ->description );
149137
150- $ simplePrompt = $ this ->registry -> getPrompt ('simpleQuestionPrompt ' );
151- $ this ->assertEquals ('simpleQuestionPrompt ' , $ simplePrompt ->prompt ->name );
152- $ this ->assertNull ($ simplePrompt ->prompt ->description );
138+ $ this ->assertArrayHasKey ('simpleQuestionPrompt ' , $ prompts = $ discovery -> getPrompts () );
139+ $ this ->assertEquals ('simpleQuestionPrompt ' , $ prompts [ ' simpleQuestionPrompt ' ] ->prompt ->name );
140+ $ this ->assertNull ($ prompts [ ' simpleQuestionPrompt ' ] ->prompt ->description );
153141
154- $ invokableCalc = $ this ->registry -> getTool ('InvokableCalculator ' );
155- $ this ->assertEquals ('InvokableCalculator ' , $ invokableCalc ->tool ->name );
156- $ this ->assertEquals ('An invokable calculator tool. ' , $ invokableCalc ->tool ->description );
142+ $ this ->assertArrayHasKey ('InvokableCalculator ' , $ tools );
143+ $ this ->assertEquals ('InvokableCalculator ' , $ tools [ ' InvokableCalculator ' ] ->tool ->name );
144+ $ this ->assertEquals ('An invokable calculator tool. ' , $ tools [ ' InvokableCalculator ' ] ->tool ->description );
157145 }
158146
159147 public function testDiscoversEnhancedCompletionProvidersWithValuesAndEnumAttributes ()
160148 {
161- $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
149+ $ discovery = $ this ->discoverer ->discover (__DIR__ , ['Fixtures ' ]);
162150
163- $ contentPrompt = $ this ->registry ->getPrompt ('content_creator ' );
164- $ this ->assertInstanceOf (PromptReference::class, $ contentPrompt );
165- $ this ->assertCount (3 , $ contentPrompt ->completionProviders );
151+ $ this ->assertArrayHasKey ('content_creator ' , $ prompts = $ discovery ->getPrompts ());
152+ $ this ->assertCount (3 , $ prompts ['content_creator ' ]->completionProviders );
166153
167- $ typeProvider = $ contentPrompt ->completionProviders ['type ' ];
154+ $ typeProvider = $ prompts [ ' content_creator ' ] ->completionProviders ['type ' ];
168155 $ this ->assertInstanceOf (ListCompletionProvider::class, $ typeProvider );
169156
170- $ statusProvider = $ contentPrompt ->completionProviders ['status ' ];
157+ $ statusProvider = $ prompts [ ' content_creator ' ] ->completionProviders ['status ' ];
171158 $ this ->assertInstanceOf (EnumCompletionProvider::class, $ statusProvider );
172159
173- $ priorityProvider = $ contentPrompt ->completionProviders ['priority ' ];
160+ $ priorityProvider = $ prompts [ ' content_creator ' ] ->completionProviders ['priority ' ];
174161 $ this ->assertInstanceOf (EnumCompletionProvider::class, $ priorityProvider );
175162
176- $ contentTemplate = $ this ->registry ->getResourceTemplate ('content://{category}/{slug} ' );
177- $ this ->assertInstanceOf (ResourceTemplateReference::class, $ contentTemplate );
178- $ this ->assertCount (1 , $ contentTemplate ->completionProviders );
163+ $ this ->assertArrayHasKey ('content://{category}/{slug} ' , $ templates = $ discovery ->getResourceTemplates ());
164+ $ this ->assertCount (1 , $ templates ['content://{category}/{slug} ' ]->completionProviders );
179165
180- $ categoryProvider = $ contentTemplate ->completionProviders ['category ' ];
166+ $ categoryProvider = $ templates [ ' content://{category}/{slug} ' ] ->completionProviders ['category ' ];
181167 $ this ->assertInstanceOf (ListCompletionProvider::class, $ categoryProvider );
182168 }
183169}
0 commit comments