123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- (eval-when-compile (require 'cl))
- (require 'ert)
- (when load-file-name
- (add-to-list 'load-path
- (concat (file-name-directory load-file-name) "mocker")))
- (require 'mocker)
- (require 'ein-cell)
- (require 'ein-testing-cell)
- ;;; ein:cell-from-json
- (defun eintest:cell-from-json (data &rest args)
- (let ((cell (apply #'ein:cell-from-json data args)))
- (should-not (ein:cell-active-p cell))
- cell))
- (ert-deftest ein:cell-from-json-code ()
- (let* ((input-prompt-number 111)
- (output-prompt-number 222)
- (input (ein:join-str "\n" '("first input" "second input")))
- (output-0 (list :output_type "pyout"
- :prompt_number output-prompt-number
- :text (list "first output"
- "second output")))
- (data (ein:testing-codecell-data
- input input-prompt-number (list output-0)))
- (cell (eintest:cell-from-json data)))
- (should (ein:codecell-p cell))
- (should (equal (oref cell :input-prompt-number) input-prompt-number))
- (should (equal (oref cell :input) input))
- (should (equal (car (oref cell :outputs)) output-0))
- (should (equal (oref cell :collapsed) nil))))
- (ert-deftest ein:cell-from-json-text ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "text" :source input))
- (cell (eintest:cell-from-json data)))
- (should (ein:textcell-p cell))
- (should (equal (oref cell :input) input))))
- (ert-deftest ein:cell-from-json-html ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "html" :source input))
- (cell (eintest:cell-from-json data)))
- (should (ein:htmlcell-p cell))
- (should (equal (oref cell :input) input))))
- (ert-deftest ein:cell-from-json-markdown ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "markdown" :source input))
- (cell (eintest:cell-from-json data)))
- (should (ein:markdowncell-p cell))
- (should (equal (oref cell :input) input))))
- (ert-deftest ein:cell-from-json-raw ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "raw" :source input))
- (cell (eintest:cell-from-json data)))
- (should (ein:rawcell-p cell))
- (should (equal (oref cell :input) input))))
- (ert-deftest ein:cell-from-json-heading ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "heading" :source input))
- (cell (eintest:cell-from-json data)))
- (should (ein:headingcell-p cell))
- (should (equal (oref cell :input) input))))
- ;; ein:cell-to-json
- (defun eintest:cell-to-json (cell input &optional discard-output)
- (mocker-let ((ein:cell-get-text
- (cell)
- ((:input (list cell) :output input))))
- (ein:cell-to-json cell discard-output)))
- (ert-deftest ein:cell-to-json-code ()
- (let* ((input-prompt-number 111)
- (output-prompt-number 222)
- (input (ein:join-str "\n" '("first input" "second input")))
- (output-0 (list :output_type "pyout"
- :prompt_number output-prompt-number
- :text (list "first output"
- "second output")))
- (data (ein:testing-codecell-data
- input input-prompt-number (list output-0)))
- (cell (eintest:cell-from-json data))
- (alist (eintest:cell-to-json cell input)))
- (should (equal (cdr (assq 'input alist)) "first input\nsecond input"))
- (should (equal (cdr (assq 'cell_type alist)) "code"))
- (should (equal (cdr (assq 'outputs alist)) `[,output-0]))
- (should (equal (cdr (assq 'language alist)) "python"))
- (should (equal (cdr (assq 'collapsed alist)) json-false))))
- (ert-deftest ein:cell-to-json-code-discard-output ()
- (let* ((input-prompt-number 111)
- (output-prompt-number 222)
- (input (ein:join-str "\n" '("first input" "second input")))
- (output-0 (list :output_type "pyout"
- :prompt_number output-prompt-number
- :text (list "first output"
- "second output")))
- (data (ein:testing-codecell-data
- input input-prompt-number (list output-0)))
- (cell (eintest:cell-from-json data))
- (alist (eintest:cell-to-json cell input t)))
- (should (equal (cdr (assq 'input alist)) "first input\nsecond input"))
- (should (equal (cdr (assq 'cell_type alist)) "code"))
- (should (equal (cdr (assq 'outputs alist)) []))
- (should (equal (cdr (assq 'language alist)) "python"))
- (should (equal (cdr (assq 'collapsed alist)) json-false))))
- (ert-deftest ein:cell-to-json-text ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "text" :source input))
- (cell (eintest:cell-from-json data))
- (alist (eintest:cell-to-json cell input)))
- (should (equal (cdr (assq 'cell_type alist)) "text"))
- (should (equal (cdr (assq 'source alist)) "first input\nsecond input"))))
- (ert-deftest ein:cell-to-json-html ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "html" :source input))
- (cell (eintest:cell-from-json data))
- (alist (eintest:cell-to-json cell input)))
- (should (equal (cdr (assq 'cell_type alist)) "html"))
- (should (equal (cdr (assq 'source alist)) "first input\nsecond input"))))
- (ert-deftest ein:cell-to-json-markdown ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "markdown" :source input))
- (cell (eintest:cell-from-json data))
- (alist (eintest:cell-to-json cell input)))
- (should (equal (cdr (assq 'cell_type alist)) "markdown"))
- (should (equal (cdr (assq 'source alist)) "first input\nsecond input"))))
- (ert-deftest ein:cell-to-json-raw ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "raw" :source input))
- (cell (eintest:cell-from-json data))
- (alist (eintest:cell-to-json cell input)))
- (should (equal (cdr (assq 'cell_type alist)) "raw"))
- (should (equal (cdr (assq 'source alist)) "first input\nsecond input"))))
- (ert-deftest ein:cell-to-json-heading ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type "heading" :source input))
- (cell (eintest:cell-from-json data))
- (alist (eintest:cell-to-json cell input)))
- (should (equal (cdr (assq 'cell_type alist)) "heading"))
- (should (equal (cdr (assq 'source alist)) "first input\nsecond input"))
- (should (equal (cdr (assq 'level alist)) 1))))
- ;;; ein:cell-convert/copy
- (ert-deftest ein:cell-convert-code-to-markdown ()
- (let* ((input-prompt-number 111)
- (output-prompt-number 222)
- (input (ein:join-str "\n" '("first input" "second input")))
- (output-0 (list :output_type "pyout"
- :prompt_number output-prompt-number
- :text (list "first output"
- "second output")))
- (data (ein:testing-codecell-data
- input input-prompt-number (list output-0)))
- (dummy-ewoc (ewoc-create 'dummy))
- (old (eintest:cell-from-json data :ewoc dummy-ewoc))
- (new (ein:cell-convert old "markdown")))
- (should (ein:codecell-p old))
- (should (ein:markdowncell-p new))
- (should (equal (oref new :input) input))))
- (ert-deftest ein:cell-convert-markdown-to-code ()
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (dummy-ewoc (ewoc-create 'dummy))
- (data (list :cell_type "markdown" :source input))
- (old (eintest:cell-from-json data :ewoc dummy-ewoc))
- (new (ein:cell-convert old "code")))
- (should (ein:markdowncell-p old))
- (should (ein:codecell-p new))
- (should (equal (oref new :input) input))))
- (ert-deftest ein:cell-copy-code ()
- (let* ((input-prompt-number 111)
- (output-prompt-number 222)
- (input (ein:join-str "\n" '("first input" "second input")))
- (output-0 (list :output_type "pyout"
- :prompt_number output-prompt-number
- :text (list "first output"
- "second output")))
- (data (ein:testing-codecell-data
- input input-prompt-number (list output-0)))
- (dummy-ewoc (ewoc-create 'dummy))
- (old (eintest:cell-from-json data :ewoc dummy-ewoc))
- (new (ein:cell-copy old)))
- (should (ein:codecell-p old))
- (should (ein:codecell-p new))
- (should-not (equal (oref old :cell-id)
- (oref new :cell-id)))
- (should (equal (oref old :input) input))
- (should (equal (oref new :input) input))))
- (ert-deftest ein:cell-copy-text-types ()
- (loop for cell-type in '("text" "html" "markdown" "raw" "heading")
- for cell-p = (intern (format "ein:%scell-p" cell-type))
- do
- (let* ((input (ein:join-str "\n" '("first input" "second input")))
- (data (list :cell_type cell-type :source input))
- (dummy-ewoc (ewoc-create 'dummy))
- (old (eintest:cell-from-json data :ewoc dummy-ewoc))
- (new (ein:cell-copy old)))
- (should (funcall cell-p old))
- (should (funcall cell-p new))
- (should-not (equal (oref old :cell-id)
- (oref new :cell-id)))
- (should (equal (oref old :input) input))
- (should (equal (oref new :input) input)))))
- ;;; ein:cell-element-get
- (ert-deftest ein:cell-element-get-basecell ()
- (let ((cell (ein:basecell "Cell")))
- ;; it's not supported
- (should-error (ein:cell-element-get :prompt))))
- (ert-deftest ein:cell-element-get-codecell ()
- (let* ((element (list :prompt 1
- :input 2
- :output '(3 4)
- :footer 5))
- (cell (ein:cell-from-type "code" :element element)))
- (mapc (lambda (kv)
- (should (equal (ein:cell-element-get cell (car kv)) (cdr kv))))
- (ein:plist-iter element))
- (should (equal (ein:cell-element-get cell :output 0) 3))
- (should (equal (ein:cell-element-get cell :output 1) 4))
- (should (equal (ein:cell-element-get cell :output 2) nil))
- (should (equal (ein:cell-element-get cell :after-input) 3))
- (should (equal (ein:cell-element-get cell :after-output) 5))
- (should (equal (ein:cell-element-get cell :before-input) 1))
- (should (equal (ein:cell-element-get cell :before-output) 2))
- (should (equal (ein:cell-element-get cell :last-output) 4))))
- (ert-deftest ein:cell-element-get-codecell-no-ouput ()
- (let* ((element (list :prompt 1
- :input 2
- :footer 5))
- (cell (ein:cell-from-type "code" :element element)))
- (mapc (lambda (kv)
- (should (equal (ein:cell-element-get cell (car kv)) (cdr kv))))
- (ein:plist-iter element))
- (should (equal (ein:cell-element-get cell :after-input) 5))
- (should (equal (ein:cell-element-get cell :last-output) 2))))
- (ert-deftest ein:cell-element-get-textcell ()
- (let* ((element (list :prompt 1
- :input 2
- :footer 5))
- (cell (ein:cell-from-type "text" :element element)))
- (mapc (lambda (kv)
- (should (equal (ein:cell-element-get cell (car kv)) (cdr kv))))
- (ein:plist-iter element))
- (should (equal (ein:cell-element-get cell :after-input) 5))
- (should (equal (ein:cell-element-get cell :before-input) 1))))
|