;;; clang-format-test.el --- unit tests for clang-format.el  -*- lexical-binding: t; -*-

;; Copyright (C) 2017  Google Inc.

;; Author: Philipp Stephani <phst@google.com>

;; This file is distributed under the University of Illinois Open Source
;; License.  See LICENSE.TXT for details.

;;; Commentary:

;; Unit tests for clang-format.el.

;;; Code:

(require 'clang-format)

(require 'cl-lib)
(require 'ert)
(require 'pcase)

(ert-deftest clang-format-buffer--buffer-encoding ()
  "Tests that encoded text is handled properly."
  (cl-letf* ((call-process-args nil)
             ((symbol-function 'call-process-region)
              (lambda (&rest args)
                (push args call-process-args)
                (pcase-exhaustive args
                  (`(,_start ,_end ,_program ,_delete (,stdout ,_stderr)
                             ,_display . ,_args)
                   (with-current-buffer stdout
                     (insert "<?xml version='1.0'?>
<replacements xml:space='preserve' incomplete_format='false'>
<replacement offset='4' length='0'> </replacement>
<replacement offset='10' length='0'> </replacement>
</replacements>
"))
                   0)))))
    (with-temp-buffer
      (let ((buffer-file-name "foo.cpp")
            (buffer-file-coding-system 'utf-8-with-signature-dos)
            (default-process-coding-system 'latin-1-unix))
        (insert "ä =ö;\nü= ß;\n")
        (goto-char (point-min))
        (end-of-line)
        (clang-format-buffer))
      (should (equal (buffer-string) "ä = ö;\nü = ß;\n"))
      (should (eolp))
      (should (equal (buffer-substring (point) (point-max))
                     "\nü = ß;\n")))
    (should-not (cdr call-process-args))
    (pcase-exhaustive call-process-args
      (`((,start ,end ,_program ,delete (,_stdout ,_stderr) ,display . ,args))
       (should-not start)
       (should-not end)
       (should-not delete)
       (should-not display)
       (should (equal args
                      '("-output-replacements-xml" "-assume-filename" "foo.cpp"
                        "-style" "file"
                        ;; Beginning of buffer, no byte-order mark.
                        "-offset" "0"
                        ;; We have two lines with 2×2 bytes for the umlauts,
                        ;; 1 byte for the line ending, and 3 bytes for the
                        ;; other ASCII characters each.
                        "-length" "16"
                        ;; Length of a single line (without line ending).
                        "-cursor" "7")))))))

(ert-deftest clang-format-buffer--process-encoding ()
  "Tests that text is sent to the clang-format process in the
right encoding."
  (cl-letf* ((hexdump (executable-find "hexdump"))
             (original-call-process-region
              (symbol-function 'call-process-region))
             (call-process-inputs nil)
             ;; We redirect the input to hexdump so that we have guaranteed
             ;; ASCII output.
             ((symbol-function 'call-process-region)
              (lambda (&rest args)
                (pcase-exhaustive args
                  (`(,start ,end ,_program ,_delete (,stdout ,_stderr)
                            ,_display . ,_args)
                   (with-current-buffer stdout
                     (insert "<?xml version='1.0'?>
<replacements xml:space='preserve' incomplete_format='false'>
</replacements>
"))
                   (let ((stdin (current-buffer)))
                     (with-temp-buffer
                       (prog1
                           (let ((stdout (current-buffer)))
                             (with-current-buffer stdin
                               (funcall original-call-process-region
                                        start end hexdump nil stdout nil
                                        "-v" "-e" "/1 \"%02x \"")))
                         (push (buffer-string) call-process-inputs)))))))))
    (skip-unless hexdump)
    (with-temp-buffer
      (let ((buffer-file-name "foo.cpp")
            (buffer-file-coding-system 'utf-8-with-signature-dos)
            (default-process-coding-system 'latin-1-unix))
        (insert "ä\n")
        (clang-format-buffer))
      (should (equal (buffer-string) "ä\n"))
      (should (eobp)))
    (should (equal call-process-inputs '("c3 a4 0a ")))))

(ert-deftest clang-format-buffer--end-to-end ()
  "End-to-end test for ‘clang-format-buffer’.
Actually calls the clang-format binary."
  (skip-unless (file-executable-p clang-format-executable))
  (with-temp-buffer
    (let ((buffer-file-name "foo.cpp")
          (buffer-file-coding-system 'utf-8-with-signature-dos)
          (default-process-coding-system 'latin-1-unix))
      (insert "ä =ö;\nü= ß;\n")
      (goto-char (point-min))
      (end-of-line)
      (clang-format-buffer))
    (should (equal (buffer-string) "ä = ö;\nü = ß;\n"))
    (should (eolp))
    (should (equal (buffer-substring (point) (point-max))
                   "\nü = ß;\n"))))

;;; clang-format-test.el ends here
