From: David Engster Date: Sat, 27 Oct 2012 21:21:51 +0000 (+0200) Subject: Added new file to test completion on STL classes and namespace. X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a3da4e890b5a68d1a73e86f815bcb62abef31c53;p=emacs.git Added new file to test completion on STL classes and namespace. * tests/cedet/semantic/stltest.el: New file to test completion on STL classes and namespace. --- diff --git a/test/manual/cedet/cedet/semantic/stltest.el b/test/manual/cedet/cedet/semantic/stltest.el new file mode 100644 index 00000000000..62153d9afa6 --- /dev/null +++ b/test/manual/cedet/cedet/semantic/stltest.el @@ -0,0 +1,103 @@ +;;; semantic-stltest --- Test Semantic's C++ parser on the STL + +;;; Copyright (C) 2012 David Engster + +;; Author: David Engster + +;; This file is not part of GNU Emacs. + +;; Semantic 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: +;; +;; Test completions on STL classes and namespaces. +;; This test is not run by default since it requires a full STL installation. +;; It can also be used very well to benchmark the C++ parser. + +(defvar semantic-stltest-vector-buf + "#include \nint main(void) { std::vector foo; foo.TESTHERE \n}") +(defvar semantic-stltest-vector-members + '("begin" "end" "rbegin" "rend" "size" "max_size" "resize" "capacity" + "empty" "reserve" "at" "front" "back" "assign" "push_back" "pop_back" + "insert" "erase" "swap" "clear" "iterator" "const_iterator" "reverse_iterator" + "const_reverse_iterator" "reference" "const_reference" "size_type" + "value_type" "difference_type" "allocator_type" "pointer" "const_pointer")) + +(defvar semantic-stltest-string-buf + "#include \nint main(void) { std::string foo; foo.TESTHERE \n}") +(defvar semantic-stltest-string-members + '("allocator_type" "append" "assign" "at" "begin" "c_str" "capacity" "clear" + "compare" "const_iterator" "const_pointer" "const_reference" "const_reverse_iterator" + "copy" "data" "difference_type" "empty" "end" "erase" "find" "find_first_not_of" + "find_first_of" "find_last_not_of" "find_last_of" "get_allocator" "insert" + "iterator" "length" "max_size" "npos" "pointer" "push_back" "rbegin" "reference" + "rend" "replace" "reserve" "resize" "reverse_iterator" "size" "size_type" "substr" + "swap" "traits_type" "value_type")) + +(defvar semantic-stltest-map-buf + "#include \n#include \nint main(void) { std::map foo; foo.TESTHERE \n}") +(defvar semantic-stltest-map-members + '("allocator_type" "at" "begin" "clear" "const_iterator" "const_pointer" + "const_reference" "const_reverse_iterator" "count" "difference_type" "empty" + "end" "equal_range" "erase" "find" "get_allocator" "insert" "iterator" "key_comp" + "key_compare" "key_type" "lower_bound" "mapped_type" "max_size" "pointer" "rbegin" + "reference" "rend" "reverse_iterator" "size" "size_type" "swap" "upper_bound" "value_comp" + "value_compare" "value_type")) + +(defvar semantic-stltest-map-buf + "#include \n#include \nint main(void) { std::map foo; foo.TESTHERE \n}") +(defvar semantic-stltest-map-members + '("allocator_type" "at" "begin" "clear" "const_iterator" "const_pointer" + "const_reference" "const_reverse_iterator" "count" "difference_type" "empty" + "end" "equal_range" "erase" "find" "get_allocator" "insert" "iterator" "key_comp" + "key_compare" "key_type" "lower_bound" "mapped_type" "max_size" "pointer" "rbegin" + "reference" "rend" "reverse_iterator" "size" "size_type" "swap" "upper_bound" "value_comp" + "value_compare" "value_type")) + +(defvar semantic-stltest-iostream-buf + "#include \nint main(void) { std::TESTHERE \n}") +(defvar semantic-stltest-iostream-members + '("ios_base" "ios" "istream" "ostream" "iostream" "ifstream" "ofstream" "fstream" "istringstream" + "ostringstream" "stringstream" "streambuf" "filebuf" "stringbuf" "cin" "cout" "cerr" "clog" "fpos" + "streamoff" "streampos" "streamsize" "boolalpha" "dec" "endl" "ends" "fixed" "flush" "hex" "internal" + "left" "noboolalpha" "noshowbase" "noshowpoint" "noshowpos" "noskipws" "nounitbuf" "nouppercase" "oct" + "right" "scientific" "showbase" "showpoint" "showpos" "skipws" "unitbuf" "uppercase" "ws")) + + +(defun semantic-stltest (class) + "Test completions on CLASS." + (semantic-mode 1) + (with-current-buffer + (find-file-noselect "/tmp/stltest.cpp") + (erase-buffer) + (insert (symbol-value (intern + (concat "semantic-stltest-" class "-buf")))) + (goto-char (point-min)) + (search-forward "TESTHERE") + (delete-region (match-beginning 0) (match-end 0)) + (let* ((out (or (semantic-analyze-possible-completions (point)) + (error "%s: Did not get any tags." class))) + (names (mapcar 'semantic-tag-name out))) + (dolist (cur (symbol-value (intern + (concat "semantic-stltest-" class "-members")))) + (unless (member cur names) + (error "Did not find %s in %s class." cur class))))) + (message "STL %s PASSED." class)) + +(setq-default semanticdb-new-database-class 'semanticdb-project-database) +(semantic-stltest "vector") +(semantic-stltest "string") +(semantic-stltest "map") +;; I know, not a class... +(semantic-stltest "iostream")