|
573 | 573 | (when (buffer-live-p buf) |
574 | 574 | (kill-buffer buf)))))) |
575 | 575 |
|
576 | | -(ert-deftest test-ai-code-backends-infra-send-line-unassociated-file-reuses-remembered-session () |
577 | | - "Unassociated file should reuse the remembered repo session." |
| 576 | +(ert-deftest test-ai-code-backends-infra-send-line-unassociated-file-prompts-before-binding () |
| 577 | + "Unassociated file should prompt before it is bound to a repo session." |
578 | 578 | (let* ((prefix "codex") |
579 | 579 | (working-dir "/tmp/ai-code-file-new-association/") |
580 | 580 | (source (generate-new-buffer " *ai-code-source-new-association*")) |
|
618 | 618 | nil "missing" "line-2" prefix working-dir))) |
619 | 619 |
|
620 | 620 | (should (= selection-count 1)) |
621 | | - (should (equal (nreverse force-prompts) (list nil))) |
| 621 | + (should (equal (nreverse force-prompts) (list t))) |
622 | 622 | (should (equal (nreverse send-targets) |
623 | 623 | (list "*codex[file-new-association:b]*" |
624 | 624 | "*codex[file-new-association:b]*"))) |
|
680 | 680 | (ai-code-backends-infra--send-line-to-session |
681 | 681 | nil "missing" "line-2" prefix working-dir))) |
682 | 682 |
|
683 | | - (should (equal (nreverse force-prompts) (list nil t))) |
| 683 | + (should (equal (nreverse force-prompts) (list t t))) |
684 | 684 | (should (equal (nreverse send-targets) |
685 | 685 | (list "*codex[file-rebind:a]*" |
686 | 686 | "*codex[file-rebind:b]*"))) |
|
744 | 744 | (when (buffer-live-p buf) |
745 | 745 | (kill-buffer buf)))))) |
746 | 746 |
|
| 747 | +(ert-deftest test-ai-code-backends-infra-switch-new-file-prompts-when-remembered-session-exists () |
| 748 | + "A newly opened file should still prompt when multiple repo sessions are active." |
| 749 | + (let* ((prefix "codex") |
| 750 | + (working-dir "/tmp/ai-code-file-multi-remembered/") |
| 751 | + (source (generate-new-buffer " *ai-code-source-multi-remembered*")) |
| 752 | + (session-a (get-buffer-create "*codex[file-multi-remembered:a]*")) |
| 753 | + (session-b (get-buffer-create "*codex[file-multi-remembered:b]*")) |
| 754 | + (captured-collection nil) |
| 755 | + (captured-default nil)) |
| 756 | + (unwind-protect |
| 757 | + (progn |
| 758 | + (clrhash ai-code-backends-infra--directory-buffer-map) |
| 759 | + (when (boundp 'ai-code-backends-infra--file-session-map) |
| 760 | + (clrhash ai-code-backends-infra--file-session-map)) |
| 761 | + |
| 762 | + (with-current-buffer source |
| 763 | + (setq buffer-file-name "/tmp/ai-code-file-multi-remembered/main.el") |
| 764 | + (setq default-directory working-dir)) |
| 765 | + (with-current-buffer session-a |
| 766 | + (setq-local ai-code-backends-infra--session-directory working-dir)) |
| 767 | + (with-current-buffer session-b |
| 768 | + (setq-local ai-code-backends-infra--session-directory working-dir)) |
| 769 | + (ai-code-backends-infra--remember-session-buffer prefix working-dir session-b) |
| 770 | + |
| 771 | + (cl-letf (((symbol-function 'ai-code-backends-infra--find-session-buffers) |
| 772 | + (lambda (_prefix _dir) |
| 773 | + (list session-a session-b))) |
| 774 | + ((symbol-function 'completing-read) |
| 775 | + (lambda (_prompt collection _predicate _require-match |
| 776 | + &optional _initial-input _hist def &rest _) |
| 777 | + (setq captured-collection collection) |
| 778 | + (setq captured-default def) |
| 779 | + "a")) |
| 780 | + ((symbol-function 'get-buffer-window) |
| 781 | + (lambda (&rest _args) nil)) |
| 782 | + ((symbol-function 'ai-code-backends-infra--display-buffer-in-side-window) |
| 783 | + (lambda (_buffer) nil))) |
| 784 | + (with-current-buffer source |
| 785 | + (ai-code-backends-infra--switch-to-session-buffer |
| 786 | + nil |
| 787 | + "missing" |
| 788 | + prefix |
| 789 | + working-dir |
| 790 | + nil))) |
| 791 | + |
| 792 | + (should (equal captured-collection '("b" "a"))) |
| 793 | + (should (equal captured-default "b")) |
| 794 | + (should (eq (gethash |
| 795 | + (ai-code-backends-infra--file-session-map-key prefix source) |
| 796 | + ai-code-backends-infra--file-session-map) |
| 797 | + session-a))) |
| 798 | + (dolist (buf (list source session-a session-b)) |
| 799 | + (when (buffer-live-p buf) |
| 800 | + (kill-buffer buf)))))) |
| 801 | + |
747 | 802 | (ert-deftest test-ai-code-backends-infra-switch-force-prompt-prioritizes-attached-session () |
748 | 803 | "Force prompt should place attached file session at the top and as default." |
749 | 804 | (let* ((prefix "codex") |
|
900 | 955 | (ai-code-backends-infra--send-line-to-session |
901 | 956 | nil "missing" "line-2" prefix working-dir))) |
902 | 957 |
|
903 | | - (should (equal (nreverse force-prompts) (list nil t))) |
| 958 | + (should (equal (nreverse force-prompts) (list t t))) |
904 | 959 | (should (equal (nreverse send-targets) |
905 | 960 | (list "*codex[file-missing:a]*" |
906 | 961 | "*codex[file-missing:b]*"))) |
|
0 commit comments