diff options
Diffstat (limited to 'test/lisp/cedet/semantic')
-rw-r--r-- | test/lisp/cedet/semantic/bovine/gcc-tests.el | 131 | ||||
-rw-r--r-- | test/lisp/cedet/semantic/format-resources/test-fmt.cpp | 108 | ||||
-rw-r--r-- | test/lisp/cedet/semantic/format-resources/test-fmt.el | 65 | ||||
-rw-r--r-- | test/lisp/cedet/semantic/format-tests.el | 95 | ||||
-rw-r--r-- | test/lisp/cedet/semantic/fw-tests.el | 45 |
5 files changed, 444 insertions, 0 deletions
diff --git a/test/lisp/cedet/semantic/bovine/gcc-tests.el b/test/lisp/cedet/semantic/bovine/gcc-tests.el new file mode 100644 index 00000000000..041773a0c80 --- /dev/null +++ b/test/lisp/cedet/semantic/bovine/gcc-tests.el @@ -0,0 +1,131 @@ +;;; gcc-tests.el --- Tests for semantic/bovine/gcc.el -*- lexical-binding:t -*- + +;; Copyright (C) 2003-2022 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam <zappo@gnu.org> + +;; 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 <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Moved here from test/manual/cedet/semantic-tests.el + +;;; Code: + +(require 'ert) +(require 'ert-x) +(require 'semantic/bovine/gcc) + +;;; From bovine-gcc: + +;; Example output of "gcc -v" +(defvar semantic-gcc-test-strings + '(;; My old box: + "Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs +Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux +Thread model: posix +gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)" + ;; Alex Ott: + "Using built-in specs. +Target: i486-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.1-9ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu +Thread model: posix +gcc version 4.3.1 (Ubuntu 4.3.1-9ubuntu1)" + ;; My debian box: + "Using built-in specs. +Target: x86_64-unknown-linux-gnu +Configured with: ../../../sources/gcc/configure --prefix=/usr/local/glibc-2.3.6/x86_64/apps/gcc-4.2.3 --with-gmp=/usr/local/gcc/gmp --with-mpfr=/usr/local/gcc/mpfr --enable-languages=c,c++,fortran --with-as=/usr/local/glibc-2.3.6/x86_64/apps/gcc-4.2.3/bin/as --with-ld=/usr/local/glibc-2.3.6/x86_64/apps/gcc-4.2.3/bin/ld --disable-multilib +Thread model: posix +gcc version 4.2.3" + ;; My mac: + "Using built-in specs. +Target: i686-apple-darwin8 +Configured with: /private/var/tmp/gcc/gcc-5341.obj~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=powerpc-apple-darwin8 --with-arch=pentium-m --with-tune=prescott --program-prefix= --host=i686-apple-darwin8 --target=i686-apple-darwin8 +Thread model: posix +gcc version 4.0.1 (Apple Computer, Inc. build 5341)" + ;; Ubuntu Intrepid + "Using built-in specs. +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.2-1ubuntu12' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12)" + ;; Red Hat EL4 + "Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs +Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux +Thread model: posix +gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)" + ;; Red Hat EL5 + "Using built-in specs. +Target: x86_64-redhat-linux +Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux +Thread model: posix +gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)" + ;; David Engster's german gcc on ubuntu 4.3 + "Es werden eingebaute Spezifikationen verwendet. +Ziel: i486-linux-gnu +Konfiguriert mit: ../src/configure -v --with-pkgversion='Ubuntu 4.3.2-1ubuntu12' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu +Thread-Modell: posix +gcc-Version 4.3.2 (Ubuntu 4.3.2-1ubuntu12)" + ;; Damien Deville bsd + "Using built-in specs. +Target: i386-undermydesk-freebsd +Configured with: FreeBSD/i386 system compiler +Thread model: posix +gcc version 4.2.1 20070719 [FreeBSD]" + ) + "A bunch of sample gcc -v outputs from different machines.") + +(defvar semantic-gcc-test-strings-fail + '(;; A really old solaris box I found + "Reading specs from /usr/local/gcc-2.95.2/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/specs +gcc version 2.95.2 19991024 (release)" + ) + "A bunch of sample gcc -v outputs that fail to provide the info we want.") + +(defun semantic-gcc-test-output-parser () + "Test the output parser against some collected strings." + (dolist (S semantic-gcc-test-strings) + (let* ((fields (semantic-gcc-fields S)) + (v (cdr (assoc 'version fields))) + (h (or (cdr (assoc 'target fields)) + (cdr (assoc '--target fields)) + (cdr (assoc '--host fields)))) + (p (cdr (assoc '--prefix fields)))) + ;; No longer test for prefixes. + (when (not (and v h)) + (let ((strs (split-string S "\n"))) + (error "Test failed on %S\nV H P:\n%S %S %S" (car strs) v h p))))) + (dolist (S semantic-gcc-test-strings-fail) + (let* ((fields (semantic-gcc-fields S)) + (v (cdr (assoc 'version fields))) + (h (or (cdr (assoc '--host fields)) + (cdr (assoc 'target fields)))) + (p (cdr (assoc '--prefix fields))) + ) + (when (and v h p) + (error "Negative test failed on %S" S))))) + +(ert-deftest semantic-gcc-test-output-parser () + (semantic-gcc-test-output-parser)) + +(ert-deftest semantic-gcc-test-output-parser-this-machine () + "Test the output parser against the machine currently running Emacs." + (skip-unless (and (executable-find "gcc") + (not (ert-gcc-is-clang-p)))) + (let ((semantic-gcc-test-strings (list (semantic-gcc-query "gcc" "-v")))) + (semantic-gcc-test-output-parser))) + +;;; gcc-tests.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..39843a22194 --- /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-2022 Free Software Foundation, Inc. + * + * Author: Eric M. Ludlam <zappo@gnu.org> + * + * 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 <https://www.gnu.org/licenses/>. + */ + +/* + * 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..5fcb8ef3c36 --- /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-2022 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam <zappo@gnu.org> + +;; 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 <https://www.gnu.org/licenses/>. + +;;; 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..f698d865c3c --- /dev/null +++ b/test/lisp/cedet/semantic/format-tests.el @@ -0,0 +1,95 @@ +;;; semantic/format-tests.el --- Parsing / Formatting tests -*- lexical-binding:t -*- + +;; Copyright (C) 2003-2022 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam <zappo@gnu.org> + +;; 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 <https://www.gnu.org/licenses/>. + +;;; 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.") + +(ert-deftest semantic-fmt-utest () + "Visit all file entries, and run formatting test. " + (save-current-buffer + (semantic-mode 1) + (dolist (fname semantic-fmt-utest-file-list) + (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/lisp/cedet/semantic/fw-tests.el b/test/lisp/cedet/semantic/fw-tests.el new file mode 100644 index 00000000000..c8bfffb3cf5 --- /dev/null +++ b/test/lisp/cedet/semantic/fw-tests.el @@ -0,0 +1,45 @@ +;;; fw-tests.el --- Tests for semantic/fw.el -*- lexical-binding:t -*- + +;; Copyright (C) 2003-2022 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam <zappo@gnu.org> + +;; 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 <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Moved here from test/manual/cedet/semantic-tests.el + +;;; Code: + +(require 'ert) +(require 'semantic/fw) + +;;; From semantic-fw: + +(ert-deftest semantic-test-data-cache () + "Test the data cache." + (let ((data '(a b c))) + (with-current-buffer (get-buffer-create " *semantic-test-data-cache*") + (erase-buffer) + (insert "The Moose is Loose") + (goto-char (point-min)) + (semantic-cache-data-to-buffer (current-buffer) (point) (+ (point) 5) + data 'moose 'exit-cache-zone) + ;; retrieve cached data + (should (equal (semantic-get-cache-data 'moose) data))))) + +;;; fw-tests.el ends here |