(require-extension test) (use json-rpc-client) ; Setup global string ports and server for testing (define input (open-input-string "some-string")) (define output (open-output-string)) (define xbmc (json-rpc-server input output "2.0")) ; Setup own test procedure with locally scoped output ports (define (test-server description expected method . params) (let ((output (open-output-string))) (apply (json-rpc-server input output "2.0") method params) (test description expected (get-output-string output)))) (test-group "JSON-RPC string output checks" (test-server "Call with only a method" "{\"jsonrpc\":\"2.0\",\"method\":\"Player.PlayPause\",\"id\":\"1\"}" "Player.PlayPause") (test-server "Call with a method and a one dimensional params" "{\"jsonrpc\":\"2.0\",\"method\":\"Player.PlayPause\",\"params\":{\"playerid\":0},\"id\":\"1\"}" "Player.PlayPause" playerid: 0)) ; Do some actual error testing (test-group "Non-port or non-version calls" (test-error "Non port call on input" (json-rpc-server "input" output "2.0")) (test-error "Non port call on output" (json-rpc-server input "output" "2.0")) (test-error "Non correct version number call" (json-rpc-server input output "3.0"))) (test-group "Non-string method calls" (test-error "Call method as symbol" (xbmc 'foo)) (test-error "Call method as number" (xbmc 1)) (test-error "Call method as list" (xbmc '(1 2))) (test-error "Call method as vector" (xbmc '#())) (test-error "Call method as boolean" (xbmc #f))) (test-group "Non-keyword param calls" (test-error "Call params as a list" (xbmc "foo" '(a b c))) (test-error "Call params as a string" (xbmc "foo" "bar")) (test-error "Call params as a number" (xbmc "foo" 1))) (test-exit)