;;; test-help.el --- Flycheck Specs: Syntax checker help -*- lexical-binding: t; -*- ;; Copyright (C) 2017 Flycheck contributors ;; Copyright (C) 2016 Sebastian Wiesner ;; Author: Sebastian Wiesner ;; This file is not part of GNU Emacs. ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Specs for `flycheck-describe-checker' and related functions. ;;; Code: (require 'flycheck-buttercup) (describe "Syntax checker Help" (describe "flycheck-describe-checker" (let ((checker 'ruby-rubocop)) (before-each (let ((inhibit-message t)) (flycheck-describe-checker checker))) (after-each (when (buffer-live-p (get-buffer (help-buffer))) (kill-buffer (help-buffer)))) (it (format "pops up a help buffer for %s" checker) (expect (help-buffer) :to-be-live) (expect (help-buffer) :to-be-visible)) (it (format "documents %s in the help buffer" checker) (expect (help-buffer) :to-contain-match (regexp-quote (symbol-name checker)))) (it (format "navigates to the source of %s" checker) (with-current-buffer (help-buffer) ;; Search for the button… (re-search-forward (rx "`" (group (1+ (not (any "'")))) "'")) (expect (match-string 1) :to-equal "flycheck.el") ;; …and push it. We disable prompts about unsafe local variables and ;; disable a bunch of hooks to make the underlying call to `find-file' ;; as painless as possible. (let ((enable-local-variables :safe) hack-local-variables-hook prog-mode-hook emacs-lisp-mode-hook) (push-button (match-beginning 1))) (unwind-protect (progn (expect (buffer-name) :to-equal "flycheck.el") (expect (looking-at (rx bol (or "(flycheck-define-checker" "(flycheck-define-command-checker") symbol-end " " (? "'") symbol-start (group (1+ (or (syntax word) (syntax symbol)))) symbol-end)) :to-be-truthy) (expect (match-string 1) :to-equal (symbol-name checker))) ;; Kill the Flycheck buffer again (kill-buffer)))) (it (format "shows next checkers in the help of %s" checker) (let ((next-checkers (flycheck-checker-get checker 'next-checkers))) (assume next-checkers (format "Syntax checker %S has no next checkers" checker)) (dolist (next-checker next-checkers) (pcase next-checker (`(,level . ,checker) (expect (help-buffer) :to-contain-match (rx-to-string `(and "`" ,(symbol-name checker) "' (maximum level `" ,(symbol-name level)"')")))) ((pred symbolp) (expect (help-buffer) :to-contain-match (rx-to-string `(and "`" ,(symbol-name next-checker) "'")))))))) (it (format "shows the executable name in the help of %s" checker) (let ((executable (flycheck-checker-default-executable checker))) (expect (help-buffer) :to-contain-match (rx-to-string `(and "\"" ,executable "\""))))) (it (format "shows the executable variable in the help of %s" checker) (let ((variable (flycheck-checker-executable-variable checker))) (expect (help-buffer) :to-contain-match (regexp-quote (symbol-name variable))))) (it (format "shows the configuration file variable in the help of %s" checker) (let ((variable (flycheck-checker-get checker 'config-file-var))) (assume variable (format "Syntax checker %s has no configuration file" checker)) (expect (help-buffer) :to-contain-match (regexp-quote (symbol-name variable))))) (it (format "shows the option variables in the help of %s" checker) (let ((option-vars (flycheck-checker-get checker 'option-vars))) (assume option-vars (format "Syntax checker %s has no options" checker)) (dolist (variable option-vars) (expect (help-buffer) :to-contain-match (rx-to-string `(and "* `" ,(symbol-name variable) "'" eol)))))) (it (format "shows the docstring of %s" checker) (let ((docstring (flycheck-checker-get checker 'documentation))) (expect (help-buffer) :to-contain-match (regexp-quote docstring))))))) ;;; test-help.el ends here