|
|
|
;;; test-eldoc.el --- Unit tests for phpinspect.el -*- lexical-binding: t; -*-
|
|
|
|
|
|
|
|
(require 'phpinspect)
|
|
|
|
(require 'phpinspect-eldoc)
|
|
|
|
|
|
|
|
(ert-deftest phpinspect-eld-method-call ()
|
|
|
|
(with-temp-buffer
|
|
|
|
(phpinspect-ensure-worker)
|
|
|
|
(phpinspect-purge-cache)
|
|
|
|
|
|
|
|
(let* ((php-code "
|
|
|
|
class Thing
|
|
|
|
{
|
|
|
|
|
|
|
|
function getThis(\\DateTime $moment, Thing $thing, $other): static
|
|
|
|
{
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
function doStuff()
|
|
|
|
{
|
|
|
|
$this->getThis(new \\DateTime(), bla)")
|
|
|
|
(tokens (phpinspect-parse-string php-code))
|
|
|
|
(index (phpinspect--index-tokens tokens))
|
|
|
|
(phpinspect-project-root-function (lambda () "phpinspect-test"))
|
|
|
|
(phpinspect-eldoc-word-width 100)
|
|
|
|
(buffer (phpinspect-make-buffer :buffer (current-buffer)))
|
|
|
|
second-arg-pos inside-nested-list-pos first-arg-pos)
|
|
|
|
(phpinspect-cache-project-class
|
|
|
|
(phpinspect-current-project-root)
|
|
|
|
(cdar (alist-get 'classes (cdr index))))
|
|
|
|
|
|
|
|
(insert php-code)
|
|
|
|
(backward-char)
|
|
|
|
(setq second-arg-pos (point))
|
|
|
|
(backward-char 6)
|
|
|
|
(setq inside-nested-list-pos (point))
|
|
|
|
(backward-char 8)
|
|
|
|
(setq first-arg-pos (point))
|
|
|
|
|
|
|
|
(let ((result (phpinspect-eldoc-query-execute
|
|
|
|
(phpinspect-make-eldoc-query :point second-arg-pos :buffer buffer))))
|
|
|
|
(should (phpinspect-function-doc-p result))
|
|
|
|
(should (= 1 (phpinspect-function-doc-arg-pos result)))
|
|
|
|
(should (string= "getThis" (phpinspect--function-name (phpinspect-function-doc-fn result))))
|
|
|
|
|
|
|
|
(setq result (phpinspect-eldoc-query-execute
|
|
|
|
(phpinspect-make-eldoc-query :point inside-nested-list-pos :buffer buffer)))
|
|
|
|
(should-not result)
|
|
|
|
|
|
|
|
(setq result (phpinspect-eldoc-query-execute
|
|
|
|
(phpinspect-make-eldoc-query :point first-arg-pos :buffer buffer)))
|
|
|
|
(should (phpinspect-function-doc-p result))
|
|
|
|
(should (= 0 (phpinspect-function-doc-arg-pos result)))
|
|
|
|
(should (string= "getThis" (phpinspect--function-name (phpinspect-function-doc-fn result))))))))
|
|
|
|
|
|
|
|
(ert-deftest phpinspect-eldoc-function-for-object-method ()
|
|
|
|
(phpinspect-purge-cache)
|
|
|
|
(let* ((php-code "
|
|
|
|
class Thing
|
|
|
|
{
|
|
|
|
function getThis(\\DateTime $moment, Thing $thing, $other): static
|
|
|
|
{
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
function doStuff()
|
|
|
|
{
|
|
|
|
$this->getThis(new \\DateTime(), bla)")
|
|
|
|
(tokens (phpinspect-parse-string php-code))
|
|
|
|
(index (phpinspect--index-tokens tokens))
|
|
|
|
(phpinspect-project-root-function (lambda () "phpinspect-test"))
|
|
|
|
(phpinspect-eldoc-word-width 100))
|
|
|
|
(phpinspect-cache-project-class
|
|
|
|
(phpinspect-current-project-root)
|
|
|
|
(cdar (alist-get 'classes (cdr index))))
|
|
|
|
|
|
|
|
(should (string= "getThis: ($moment DateTime, $thing Thing, $other): Thing"
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert php-code)
|
|
|
|
(backward-char)
|
|
|
|
(setq-local phpinspect-current-buffer
|
|
|
|
(phpinspect-make-buffer :buffer (current-buffer)))
|
|
|
|
(phpinspect-buffer-parse phpinspect-current-buffer)
|
|
|
|
(phpinspect-eldoc-function))))))
|
|
|
|
|
|
|
|
(ert-deftest phpinspect-eldoc-function-for-static-method ()
|
|
|
|
(phpinspect-purge-cache)
|
|
|
|
(let* ((php-code "
|
|
|
|
class Thing
|
|
|
|
{
|
|
|
|
static function doThing(\\DateTime $moment, Thing $thing, $other): static
|
|
|
|
{
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
function doStuff()
|
|
|
|
{
|
|
|
|
self::doThing(")
|
|
|
|
(tokens (phpinspect-parse-string php-code))
|
|
|
|
(index (phpinspect--index-tokens tokens))
|
|
|
|
(phpinspect-project-root-function (lambda () "phpinspect-test"))
|
|
|
|
(phpinspect-eldoc-word-width 100))
|
|
|
|
(phpinspect-cache-project-class
|
|
|
|
(phpinspect-current-project-root)
|
|
|
|
(cdar (alist-get 'classes (cdr index))))
|
|
|
|
|
|
|
|
(should (string= "doThing: ($moment DateTime, $thing Thing, $other): Thing"
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert php-code)
|
|
|
|
(setq-local phpinspect-current-buffer
|
|
|
|
(phpinspect-make-buffer :buffer (current-buffer)))
|
|
|
|
(phpinspect-eldoc-function))))))
|