diff --git a/src/JRPC-Server-Core/JRPCMessageProcessor.class.st b/src/JRPC-Server-Core/JRPCMessageProcessor.class.st index 0abc10c..74c84ff 100644 --- a/src/JRPC-Server-Core/JRPCMessageProcessor.class.st +++ b/src/JRPC-Server-Core/JRPCMessageProcessor.class.st @@ -11,7 +11,8 @@ Class { #traits : 'JRPCParser', #classTraits : 'JRPCParser classTrait', #instVars : [ - 'handlersByName' + 'handlersByName', + 'debugMode' ], #category : #'JRPC-Server-Core' } @@ -59,6 +60,16 @@ JRPCMessageProcessor >> canHandleMethodNamed: methodName [ ^ handlersByName includesKey: methodName ] +{ #category : #accessing } +JRPCMessageProcessor >> debugMode [ + ^ debugMode +] + +{ #category : #accessing } +JRPCMessageProcessor >> debugMode: anObject [ + debugMode := anObject +] + { #category : #'handling - jrpc' } JRPCMessageProcessor >> handleJRPCNotificationObject: aJRPCNotificationObject [ "A Notification is a Request object without an 'id' member. @@ -99,19 +110,26 @@ JRPCMessageProcessor >> handleJRPCRequestObject: aJRPCRequestObject [ JRPCSuccessResponseObject id: aJRPCRequestObject id result: result ] on: Error - do: [ :jrpcError | jrpcError return: ( aJRPCRequestObject convertErrorToResponse: jrpcError ) ] + do: [ :jrpcError | + self debugMode + ifTrue: [ jrpcError pass ] + ifFalse: [ jrpcError return: ( aJRPCRequestObject convertErrorToResponse: jrpcError ) ] ] ] { #category : #'handling - json' } JRPCMessageProcessor >> handleJSON: aJSONString [ - - "Gets aJSONString as input and returns a JSON string." + "Gets aJSONString being a request or notification serialized in JSON format as input + and returns a JSON string being the answer serialized in JSON format. + " | jrpcResponse | jrpcResponse := [ ( self parseSupposedJRPCMessageObjectFromString: aJSONString ) beHandledBy: self ] on: Error - do: [ :error | error return: error asJRPCResponse ]. + do: [ :error | + self debugMode + ifTrue: [ error pass ] + ifFalse: [ error return: error asJRPCResponse ] ]. ^ jrpcResponse beConvertedBy: self ] @@ -140,7 +158,8 @@ JRPCMessageProcessor >> handlerFor: requestOrNotification [ JRPCMessageProcessor >> initialize [ super initialize. - handlersByName := Dictionary new + handlersByName := Dictionary new. + self debugMode: false ] { #category : #testing } diff --git a/src/JRPC-Server-Core/JRPCServer.class.st b/src/JRPC-Server-Core/JRPCServer.class.st index be71ba9..e1c741d 100644 --- a/src/JRPC-Server-Core/JRPCServer.class.st +++ b/src/JRPC-Server-Core/JRPCServer.class.st @@ -31,6 +31,16 @@ JRPCServer >> addHandlersFromPragmasIn: anObject [ messageProcessor addHandlersFromPragmasIn: anObject ] +{ #category : #accessing } +JRPCServer >> debugMode [ + ^ self messageProcessor debugMode +] + +{ #category : #accessing } +JRPCServer >> debugMode: aBoolean [ + ^ self messageProcessor debugMode: aBoolean +] + { #category : #'handling - jrpc' } JRPCServer >> handleJRPCRequestObject: aJRPCRequestObject [ diff --git a/src/JRPC-Tests/JRPCMessageProcessorTest.class.st b/src/JRPC-Tests/JRPCMessageProcessorTest.class.st index aa77086..9986cf6 100644 --- a/src/JRPC-Tests/JRPCMessageProcessorTest.class.st +++ b/src/JRPC-Tests/JRPCMessageProcessorTest.class.st @@ -7,6 +7,35 @@ Class { #category : #'JRPC-Tests' } +{ #category : #test } +JRPCMessageProcessorTest >> testDebugMode [ + | messageProcessor | + messageProcessor := JRPCMessageProcessor new. + + self deny: messageProcessor debugMode. + + messageProcessor debugMode: true. + + self assert: messageProcessor debugMode. +] + +{ #category : #test } +JRPCMessageProcessorTest >> testDebugModeDoNotCatchError [ + | messageProcessor | + messageProcessor := JRPCMessageProcessor new. + messageProcessor debugMode: true. + + messageProcessor addHandlerNamed: 'error' block: [ Error signal ]. + + self should: [ (JRPCRequestObject id: 1 method: 'error') beHandledBy: messageProcessor ] + raise: Error. + + messageProcessor debugMode: false. + + self shouldnt: [ (JRPCRequestObject id: 1 method: 'error') beHandledBy: messageProcessor ] + raise: Error. +] + { #category : #test } JRPCMessageProcessorTest >> testHandlerFor [ | messageProcessor block handler | diff --git a/src/JRPC-Tests/JRPCServerTest.class.st b/src/JRPC-Tests/JRPCServerTest.class.st index c4a2488..1a9a525 100644 --- a/src/JRPC-Tests/JRPCServerTest.class.st +++ b/src/JRPC-Tests/JRPCServerTest.class.st @@ -86,6 +86,17 @@ JRPCServerTest >> testAddHandlersFromPragmasIn [ assert: ( self messageProcessor canHandleMethodNamed: 'stack_push' ) ] +{ #category : #test } +JRPCServerTest >> testDebugMode [ + self deny: server debugMode. + self deny: server messageProcessor debugMode. + + server debugMode: true. + + self assert: server debugMode. + self assert: server messageProcessor debugMode +] + { #category : #tests } JRPCServerTest >> testHandleJRPCRequestObject [ | requestForNonExistentHandler response |