Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/MCP-Tests/MCPToolAPITestCase.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -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 [

Expand Down
40 changes: 13 additions & 27 deletions src/MCP-Tests/MCPToolContractsTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -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' }
Expand Down
108 changes: 38 additions & 70 deletions src/MCP-Tests/MCPToolStructuredOutputTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand All @@ -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)
Expand Down Expand Up @@ -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.
Expand All @@ -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)
]
Expand Down Expand Up @@ -473,33 +450,24 @@ 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)
]

{ #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: {
Expand Down
Loading