Запускайте тесты с несколькими версиями и собирайте возвращаемые значения в Makefile - PullRequest
0 голосов
/ 21 ноября 2018

Я разрабатываю пакет Emacs, который запускается с Emacs-22 до Emacs26, и я хотел бы подтвердить, что тест проходит с этими Emacs.

Однако, поскольку каждый журнал длинный, я бы хотелсобрать возвращаемое значение каждого теста и ясно показать его в конце.

Как я могу написать это в Makefile?Список тестируемых Emacs был получен в ALL_EMACS_VERS в виде массива (22,1 23,4 24,5 25,3 26,1), и теперь я запускаю тест следующим образом.

EMACS          ?= emacs
LOAD_PATH      := -L $(dir $(lastword $(MAKEFILE_LIST)))
BATCH          := $(EMACS) -Q --batch $(LOAD_PATH)
ALL_EMACS_VERS := $(shell compgen -c emacs- | grep -oP '(?<=emacs-)([0-9]|\.)+' | sort | uniq)

test:
    $(BATCH) -l srt-tests.el -f srt-run-tests

debug-localtest:
    for ver in $(ALL_EMACS_VERS); do \
        echo "===  test by emacs-$${ver}...  ==="; \
        EMACS=emacs-$${ver} make test; \
    done

Я хотел бы получить информациюна какой версии тест пройден или не пройден, и выведите его следующим образом.

===  test by emacs-22.1  ===
emacs-22.1 -Q --batch -L ./ -l srt-tests.el -f srt-run-tests

Running 30 tests...
GNU Emacs 22.1.1 (mac-apple-darwin)
 of 2017-10-07 on osx339.sd.apple.com
[PASSED]  simple:equal
[PASSED]  simple:=
...

===== Run 30 Tests, 29 Expected, 1 Failed, 0 Errored =====

make[1]: Leaving directory '/Users/conao/Develop/git/.dotfiles/.emacs.d/local/26.1/site-lisp/srt.el'


===  test by emacs-23.4  ===
emacs-23.4 -Q --batch -L ./ -l srt-tests.el -f srt-run-tests

Running 30 tests...
GNU Emacs 23.4.1 (x86_64-apple-darwin, NS apple-appkit-1038.36)
 of 2012-01-29 on bob.porkrind.org
[PASSED]  simple:equal
[PASSED]  simple:=
...

===== Run 30 Tests, 29 Expected, 1 Failed, 0 Errored =====

make[1]: Leaving directory '/Users/conao/Develop/git/.dotfiles/.emacs.d/local/26.1/site-lisp/srt.el'

...
(Emacs 24.5, 25.3, 26.1)
...

===  localtest completed!!  ===

*FAILED* Emacs-22.1
*FAILED* Emacs-23.4
[PASSED] Emacs-24.5
*FAILED* Emacs-25.3
[PASSED] Emacs-26.1

1 Ответ

0 голосов
/ 23 ноября 2018

Проблема состоит из двух частей.Первое - дать желаемый результат для одного теста.Если (как следует из названия вашего Вопроса) это зависит от возвращаемого значения процесса, этот подход будет работать:

single-test:
    (some-command && echo PASS) || echo FAIL

В вашем случае это становится:

ARGS := -Q --batch $(LOAD_PATH) -l srt-tests.el -f srt-run-tests

test-emacs-22.1:
    (emacs-22.1 $(ARGS) && echo [PASS] emacs-22.1) || echo *FAIL* emacs-22.1

Вторая часть - перебрать список версий.Я предлагаю использовать шаблонное правило:

ALL_EMACS_VERS := 22.1 23.4 24.5 25.3 26.1
TESTS := $(addprefix test-emacs-, $(ALL_EMACS_VERS))

all-tests: $(TESTS)

test-%:
    ($* $(ARGS) && echo [PASS] $*) || echo *FAIL* $*

Наконец, если эти процессы производят вывод, который вы хотите подавить:

test-%:
    ($* $(ARGS) > /dev/null && echo [PASS] $*) || echo *FAIL* $*

РЕДАКТИРОВАТЬ: Чтобы напечатать всеРезультаты после всех выходных данных скрипта, самый простой подход - сохранить их в файле, который называется, например, «результаты»:

all-tests: $(TESTS)
    @cat results
    @rm results

test-%:
    @($* $(ARGS) && echo [PASS] $* >> results) || echo *FAIL* $* >> results
...