Mercurial > hg
annotate contrib/hg-test-mode.el @ 44249:8b1dd3f42396 stable
heptapod-ci: add a basic file to be able to run tests with heptapod
Having this yaml file somewhere in the main mercurial repository makes it
trivial for contributors using heptapod to run CI on their in-progress work.
There are alot of different combination (python2/python3 pure/cext/rust/pypy)
to be tested and making sure all of them are covered manually is cumbersome.
Automatic CI runnig on draft really helps in that matters. We start small bu
later changesets will add more step testing more of the variants.
The series is targetted on stable to make it available to the widest amount of contribution possible.
The definition of the docker files used for this are available here:
https://dev.heptapod.net/octobus/ci-dockerfiles
Differential Revision: https://phab.mercurial-scm.org/D8011
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 25 Jan 2020 17:57:40 +0100 |
parents | 19979b8b87e2 |
children | d4ba4d51f85f |
rev | line source |
---|---|
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 ;; hg-test-mode.el - Major mode for editing Mercurial tests |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 ;; Copyright 2014 Matt Mackall <mpm@selenic.com> |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 ;; "I have no idea what I'm doing" |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
6 ;; This software may be used and distributed according to the terms of the |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 ;; GNU General Public License version 2 or any later version. |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
8 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
9 ;; To enable, add something like the following to your .emacs: |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
10 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
11 ;; (if (file-exists-p "~/hg/contrib/hg-test-mode.el") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
12 ;; (load "~/hg/contrib/hg-test-mode.el")) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
13 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
14 (defvar hg-test-mode-hook nil) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
15 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
16 (defvar hg-test-mode-map |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
17 (let ((map (make-keymap))) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
18 (define-key map "\C-j" 'newline-and-indent) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
19 map) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
20 "Keymap for hg test major mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
21 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
22 (add-to-list 'auto-mode-alist '("\\.t\\'" . hg-test-mode)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
23 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
24 (defconst hg-test-font-lock-keywords-1 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
25 (list |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
26 '("^ \\(\\$\\|>>>\\) " 1 font-lock-builtin-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
27 '("^ \\(>\\|\\.\\.\\.\\) " 1 font-lock-constant-face) |
22125
7fce964be27d
hg-test-mode: make exit code highlight work again
Matt Mackall <mpm@selenic.com>
parents:
22109
diff
changeset
|
28 '("^ \\([[][0-9]+[]]\\)$" 1 font-lock-warning-face) |
22109
feab93a24e81
hg-test-mode: don't highlight variables in output
Matt Mackall <mpm@selenic.com>
parents:
22092
diff
changeset
|
29 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)*\\)$" 1 font-lock-string-face) |
22092
6e5ff8e26af6
hg-test-mode: colorize HGFOO and TESTFOO environment variables
Matt Mackall <mpm@selenic.com>
parents:
22081
diff
changeset
|
30 '("\\$?\\(HG\\|TEST\\)\\w+=?" . font-lock-variable-name-face) |
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
31 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)+\\)$" 2 font-lock-type-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
32 '("^#.*" . font-lock-preprocessor-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
33 '("^\\([^ ].*\\)$" 1 font-lock-comment-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 ) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
35 "Minimal highlighting expressions for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
36 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
37 (defvar hg-test-font-lock-keywords hg-test-font-lock-keywords-1 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
38 "Default highlighting expressions for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
40 (defvar hg-test-mode-syntax-table |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
41 (let ((st (make-syntax-table))) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 (modify-syntax-entry ?\" "w" st) ;; disable standard quoting |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 st) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 "Syntax table for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
46 (defun hg-test-mode () |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
47 (interactive) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
48 (kill-all-local-variables) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
49 (use-local-map hg-test-mode-map) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
50 (set-syntax-table hg-test-mode-syntax-table) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
51 (set (make-local-variable 'font-lock-defaults) '(hg-test-font-lock-keywords)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
52 (setq major-mode 'hg-test-mode) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
53 (setq mode-name "hg-test") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
54 (run-hooks 'hg-test-mode-hook)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
55 |
41785
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
56 (with-eval-after-load "compile" |
41786
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
57 ;; Link to Python sources in tracebacks in .t failures. |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
58 (add-to-list 'compilation-error-regexp-alist-alist |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
59 '(hg-test-output-python-tb |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
60 "^\\+ +File ['\"]\\([^'\"]+\\)['\"], line \\([0-9]+\\)," 1 2)) |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
61 (add-to-list 'compilation-error-regexp-alist 'hg-test-output-python-tb) |
41785
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
62 ;; Link to source files in test-check-code.t violations. |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
63 (add-to-list 'compilation-error-regexp-alist-alist |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
64 '(hg-test-check-code-output |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
65 "\\+ \\([^:\n]+\\):\\([0-9]+\\):$" 1 2)) |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
66 (add-to-list 'compilation-error-regexp-alist 'hg-test-check-code-output)) |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
67 |
41788
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
68 (defun hg-test-mode--test-one-error-line-regexp (test) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
69 (erase-buffer) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
70 (setq compilation-locs (make-hash-table)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
71 (insert (car test)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
72 (compilation-parse-errors (point-min) (point-max)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
73 (let ((msg (get-text-property 1 'compilation-message))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
74 (should msg) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
75 (let ((loc (compilation--message->loc msg)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
76 (line (nth 1 test)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
77 (file (nth 2 test))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
78 (should (equal (compilation--loc->line loc) line)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
79 (should (equal (caar (compilation--loc->file-struct loc)) file))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
80 msg)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
81 |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
82 (require 'ert) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
83 (ert-deftest hg-test-mode--compilation-mode-support () |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
84 "Test hg-specific compilation-mode regular expressions" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
85 (require 'compile) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
86 (with-temp-buffer |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
87 (font-lock-mode -1) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
88 (mapc 'hg-test-mode--test-one-error-line-regexp |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
89 '( |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
90 ("+ contrib/debugshell.py:37:" 37 "contrib/debugshell.py") |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
91 ("+ File \"/tmp/hg/mercurial/commands.py\", line 3115, in help_" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
92 3115 "/tmp/hg/mercurial/commands.py") |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
93 ("+ File \"mercurial/dispatch.py\", line 225, in dispatch" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
94 225 "mercurial/dispatch.py"))))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
95 |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
96 |
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
97 (provide 'hg-test-mode) |