@@ -1249,6 +1249,28 @@ since we don't display them locally. Let pi's message_start handle it."
12491249 :message nil))
12501250 (should (null pi-coding-agent--working-message))))
12511251
1252+ (ert-deftest pi-coding-agent-test-extension-ui-unsupported-warns ()
1253+ "Unsupported extension_ui_request method warns via `message'.
1254+ See https://github.com/dnouri/pi-coding-agent/issues/176."
1255+ (let (messages-logged response-sent)
1256+ (cl-letf (((symbol-function 'message)
1257+ (lambda (fmt &rest args) (push (apply #'format fmt args) messages-logged)))
1258+ ((symbol-function 'pi-coding-agent--send-extension-ui-response)
1259+ (lambda (_proc resp) (setq response-sent resp))))
1260+ (with-temp-buffer
1261+ (pi-coding-agent-chat-mode)
1262+ (let ((pi-coding-agent--process t))
1263+ (pi-coding-agent--handle-extension-ui-request
1264+ '(:type "extension_ui_request"
1265+ :id "req-unknown"
1266+ :method "someNewFancyWidget")))))
1267+ ;; Should warn the user
1268+ (should (cl-some (lambda (m) (string-match-p "someNewFancyWidget" m))
1269+ messages-logged))
1270+ ;; Should still send cancelled so the extension doesn't hang
1271+ (should response-sent)
1272+ (should (equal (plist-get response-sent :cancelled) t))))
1273+
12521274(ert-deftest pi-coding-agent-test-header-format-extension-status ()
12531275 "Extension status formatter returns inline neutral status text without pipe."
12541276 ;; Empty status returns empty string
@@ -1271,9 +1293,10 @@ since we don't display them locally. Let pi's message_start handle it."
12711293(ert-deftest pi-coding-agent-test-extension-ui-unknown-cancels ()
12721294 "extension_ui_request with unknown method sends cancelled response."
12731295 (let ((response-sent nil))
1274- (cl-letf (((symbol-function 'pi-coding-agent--rpc-async )
1275- (lambda (_proc msg _cb )
1276- (setq response-sent msg))))
1296+ (cl-letf (((symbol-function 'pi-coding-agent--send-extension-ui-response)
1297+ (lambda (_proc msg)
1298+ (setq response-sent msg)))
1299+ ((symbol-function 'message) #'ignore))
12771300 (with-temp-buffer
12781301 (pi-coding-agent-chat-mode)
12791302 (let ((pi-coding-agent--process t))
@@ -1291,9 +1314,10 @@ since we don't display them locally. Let pi's message_start handle it."
12911314(ert-deftest pi-coding-agent-test-extension-ui-editor-cancels ()
12921315 "extension_ui_request editor method sends cancelled (not supported)."
12931316 (let ((response-sent nil))
1294- (cl-letf (((symbol-function 'pi-coding-agent--rpc-async )
1295- (lambda (_proc msg _cb )
1296- (setq response-sent msg))))
1317+ (cl-letf (((symbol-function 'pi-coding-agent--send-extension-ui-response)
1318+ (lambda (_proc msg)
1319+ (setq response-sent msg)))
1320+ ((symbol-function 'message) #'ignore))
12971321 (with-temp-buffer
12981322 (pi-coding-agent-chat-mode)
12991323 (let ((pi-coding-agent--process t))
0 commit comments