brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 667d606 Raw
129 lines · plain
1;;; clang-format-test.el --- unit tests for clang-format.el  -*- lexical-binding: t; -*-2 3;; Copyright (C) 2017  Google Inc.4 5;; Author: Philipp Stephani <phst@google.com>6 7;; Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.8;; See https://llvm.org/LICENSE.txt for license information.9;; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception10 11;;; Commentary:12 13;; Unit tests for clang-format.el. Not run by lit, run as:14;; emacs -Q -batch -l clang/tools/clang-format/clang-format.el -l clang/tools/clang-format/clang-format-test.el -f ert-run-tests-batch-and-exit15 16;;; Code:17 18(require 'clang-format)19 20(require 'cl-lib)21(require 'ert)22(require 'pcase)23 24(ert-deftest clang-format-buffer--buffer-encoding ()25  "Tests that encoded text is handled properly."26  (cl-letf* ((call-process-args nil)27             ((symbol-function 'call-process-region)28              (lambda (&rest args)29                (push args call-process-args)30                (pcase-exhaustive args31                  (`(,_start ,_end ,_program ,_delete (,stdout ,_stderr)32                             ,_display . ,_args)33                   (with-current-buffer stdout34                     (insert "<?xml version='1.0'?>35<replacements xml:space='preserve' incomplete_format='false'>36<replacement offset='4' length='0'> </replacement>37<replacement offset='10' length='0'> </replacement>38</replacements>39"))40                   0)))))41    (with-temp-buffer42      (let ((buffer-file-name "foo.cpp")43            (buffer-file-coding-system 'utf-8-with-signature-dos)44            (default-process-coding-system 'latin-1-unix))45        (insert "ä =ö;\nü= ß;\n")46        (goto-char (point-min))47        (end-of-line)48        (clang-format-buffer))49      (should (equal (buffer-string) "ä = ö;\nü = ß;\n"))50      (should (eolp))51      (should (equal (buffer-substring (point) (point-max))52                     "\nü = ß;\n")))53    (should-not (cdr call-process-args))54    (pcase-exhaustive call-process-args55      (`((,start ,end ,_program ,delete (,_stdout ,_stderr) ,display . ,args))56       (should-not start)57       (should-not end)58       (should-not delete)59       (should-not display)60       (should (equal args61                      '("--output-replacements-xml" "--assume-filename" "foo.cpp"62                        "--fallback-style" "none"63                        ;; Beginning of buffer, no byte-order mark.64                        "--offset" "0"65                        ;; We have two lines with 2×2 bytes for the umlauts,66                        ;; 1 byte for the line ending, and 3 bytes for the67                        ;; other ASCII characters each.68                        "--length" "16"69                        ;; Length of a single line (without line ending).70                        "--cursor" "7")))))))71 72(ert-deftest clang-format-buffer--process-encoding ()73  "Tests that text is sent to the clang-format process in the74right encoding."75  (cl-letf* ((hexdump (executable-find "hexdump"))76             (original-call-process-region77              (symbol-function 'call-process-region))78             (call-process-inputs nil)79             ;; We redirect the input to hexdump so that we have guaranteed80             ;; ASCII output.81             ((symbol-function 'call-process-region)82              (lambda (&rest args)83                (pcase-exhaustive args84                  (`(,start ,end ,_program ,_delete (,stdout ,_stderr)85                            ,_display . ,_args)86                   (with-current-buffer stdout87                     (insert "<?xml version='1.0'?>88<replacements xml:space='preserve' incomplete_format='false'>89</replacements>90"))91                   (let ((stdin (current-buffer)))92                     (with-temp-buffer93                       (prog194                           (let ((stdout (current-buffer)))95                             (with-current-buffer stdin96                               (funcall original-call-process-region97                                        start end hexdump nil stdout nil98                                        "-v" "-e" "/1 \"%02x \"")))99                         (push (buffer-string) call-process-inputs)))))))))100    (skip-unless hexdump)101    (with-temp-buffer102      (let ((buffer-file-name "foo.cpp")103            (buffer-file-coding-system 'utf-8-with-signature-dos)104            (default-process-coding-system 'latin-1-unix))105        (insert "ä\n")106        (clang-format-buffer))107      (should (equal (buffer-string) "ä\n"))108      (should (eobp)))109    (should (equal call-process-inputs '("c3 a4 0a ")))))110 111(ert-deftest clang-format-buffer--end-to-end ()112  "End-to-end test for ‘clang-format-buffer’.113Actually calls the clang-format binary."114  (skip-unless (file-executable-p clang-format-executable))115  (with-temp-buffer116    (let ((buffer-file-name "foo.cpp")117          (buffer-file-coding-system 'utf-8-with-signature-dos)118          (default-process-coding-system 'latin-1-unix))119      (insert "ä =ö;\nü= ß;\n")120      (goto-char (point-min))121      (end-of-line)122      (clang-format-buffer))123    (should (equal (buffer-string) "ä = ö;\nü = ß;\n"))124    (should (eolp))125    (should (equal (buffer-substring (point) (point-max))126                   "\nü = ß;\n"))))127 128;;; clang-format-test.el ends here129