From 94f0e9592de74c8cef46e1e33dea3d77529300c4 Mon Sep 17 00:00:00 2001 From: Gabriel Darbord <78592838+Gabriel-Darbord@users.noreply.github.com> Date: Mon, 20 Jul 2026 12:04:38 +0200 Subject: [PATCH] Strengthen test runner fixture references --- src/MCP-Tests/MCPToolAPITestCase.class.st | 6 + src/MCP-Tests/MCPToolContractsTest.class.st | 40 +++---- .../MCPToolStructuredOutputTest.class.st | 108 ++++++------------ 3 files changed, 57 insertions(+), 97 deletions(-) diff --git a/src/MCP-Tests/MCPToolAPITestCase.class.st b/src/MCP-Tests/MCPToolAPITestCase.class.st index a4036b7..142b376 100644 --- a/src/MCP-Tests/MCPToolAPITestCase.class.st +++ b/src/MCP-Tests/MCPToolAPITestCase.class.st @@ -130,6 +130,12 @@ MCPToolAPITestCase >> summaryFrom: aResult [ ^ (self structuredContentFrom: aResult) at: #summary ] +{ #category : 'private - calling' } +MCPToolAPITestCase >> testReferenceForMethod: aCompiledMethod [ + + ^ aCompiledMethod methodClass name asString , '>>#' , aCompiledMethod selector asString +] + { #category : 'support' } MCPToolAPITestCase >> toolRegistry [ diff --git a/src/MCP-Tests/MCPToolContractsTest.class.st b/src/MCP-Tests/MCPToolContractsTest.class.st index a19143d..622089a 100644 --- a/src/MCP-Tests/MCPToolContractsTest.class.st +++ b/src/MCP-Tests/MCPToolContractsTest.class.st @@ -2640,41 +2640,27 @@ MCPToolContractsTest >> testRunTestsKeepsPackagesAsPackageSelections [ { #category : 'tests' } MCPToolContractsTest >> testRunTestsParsesCompactSelections [ - | command parsedRequest rawRequest testRequests tool validatedRequests | + | command fixtureClassName parsedRequest rawRequest testMethodReference testRequests tool validatedRequests | tool := MCPToolRunTests new. + fixtureClassName := MCPToolStructuredOutputTestTarget name asString. + testMethodReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testPasses. rawRequest := tool requestFromToolCallArguments: { - (#classes -> #( 'MCPToolContractsTest' )). - (#methods - -> - #( 'MCPToolStructuredOutputTestTarget>>#testPasses' )) } - asDictionary. + (#classes -> { MCPToolContractsTest name asString }). + (#methods -> { testMethodReference }) } asDictionary. parsedRequest := tool parsedRequestFromToolRequest: rawRequest. command := tool commandForRequest: parsedRequest. - validatedRequests := command validatedRequestsFrom: - parsedRequest testRequests. + validatedRequests := command validatedRequestsFrom: parsedRequest testRequests. testRequests := parsedRequest testRequests. self assert: parsedRequest class equals: MCPRunTestsRequest. self assert: testRequests size equals: 2. - self - assert: testRequests first className - equals: 'MCPToolContractsTest'. + self assert: testRequests first className equals: MCPToolContractsTest name asString. self assert: testRequests first testMethodName equals: nil. - self - assert: testRequests second className - equals: 'MCPToolStructuredOutputTestTarget'. - self assert: testRequests second testMethodName equals: 'testPasses'. - self - assert: testRequests second displayName - equals: 'MCPToolStructuredOutputTestTarget>>#testPasses'. - self - assert: validatedRequests first class - equals: MCPValidatedTestRunRequest. - self - assert: validatedRequests first testRunRequest - equals: testRequests first. - self - assert: validatedRequests first testClass - equals: MCPToolContractsTest + self assert: testRequests second className equals: fixtureClassName. + self assert: testRequests second testMethodName equals: #testPasses asString. + self assert: testRequests second displayName equals: testMethodReference. + self assert: validatedRequests first class equals: MCPValidatedTestRunRequest. + self assert: validatedRequests first testRunRequest equals: testRequests first. + self assert: validatedRequests first testClass equals: MCPToolContractsTest ] { #category : 'tests' } diff --git a/src/MCP-Tests/MCPToolStructuredOutputTest.class.st b/src/MCP-Tests/MCPToolStructuredOutputTest.class.st index 182445e..be5745b 100644 --- a/src/MCP-Tests/MCPToolStructuredOutputTest.class.st +++ b/src/MCP-Tests/MCPToolStructuredOutputTest.class.st @@ -239,32 +239,23 @@ MCPToolStructuredOutputTest >> testRemoveClassReturnsStructuredError [ { #category : 'tests' } MCPToolStructuredOutputTest >> testRunTestClassReturnsStructuredIssues [ - | data error failure result skipped | - result := self - callToolNamed: 'test_run' - withArguments: - { (#classes -> #( 'MCPToolStructuredOutputTestTarget' )) } - asDictionary. + | data error errorReference failure failureReference fixtureClassName result skipped skippedReference | + fixtureClassName := MCPToolStructuredOutputTestTarget name asString. + skippedReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testSkips. + failureReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testFails. + errorReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testErrors. + result := self callToolNamed: 'test_run' withArguments: { (#classes -> { fixtureClassName }) } asDictionary. data := self dataFrom: result. - self - assert: ((self structuredContentFrom: result) at: #status) - equals: 'ok'. + self assert: ((self structuredContentFrom: result) at: #status) equals: 'ok'. self assert: (data at: #runCount) equals: 3. self assert: (data at: #passedCount) equals: 1. skipped := data at: #skipped. failure := (data at: #failures) first. error := (data at: #errors) first. - self - assert: skipped - equals: #( 'MCPToolStructuredOutputTestTarget>>#testSkips' ). - self - assert: (failure at: #test) - equals: 'MCPToolStructuredOutputTestTarget>>#testFails'. - self assert: - ((failure at: #message) includesSubstring: 'boom failure'). - self - assert: (error at: #test) - equals: 'MCPToolStructuredOutputTestTarget>>#testErrors'. + self assert: skipped equals: { skippedReference }. + self assert: (failure at: #test) equals: failureReference. + self assert: ((failure at: #message) includesSubstring: 'boom failure'). + self assert: (error at: #test) equals: errorReference. self assert: (error at: #errorClass) equals: 'Error'. self assert: ((error at: #message) includesSubstring: 'boom error'). self deny: (data includesKey: #results). @@ -274,26 +265,17 @@ MCPToolStructuredOutputTest >> testRunTestClassReturnsStructuredIssues [ { #category : 'tests' } MCPToolStructuredOutputTest >> testRunTestMethodReturnsStructuredIssues [ - | data failure result | - result := self - callToolNamed: 'test_run' - withArguments: - { (#methods - -> #( 'MCPToolStructuredOutputTestTarget>>#testFails' )) } - asDictionary. + | data failure failureReference result | + failureReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testFails. + result := self callToolNamed: 'test_run' withArguments: { (#methods -> { failureReference }) } asDictionary. data := self dataFrom: result. failure := (data at: #failures) first. - self - assert: ((self structuredContentFrom: result) at: #status) - equals: 'ok'. + self assert: ((self structuredContentFrom: result) at: #status) equals: 'ok'. self assert: (data at: #runCount) equals: 1. self assert: (data at: #passedCount) equals: 0. self assert: (data at: #failures) size equals: 1. - self - assert: (failure at: #test) - equals: 'MCPToolStructuredOutputTestTarget>>#testFails'. - self assert: - ((failure at: #message) includesSubstring: 'boom failure'). + self assert: (failure at: #test) equals: failureReference. + self assert: ((failure at: #message) includesSubstring: 'boom failure'). self deny: (data includesKey: #results). self deny: (data includesKey: #skipped). self deny: (data includesKey: #errors) @@ -385,16 +367,14 @@ MCPToolStructuredOutputTest >> testRunTestsCoverageReturnsStructuredCoverage [ { #category : 'tests' } MCPToolStructuredOutputTest >> testRunTestsDeduplicatesConcreteCasesAcrossSelections [ - | data result | + | data failureReference fixtureClassName result | + fixtureClassName := MCPToolStructuredOutputTestTarget name asString. + failureReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testFails. result := self callToolNamed: 'test_run' withArguments: { - (#classes -> #( 'MCPToolStructuredOutputTestTarget' )). - (#methods - -> #( 'MCPToolStructuredOutputTestTarget>>#testFails' )) } - asDictionary. + (#classes -> { fixtureClassName }). + (#methods -> { failureReference }) } asDictionary. data := self dataFrom: result. - self - assert: ((self structuredContentFrom: result) at: #status) - equals: 'ok'. + self assert: ((self structuredContentFrom: result) at: #status) equals: 'ok'. self assert: (data at: #runCount) equals: 3. self assert: (data at: #passedCount) equals: 1. self assert: (data at: #skipped) size equals: 1. @@ -405,22 +385,19 @@ MCPToolStructuredOutputTest >> testRunTestsDeduplicatesConcreteCasesAcrossSelect { #category : 'tests' } MCPToolStructuredOutputTest >> testRunTestsDeduplicatesUnrunCasesAcrossSelections [ - | data result | + | data failureReference fixtureClassName result | + fixtureClassName := MCPToolStructuredOutputTestTarget name asString. + failureReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testFails. result := self callToolNamed: 'test_run' withArguments: { - (#classes -> #( 'MCPToolStructuredOutputTestTarget' )). - (#methods - -> #( 'MCPToolStructuredOutputTestTarget>>#testFails' )). + (#classes -> { fixtureClassName }). + (#methods -> { failureReference }). (#timeoutSeconds -> 0) } asDictionary. data := self dataFrom: result. - self - assert: ((self structuredContentFrom: result) at: #status) - equals: 'ok'. + self assert: ((self structuredContentFrom: result) at: #status) equals: 'ok'. self assert: (data at: #timedOut) equals: true. self assert: (data at: #runCount) equals: 0. self assert: (data at: #passedCount) equals: 0. - self - assert: (data at: #unrunClasses) - equals: #( 'MCPToolStructuredOutputTestTarget' ). + self assert: (data at: #unrunClasses) equals: { fixtureClassName }. self deny: (data includesKey: #unrunMethods). self deny: (data includesKey: #results) ] @@ -473,22 +450,14 @@ MCPToolStructuredOutputTest >> testRunTestsParseErrorReturnsStructuredToolError { #category : 'tests' } MCPToolStructuredOutputTest >> testRunTestsSkippedMethodReportsCompactList [ - | data result | - result := self - callToolNamed: 'test_run' - withArguments: - { (#methods - -> #( 'MCPToolStructuredOutputTestTarget>>#testSkips' )) } - asDictionary. + | data result skippedReference | + skippedReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testSkips. + result := self callToolNamed: 'test_run' withArguments: { (#methods -> { skippedReference }) } asDictionary. data := self dataFrom: result. - self - assert: ((self structuredContentFrom: result) at: #status) - equals: 'ok'. + self assert: ((self structuredContentFrom: result) at: #status) equals: 'ok'. self assert: (data at: #runCount) equals: 0. self assert: (data at: #passedCount) equals: 0. - self - assert: (data at: #skipped) - equals: #( 'MCPToolStructuredOutputTestTarget>>#testSkips' ). + self assert: (data at: #skipped) equals: { skippedReference }. self deny: (data includesKey: #failures). self deny: (data includesKey: #errors) ] @@ -496,10 +465,9 @@ MCPToolStructuredOutputTest >> testRunTestsSkippedMethodReportsCompactList [ { #category : 'tests' } MCPToolStructuredOutputTest >> testRunTestsSuccessfulResultHasExpectedShape [ - | data result | - result := self - callToolNamed: 'test_run' - withArguments: { (#methods -> #( 'MCPToolStructuredOutputTestTarget>>#testPasses' )) } asDictionary. + | data result testMethodReference | + testMethodReference := self testReferenceForMethod: MCPToolStructuredOutputTestTarget >> #testPasses. + result := self callToolNamed: 'test_run' withArguments: { (#methods -> { testMethodReference }) } asDictionary. data := self dataFrom: result. self assert: ((self structuredContentFrom: result) at: #status) equals: 'ok'. self assert: data equals: {