From: Stefan Kangas Date: Wed, 10 Feb 2021 03:14:48 +0000 (+0100) Subject: Move semantic/format.el tests to follow our conventions X-Git-Tag: emacs-28.0.90~3838 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c07459fd10a9352b32d4de6e9145a419772bd70b;p=emacs.git Move semantic/format.el tests to follow our conventions * test/lisp/cedet/semantic-utest-fmt.el: Move from here... * test/lisp/cedet/semantic/format-tests.el: ...to here. (ert, ert-x): Require. (semantic-fmt-utest-file-list): Use ert-resource-file. * test/manual/cedet/tests/test-fmt.cpp: * test/manual/cedet/tests/test-fmt.el: Move from here... * test/lisp/cedet/semantic/format-resources/test-fmt.cpp: * test/lisp/cedet/semantic/format-resources/test-fmt.el: ...to here. --- diff --git a/test/lisp/cedet/semantic-utest-fmt.el b/test/lisp/cedet/semantic-utest-fmt.el deleted file mode 100644 index d6e5ce7a0fd..00000000000 --- a/test/lisp/cedet/semantic-utest-fmt.el +++ /dev/null @@ -1,127 +0,0 @@ -;;; cedet/semantic-utest-fmt.el --- Parsing / Formatting tests -*- lexical-binding:t -*- - -;;; Copyright (C) 2003-2004, 2007-2021 Free Software Foundation, Inc. - -;; Author: Eric M. Ludlam - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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. - -;; GNU Emacs 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 GNU Emacs. If not, see . - -;;; Commentary: -;; -;; Unit tests for the formatting feature. -;; -;; Using test code from the tests source directory, parse the source -;; file. After parsing, read the comments for each signature, and -;; make sure that the semantic-tag-format-* functions in question -;; created the desired output. - -(require 'semantic) -(require 'semantic/format) - -;;; Code: - -(defvar cedet-utest-directory - (let* ((C (file-name-directory (locate-library "cedet"))) - (D (expand-file-name "../../test/manual/cedet/" C))) - D) - "Location of test files for this test suite.") - -(defvar semantic-fmt-utest-file-list - '("tests/test-fmt.cpp" - ;; "tests/test-fmt.el" - add this when elisp is support by dflt in Emacs - ) - "List of files to run unit tests in.") - -(defvar semantic-fmt-utest-error-log-list nil - "Log errors during testing in this variable.") - -(ert-deftest semantic-fmt-utest () - "Visit all file entries, and run formatting test. -Files to visit are in `semantic-fmt-utest-file-list'." - (save-current-buffer - (semantic-mode 1) - (let ((fl semantic-fmt-utest-file-list) - (fname nil) - ) - - (dolist (FILE fl) - - (save-current-buffer - (setq fname (expand-file-name FILE cedet-utest-directory)) - - ;; Make sure we have the files we think we have. - (should (file-exists-p fname)) - ;; (error "Cannot find unit test file: %s" fname)) - - ;; Run the tests. - (let ((fb (find-buffer-visiting fname)) - (b (semantic-find-file-noselect fname)) - (tags nil)) - - (save-current-buffer - (set-buffer b) - (should (semantic-active-p)) - ;;(error "Cannot open %s for format tests" fname)) - - ;; This will force a reparse, removing any chance of semanticdb cache - ;; using stale data. - (semantic-clear-toplevel-cache) - ;; Force the reparse - (setq tags (semantic-fetch-tags)) - - (save-excursion - (while tags - (let* ((T (car tags)) - (start (semantic-tag-end T)) - (end (if (cdr tags) - (semantic-tag-start (car (cdr tags))) - (point-max))) - (TESTS nil) - ) - (goto-char start) - ;; Scan the space between tags for all test condition matches. - (while (re-search-forward "## \\([a-z-]+\\) \"\\([^\n\"]+\\)\"$" end t) - (push (cons (match-string 1) (match-string 2)) TESTS)) - (setq TESTS (nreverse TESTS)) - - (dolist (TST TESTS) - (let* ( ;; For each test, convert CAR into a semantic-format-tag* fcn - (sym (intern (concat "semantic-format-tag-" (car TST)))) - ;; Convert the desired result from a string syntax to a string. - (desired (cdr TST)) - ;; What does the fmt function do? - (actual (funcall sym T)) - ) - (when (not (string= desired actual)) - (should-not (list "Desired" desired - "Actual" actual - "Formatter" (car TST)))) - ))) - (setq tags (cdr tags))) - - )) - - ;; If it wasn't already in memory, whack it. - (when (and b (not fb)) - (kill-buffer b))) - )) - - ))) - - -(provide 'cedet/semantic/fmt-utest) - -;;; semantic-fmt-utest.el ends here diff --git a/test/lisp/cedet/semantic/format-resources/test-fmt.cpp b/test/lisp/cedet/semantic/format-resources/test-fmt.cpp new file mode 100644 index 00000000000..ab869c1ce00 --- /dev/null +++ b/test/lisp/cedet/semantic/format-resources/test-fmt.cpp @@ -0,0 +1,108 @@ +/** test-fmt.cpp --- Signatures, and format answers for testing + * + * Copyright (C) 2012, 2016, 2019-2021 Free Software Foundation, Inc. + * + * Author: Eric M. Ludlam + * + * This file is part of GNU Emacs. + * + * GNU Emacs 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. + * + * GNU Emacs 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 GNU Emacs. If not, see . + */ + +/* + * About semantic-fmt-utest : + * + * These tests validate two features: + * 1) The C++ parser can parse the different signatures + * 2) The semantic-tag-format-* functions can recreate them. + * + */ + +void basic_fcn() { } +/* + * ## name "basic_fcn" + * ## abbreviate "basic_fcn()" + * ## prototype "void basic_fcn ()" + * ## uml-prototype "basic_fcn () : void" + */ + +int twoargs_fcn(int a, char b) { } +/* + * ## name "twoargs_fcn" + * ## abbreviate "twoargs_fcn()" + * ## prototype "int twoargs_fcn (int a,char b)" + * ## uml-prototype "twoargs_fcn (a : int,b : char) : int" + */ + +struct moose { + int field1; + char field2; +}; +/* + * ## name "moose" + * ## abbreviate "moose{}" + * ## prototype "struct moose {}" + * ## uml-prototype "moose{} : struct" + */ + +struct moose struct_fcn ( struct moose in, char *out); +/* + * ## name "struct_fcn" + * ## abbreviate "struct_fcn()" + * ## prototype "struct moose struct_fcn (struct moose in,char* out)" + * ## uml-prototype "struct_fcn (in : struct moose,out : char*) : struct moose" + */ + +struct moose *var_one = NULL; +/* + * ## name "var_one" + * ## summarize "Variables: struct moose* var_one[=NULL]" + * ## prototype "struct moose* var_one[=NULL]" + * ## uml-prototype "var_one : struct moose*" + */ + +const int var_two = 1; +/* + * ## name "var_two" + * ## summarize "Variables: const int var_two[=1]" + * ## prototype "const int var_two[=1]" + * ## uml-prototype "var_two : int" + */ + +namespace NS { + enum TestEnum {a,b}; +} +/* + * ## name "NS" + * ## summarize "Types: namespace NS {}" + * ## prototype "namespace NS {}" + * ## uml-prototype "NS{} : namespace" + */ + + +// void func_ns_arg(NS::TestEnum v = NS::a); <<--- TODO - bring FIX from CEDET on SF +/* + * # # name "func_ns_arg" + * # # summarize "Functions: void func_ns_arg (NS::TestEnum v[=NS::a])" + * # # prototype "void func_ns_arg (NS::TestEnum v[=NS::a])" + * # # uml-prototype "func_ns_arg (v : NS::TestEnum) : void" + */ + +//int const var_three = 1; +/* + * # # name "var_three" + * # # summarize "Variables: int const var_three" <-- this fails + * # # prototype "int const var_three" <-- this fails + * # # uml-prototype "var_three : int" + */ diff --git a/test/lisp/cedet/semantic/format-resources/test-fmt.el b/test/lisp/cedet/semantic/format-resources/test-fmt.el new file mode 100644 index 00000000000..941aaae8595 --- /dev/null +++ b/test/lisp/cedet/semantic/format-resources/test-fmt.el @@ -0,0 +1,65 @@ +;;; test-fmt.el --- test semantic tag formatting -*- lexical-binding: t -*- + +;;; Copyright (C) 2012, 2019-2021 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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. + +;; GNU Emacs 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 GNU Emacs. If not, see . + +;;; Commentary: +;; +;; + +;;; Code: +(require 'semantic) +;; +;; ## name "semantic" +;; ## abbreviate "semantic<>" +;; ## summarize "Requires: semantic" + +(defun test-fmt-1 (a) + "Function with 1 arg.") +;; +;; ## name "test-fmt-1" +;; ## abbreviate "(test-fmt-1)" +;; ## summarize "Defuns: (test-fmt-1 a)" +;; ## short-doc "Function with 1 arg." +;; ## uml-prototype "(test-fmt-1 a)" <-- That is probably wrong. + +(defvar test-fmt-var nil + "Variable test.") +;; +;; ## name "test-fmt-var" +;; ## abbreviate "test-fmt-var" +;; ## summarize "Variables: test-fmt-var" +;; ## short-doc "Variable test." +;; ## uml-prototype "test-fmt-var" + +(defclass test-fmt-class () + ((slot1 :initarg :slot1)) + "Class for testing.") +;; +;; ## name "test-fmt-class" +;; ## abbreviate "test-fmt-class{}" +;; ## summarize "Types: class test-fmt-class {}" +;; ## short-doc "Class for testing." +;; ## uml-prototype "class test-fmt-class {}" + + + +(provide 'test-fmt) + +;;; test-fmt.el ends here diff --git a/test/lisp/cedet/semantic/format-tests.el b/test/lisp/cedet/semantic/format-tests.el new file mode 100644 index 00000000000..a9eb4489d59 --- /dev/null +++ b/test/lisp/cedet/semantic/format-tests.el @@ -0,0 +1,111 @@ +;;; semantic/format-tests.el --- Parsing / Formatting tests -*- lexical-binding:t -*- + +;;; Copyright (C) 2003-2004, 2007-2021 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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. + +;; GNU Emacs 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 GNU Emacs. If not, see . + +;;; Commentary: +;; +;; Unit tests for the formatting feature. +;; +;; Using test code from the tests source directory, parse the source +;; file. After parsing, read the comments for each signature, and +;; make sure that the semantic-tag-format-* functions in question +;; created the desired output. + +;;; Code: + +(require 'ert) +(require 'ert-x) +(require 'semantic/format) + +(defvar semantic-fmt-utest-file-list + (list (ert-resource-file "test-fmt.cpp") + ;; "tests/test-fmt.el" - add this when elisp is support by dflt in Emacs + ) + "List of files to run unit tests in.") + +(defvar semantic-fmt-utest-error-log-list nil + "Log errors during testing in this variable.") + +(ert-deftest semantic-fmt-utest () + "Visit all file entries, and run formatting test. +Files to visit are in `semantic-fmt-utest-file-list'." + (save-current-buffer + (semantic-mode 1) + (let ((fl semantic-fmt-utest-file-list)) + (dolist (fname fl) + (save-current-buffer + (let ((fb (find-buffer-visiting fname)) + (b (semantic-find-file-noselect fname)) + (tags nil)) + + (save-current-buffer + (set-buffer b) + (should (semantic-active-p)) + ;;(error "Cannot open %s for format tests" fname)) + + ;; This will force a reparse, removing any chance of semanticdb cache + ;; using stale data. + (semantic-clear-toplevel-cache) + ;; Force the reparse + (setq tags (semantic-fetch-tags)) + + (save-excursion + (while tags + (let* ((T (car tags)) + (start (semantic-tag-end T)) + (end (if (cdr tags) + (semantic-tag-start (car (cdr tags))) + (point-max))) + (TESTS nil) + ) + (goto-char start) + ;; Scan the space between tags for all test condition matches. + (while (re-search-forward "## \\([a-z-]+\\) \"\\([^\n\"]+\\)\"$" end t) + (push (cons (match-string 1) (match-string 2)) TESTS)) + (setq TESTS (nreverse TESTS)) + + (dolist (TST TESTS) + (let* ( ;; For each test, convert CAR into a semantic-format-tag* fcn + (sym (intern (concat "semantic-format-tag-" (car TST)))) + ;; Convert the desired result from a string syntax to a string. + (desired (cdr TST)) + ;; What does the fmt function do? + (actual (funcall sym T)) + ) + (when (not (string= desired actual)) + (should-not (list "Desired" desired + "Actual" actual + "Formatter" (car TST)))) + ))) + (setq tags (cdr tags))) + + )) + + ;; If it wasn't already in memory, whack it. + (when (and b (not fb)) + (kill-buffer b))) + )) + + ))) + + +(provide 'format-tests) + +;;; format-tests.el ends here diff --git a/test/manual/cedet/tests/test-fmt.cpp b/test/manual/cedet/tests/test-fmt.cpp deleted file mode 100644 index ab869c1ce00..00000000000 --- a/test/manual/cedet/tests/test-fmt.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/** test-fmt.cpp --- Signatures, and format answers for testing - * - * Copyright (C) 2012, 2016, 2019-2021 Free Software Foundation, Inc. - * - * Author: Eric M. Ludlam - * - * This file is part of GNU Emacs. - * - * GNU Emacs 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. - * - * GNU Emacs 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 GNU Emacs. If not, see . - */ - -/* - * About semantic-fmt-utest : - * - * These tests validate two features: - * 1) The C++ parser can parse the different signatures - * 2) The semantic-tag-format-* functions can recreate them. - * - */ - -void basic_fcn() { } -/* - * ## name "basic_fcn" - * ## abbreviate "basic_fcn()" - * ## prototype "void basic_fcn ()" - * ## uml-prototype "basic_fcn () : void" - */ - -int twoargs_fcn(int a, char b) { } -/* - * ## name "twoargs_fcn" - * ## abbreviate "twoargs_fcn()" - * ## prototype "int twoargs_fcn (int a,char b)" - * ## uml-prototype "twoargs_fcn (a : int,b : char) : int" - */ - -struct moose { - int field1; - char field2; -}; -/* - * ## name "moose" - * ## abbreviate "moose{}" - * ## prototype "struct moose {}" - * ## uml-prototype "moose{} : struct" - */ - -struct moose struct_fcn ( struct moose in, char *out); -/* - * ## name "struct_fcn" - * ## abbreviate "struct_fcn()" - * ## prototype "struct moose struct_fcn (struct moose in,char* out)" - * ## uml-prototype "struct_fcn (in : struct moose,out : char*) : struct moose" - */ - -struct moose *var_one = NULL; -/* - * ## name "var_one" - * ## summarize "Variables: struct moose* var_one[=NULL]" - * ## prototype "struct moose* var_one[=NULL]" - * ## uml-prototype "var_one : struct moose*" - */ - -const int var_two = 1; -/* - * ## name "var_two" - * ## summarize "Variables: const int var_two[=1]" - * ## prototype "const int var_two[=1]" - * ## uml-prototype "var_two : int" - */ - -namespace NS { - enum TestEnum {a,b}; -} -/* - * ## name "NS" - * ## summarize "Types: namespace NS {}" - * ## prototype "namespace NS {}" - * ## uml-prototype "NS{} : namespace" - */ - - -// void func_ns_arg(NS::TestEnum v = NS::a); <<--- TODO - bring FIX from CEDET on SF -/* - * # # name "func_ns_arg" - * # # summarize "Functions: void func_ns_arg (NS::TestEnum v[=NS::a])" - * # # prototype "void func_ns_arg (NS::TestEnum v[=NS::a])" - * # # uml-prototype "func_ns_arg (v : NS::TestEnum) : void" - */ - -//int const var_three = 1; -/* - * # # name "var_three" - * # # summarize "Variables: int const var_three" <-- this fails - * # # prototype "int const var_three" <-- this fails - * # # uml-prototype "var_three : int" - */ diff --git a/test/manual/cedet/tests/test-fmt.el b/test/manual/cedet/tests/test-fmt.el deleted file mode 100644 index 122571323b2..00000000000 --- a/test/manual/cedet/tests/test-fmt.el +++ /dev/null @@ -1,65 +0,0 @@ -;;; test-fmt.el --- test semantic tag formatting - -;;; Copyright (C) 2012, 2019-2021 Free Software Foundation, Inc. - -;; Author: Eric M. Ludlam - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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. - -;; GNU Emacs 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 GNU Emacs. If not, see . - -;;; Commentary: -;; -;; - -;;; Code: -(require 'semantic) -;; -;; ## name "semantic" -;; ## abbreviate "semantic<>" -;; ## summarize "Requires: semantic" - -(defun test-fmt-1 (a) - "Function with 1 arg.") -;; -;; ## name "test-fmt-1" -;; ## abbreviate "(test-fmt-1)" -;; ## summarize "Defuns: (test-fmt-1 a)" -;; ## short-doc "Function with 1 arg." -;; ## uml-prototype "(test-fmt-1 a)" <-- That is probably wrong. - -(defvar test-fmt-var nil - "Variable test.") -;; -;; ## name "test-fmt-var" -;; ## abbreviate "test-fmt-var" -;; ## summarize "Variables: test-fmt-var" -;; ## short-doc "Variable test." -;; ## uml-prototype "test-fmt-var" - -(defclass test-fmt-class () - ((slot1 :initarg :slot1)) - "Class for testing.") -;; -;; ## name "test-fmt-class" -;; ## abbreviate "test-fmt-class{}" -;; ## summarize "Types: class test-fmt-class {}" -;; ## short-doc "Class for testing." -;; ## uml-prototype "class test-fmt-class {}" - - - -(provide 'test-fmt) - -;;; test-fmt.el ends here