115 lines
4.3 KiB
EmacsLisp
115 lines
4.3 KiB
EmacsLisp
;;; test-ob-elixir-sessions.el --- Session tests for ob-elixir -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 2024
|
|
|
|
;;; Commentary:
|
|
|
|
;; Tests for IEx session support in ob-elixir.
|
|
|
|
;;; Code:
|
|
|
|
(require 'ert)
|
|
(require 'ob-elixir)
|
|
|
|
(ert-deftest ob-elixir-test-session-creation ()
|
|
"Test session creation."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(unwind-protect
|
|
(let ((buffer (org-babel-elixir-initiate-session "test-create" nil)))
|
|
(should buffer)
|
|
(should (org-babel-comint-buffer-livep buffer)))
|
|
(ob-elixir-kill-session "test-create")))
|
|
|
|
(ert-deftest ob-elixir-test-session-persistence ()
|
|
"Test that sessions persist state."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(unwind-protect
|
|
(progn
|
|
;; First evaluation - define variable
|
|
(ob-elixir--evaluate-in-session "test-persist" "x = 42" 'value)
|
|
;; Second evaluation - use variable
|
|
(let ((result (ob-elixir--evaluate-in-session
|
|
"test-persist" "x * 2" 'value)))
|
|
(should (equal "84" result))))
|
|
(ob-elixir-kill-session "test-persist")))
|
|
|
|
(ert-deftest ob-elixir-test-session-none ()
|
|
"Test that :session none uses external process."
|
|
(skip-unless (executable-find ob-elixir-command))
|
|
(should (null (org-babel-elixir-initiate-session "none" nil))))
|
|
|
|
(ert-deftest ob-elixir-test-session-module-def ()
|
|
"Test defining module in session."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(unwind-protect
|
|
(progn
|
|
(ob-elixir--evaluate-in-session
|
|
"test-module"
|
|
"defmodule TestMod do\n def double(x), do: x * 2\nend"
|
|
'value)
|
|
(let ((result (ob-elixir--evaluate-in-session
|
|
"test-module" "TestMod.double(21)" 'value)))
|
|
(should (equal "42" result))))
|
|
(ob-elixir-kill-session "test-module")))
|
|
|
|
(ert-deftest ob-elixir-test-session-reuse ()
|
|
"Test that same session name returns same buffer."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(unwind-protect
|
|
(let ((buffer1 (org-babel-elixir-initiate-session "test-reuse" nil))
|
|
(buffer2 (org-babel-elixir-initiate-session "test-reuse" nil)))
|
|
(should (eq buffer1 buffer2)))
|
|
(ob-elixir-kill-session "test-reuse")))
|
|
|
|
(ert-deftest ob-elixir-test-multiple-sessions ()
|
|
"Test that multiple named sessions work independently."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(unwind-protect
|
|
(progn
|
|
;; Set x in session-a
|
|
(ob-elixir--evaluate-in-session "session-a" "x = 1" 'value)
|
|
;; Set x in session-b to different value
|
|
(ob-elixir--evaluate-in-session "session-b" "x = 100" 'value)
|
|
;; Verify each session has its own value
|
|
(let ((result-a (ob-elixir--evaluate-in-session "session-a" "x" 'value))
|
|
(result-b (ob-elixir--evaluate-in-session "session-b" "x" 'value)))
|
|
(should (equal "1" result-a))
|
|
(should (equal "100" result-b))))
|
|
(ob-elixir-kill-session "session-a")
|
|
(ob-elixir-kill-session "session-b")))
|
|
|
|
(ert-deftest ob-elixir-test-session-output-mode ()
|
|
"Test session output mode (capturing stdout)."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(unwind-protect
|
|
(let ((result (ob-elixir--evaluate-in-session
|
|
"test-output"
|
|
"IO.puts(\"Hello from session\")"
|
|
'output)))
|
|
(should (string-match-p "Hello from session" result)))
|
|
(ob-elixir-kill-session "test-output")))
|
|
|
|
(ert-deftest ob-elixir-test-kill-session ()
|
|
"Test killing a session."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(let ((buffer (org-babel-elixir-initiate-session "test-kill" nil)))
|
|
(should buffer)
|
|
(ob-elixir-kill-session "test-kill")
|
|
(should-not (buffer-live-p buffer))
|
|
(should-not (gethash "test-kill" ob-elixir--sessions))))
|
|
|
|
(ert-deftest ob-elixir-test-kill-all-sessions ()
|
|
"Test killing all sessions."
|
|
(skip-unless (executable-find ob-elixir-iex-command))
|
|
(let ((buffer1 (org-babel-elixir-initiate-session "test-all-1" nil))
|
|
(buffer2 (org-babel-elixir-initiate-session "test-all-2" nil)))
|
|
(should buffer1)
|
|
(should buffer2)
|
|
(ob-elixir-kill-all-sessions)
|
|
(should-not (buffer-live-p buffer1))
|
|
(should-not (buffer-live-p buffer2))
|
|
(should (= 0 (hash-table-count ob-elixir--sessions)))))
|
|
|
|
(provide 'test-ob-elixir-sessions)
|
|
;;; test-ob-elixir-sessions.el ends here
|