From: Stefan Kangas Date: Wed, 10 Feb 2021 11:44:07 +0000 (+0100) Subject: Move cedet test resource files to follow our conventions X-Git-Tag: emacs-28.0.90~3833 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4786353b2abc756d3fd6bda016859b40ba9aca8a;p=emacs.git Move cedet test resource files to follow our conventions * test/lisp/cedet/semantic-utest-ia.el (ert, ert-x): Require. (cedet-utest-directory, semantic-utest-test-directory): Remove variables. (semantic-utest-ia-doublens.cpp, semantic-utest-ia-subclass.cpp) (semantic-utest-ia-typedefs.cpp, semantic-utest-ia-struct.cpp) (semantic-utest-ia-templates.cpp, semantic-utest-ia-using.cpp) (semantic-utest-ia-nsp.cpp, semantic-utest-ia-localvars.cpp) (semantic-utest-ia-namespace.cpp) (semantic-utest-ia-sppcomplete.c, semantic-utest-ia-varnames.c) (semantic-utest-ia-javacomp.java) (semantic-utest-ia-varnames.java, semantic-utest-ia-wisent.wy) (semantic-utest-ia-texi, semantic-utest-ia-make) (semantic-utest-ia-srecoder): Use 'ert-resource-file'. Don't check if file exists; we can assume that it does. * test/manual/cedet/tests/testjavacomp.java: * test/manual/cedet/tests/testlocalvars.cpp: * test/manual/cedet/tests/testnsp.cpp: * test/manual/cedet/tests/testsppcomplete.c: * test/manual/cedet/tests/teststruct.cpp: * test/manual/cedet/tests/testsubclass.cpp: * test/manual/cedet/tests/testsubclass.hh: * test/manual/cedet/tests/testtemplates.cpp: * test/manual/cedet/tests/testtypedefs.cpp: * test/manual/cedet/tests/testusing.cpp: * test/manual/cedet/tests/testusing.hh: * test/manual/cedet/tests/testvarnames.c: * test/manual/cedet/tests/testvarnames.java: * test/manual/cedet/tests/testwisent.wy: Move from here... * test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java: * test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp: * test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp: * test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c: * test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp: * test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp: * test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh: * test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp: * test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp: * test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp: * test/lisp/cedet/semantic-utest-ia-resources/testusing.hh: * test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c: * test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java: * test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy: ...to here. --- diff --git a/test/lisp/cedet/semantic-utest-ia-resources/test.mk b/test/lisp/cedet/semantic-utest-ia-resources/test.mk new file mode 100644 index 00000000000..edea97e7b98 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/test.mk @@ -0,0 +1,18 @@ +# A Test Makefile. -*-makefile-*- + +# This test is for a file in this test directory. Just a random one. +FILES=testdoub # -1- +# #1# ("testdoublens.cpp" "testdoublens.hpp" ) + +all: optional + +# This one completes on a variable name. +optional: $FIL # -2- + # #2# ("FILES") + compile $@ + +notoptional: opt # -3- + # #3# ("optional") + echo "Done." + +#end diff --git a/test/lisp/cedet/semantic-utest-ia-resources/test.srt b/test/lisp/cedet/semantic-utest-ia-resources/test.srt new file mode 100644 index 00000000000..38e6f9ed7b7 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/test.srt @@ -0,0 +1,64 @@ +;; test.srt --- unit test support file for semantic-utest-ia + +;; Copyright (C) 2008-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 . +;; + +set mode "c++-mode" +set escape_start "{{" +set escape_end "}}" + +context file + +template class :blank +"A test template for emacs lisp" +---- +---- + +template classic :blank +"A test template for emacs lisp" +---- +---- + +template variable :blank +"A test template for emacs lisp" +---- +---- + +template function :blank +"A test template for emacs lisp" +---- +---- + +template testarea :blank +"A test template for emacs lisp" +---- +{{ + +// 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 . + +#include "testdoublens.hpp" + +namespace Name1 { + namespace Name2 { + + Foo::Foo() + { + p// -1- + // #1# ( "pMumble" "publishStuff" ) + ; + } + + int Foo::get() // ^1^ + { + p// -2- + // #2# ( "pMumble" "publishStuff" ) + ; + return 0; + } + + void Foo::publishStuff(int a, int b) // ^2^ + { + int foo = a; + int bar = b; + } + + // Test polymorphism on arg types. Note that order is + // mixed to maximize failure cases + void Foo::publishStuff(char a, char b) // ^4^ + { + int foo = a; + int bar = b; + } + + void Foo::sendStuff(int a, int b) // ^3^ + { + int foo = a; + int bar = b; + + Foo::publishStuff(1,2) + + } + + } // namespace Name2 +} // namespace Name1 + +// Test multiple levels of metatype expansion +int test_fcn () { + stage3_Foo MyFoo; + + MyFoo.// -3- + // #3# ( "Mumble" "get" ) + ; + + Name1::Name2::F//-4- + // #4# ( "Foo" ) + ; + + // @TODO - get this working... + Name1::stage2_Foo::M//-5- + /// #5# ( "Mumble" ) + ; +} + +stage3_Foo foo_fcn() { + // Can we go "up" to foo with senator-go-to-up-reference? +} + + +// Second test from Ravikiran Rajagopal + +namespace A { + class foo { + public: + void aa(); + void bb(); + }; +} +namespace A { + class bar { + public: + void xx(); + public: + foo myFoo; + }; + + void bar::xx() + { + myFoo.// -6- <--- cursor is here after the dot + // #6# ( "aa" "bb" ) + ; + } +} + +// Double namespace example from Hannu Koivisto +// +// This is tricky because the parent class "Foo" is found within the +// scope of B, so the scope calculation needs to put that together +// before searching for parents in scope. +namespace a { + namespace b { + + class Bar : public Foo + { + int baz(); + }; + + int Bar::baz() + { + return dum// -7- + // #7# ( "dumdum" ) + ; + } + + } // namespace b +} // namespace a + +// Three namespace example from Hannu Koivisto +// +// This one is special in that the name e::Foo, where "e" is in +// the scope, and not referenced from the global namespace. This +// wasn't previously handled, so the fullscope needed to be added +// to the list of things searched when in split-name decent search mode +// for scopes. + +namespace d { + namespace e { + + class Foo + { + public: + int write(); + }; + + } // namespace d +} // namespace e + + +namespace d { + namespace f { + + class Bar + { + public: + int baz(); + + private: + e::Foo &foo; + }; + + int Bar::baz() + { + return foo.w// -8- + // #8# ( "write" ) + ; + } + + } // namespace f +} // namespace d + +// Fully qualified const struct function arguments +class ContainsStruct +{ + struct TheStruct + { + int memberOne; + int memberTwo; + }; +}; + +void someFunc(const struct ContainsStruct::TheStruct *foo) +{ + foo->// -9- + // #9# ("memberOne" "memberTwo") +} + +// Class with structure tag +class ContainsNamedStruct +{ + struct _fooStruct + { + int memberOne; + int memberTwo; + } member; +}; + +void someOtherFunc(void) +{ + ContainsNamedStruct *someClass; + // This has to find ContainsNamedStruct::_fooStruct + someClass->member.// -10- + // #10# ("memberOne" "memberTwo") +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp new file mode 100644 index 00000000000..e8c9b345b28 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp @@ -0,0 +1,71 @@ +// testdoublens.hpp --- Header file used in one of the Semantic tests + +// Copyright (C) 2008-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 . + +namespace Name1 { + namespace Name2 { + + class Foo + { + typedef unsigned int Mumble; + public: + Foo(); + ~Foo(); + int get(); + + private: + void publishStuff(char /* a */, char /* b */); + + void publishStuff(int q, int r); // Purposely different names. + + void sendStuff(int a, int b); + + Mumble* pMumble; + }; + + typedef Foo stage1_Foo; + + } // namespace Name2 + + typedef Name2::stage1_Foo stage2_Foo; + + typedef Name2::Foo decl_stage1_Foo; + +} // namespace Name1 + +typedef Name1::stage2_Foo stage3_Foo; + + +// Double namespace from Hannu Koivisto +namespace a { + namespace b { + + class Foo + { + struct Dum { + int diDum; + }; + + protected: + mutable a::b::Foo::Dum dumdum; + }; + + } // namespace b +} // namespace a diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testfriends.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testfriends.cpp new file mode 100644 index 00000000000..f84ed5a2190 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testfriends.cpp @@ -0,0 +1,37 @@ +// Test parsing of friends and how they are used in completion. +/* + >> Thanks Damien Profeta for the nice example. + > + > I paste a small example. + > It would be great if friend can be well parsed and even greater if + > class B can access to all the members of A. +*/ + +class Af // %2% ( ( "testfriends.cpp" ) ( "Af" "B::testB" ) ) +{ +public: + int pubVar; +private: + int privateVar; + + friend class B; + +}; + +class B +{ +public: + int testB(); + int testAB(); + +}; + + +int B::testB() { + Af classA; + classA.//-1- + ; //#1# ( "privateVar" "pubVar" ) +} + +int B::testAB() { // %1% ( ( "testfriends.cpp" ) ( "B" "B::testAB" ) ) +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java b/test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java new file mode 100644 index 00000000000..bfc016903c8 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java @@ -0,0 +1,77 @@ +// testjavacomp.java --- Semantic unit test for Java + +// Copyright (C) 2009-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 . + +package tests.testjavacomp; + +class secondClass { + private void scFuncOne() { } + public void scFuncOne() { } + + int package_protected_field; + public int public_protected_field; + private int private_protected_field; +} + + +public class testjavacomp { + + private int funcOne() { } + private int funcTwo() { } + private char funcThree() { } + + class nestedClass { + private void ncFuncOne() { } + public void ncFuncOne() { } + } + + public void publicFunc() { + + int i; + + i = fu// -1- + // #1# ( "funcOne" "funcTwo" ) + ; + + fu// -2- + // #2# ( "funcOne" "funcThree" "funcTwo" ) + ; + + secondClass SC; + + SC.s//-3- + // #3# ( "scFuncOne" ) + ; + + // @TODO - to make this test complete, we need an import + // with a package protected field that is excluded + // from the completion list. + SC.p//-4- + // #4# ( "package_protected_field" "public_protected_field" ) + + nestedClass NC; + + // @todo - need to fix this? I don't know if this is legal java. + NC.// - 5- + // #5# ( "ncFuncOne" ) + ; + } + +} // testjavacomp diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp new file mode 100644 index 00000000000..9d2329a0fa8 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp @@ -0,0 +1,54 @@ +// testlocalvars.java --- Semantic unit test for Java + +// Copyright (C) 2009-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 . + + +class foo { + foo *member; + char anArray[10]; +}; + +void func() +{ + foo local1; + foo* local2 = localvar.member; + foo* local3 = new foo(); + foo local4[10]; + char local5[5] = {'1','2','3','4','5'}; + char *local6 = "12345"; + char local7 = local.anArray[0]; + char local8 = true ? 10 : 11 ; + + // Check that all of the above was parsed + local//-1- + ; //#1# ("local1" "local2" "local3" "local4" "local5" "local6" "local7" "local8" ) + + local1.//-2- + ; //#2# ("anArray" "member") + + local2->//-3- + ; //#3# ("anArray" "member") + + local3->//-4- + ; //#4# ("anArray" "member") + + local4[0].//-5- + ; //#5# ("anArray" "member") +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp new file mode 100644 index 00000000000..db1603cead2 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp @@ -0,0 +1,122 @@ +/* testnsp.cpp --- semantic-ia-utest completion engine unit tests + + Copyright (C) 2008-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 . +*/ + +namespace nsp { + + class rootclass { + public: + int fromroot() {}; + }; + +} + +namespace nsp { + class childclass : public rootclass { + public: + int fromchild() {}; + }; +} + +void myfcn_not_in_ns (void) { + nsp::childclass test; + + test.// -1- + ; // #1# ( "fromchild" "fromroot" ) +} + +// Test a class declared in a class, where the contents +// are in a qualified name. +// +// Thanks Michael Reiher for the concise example. + +class AAA +{ +public: + AAA(); + + void aaa(); + +private: + class Private; + Private * const d; +}; + +class AAA::Private +{ + Private() : bbb(0) { + } + + BBB* bbb; +}; + +void AAA::aaa() +{ + d->// -2- + ; // #2# ( "bbb" ) +} + +// #include files inside a namespace +// David Engster +// See revisions 8034-8037 which implement this. + +namespace another { + #include "testdoublens.hpp" +} + +void foo(void) { + + another::// -3- + ; // #3# ( "Name1" "a" "stage3_Foo" ) + + another::Name1::Name2::Foo a; + + a.// -4- + ; // #4# ( "Mumble" "get" ) +} + +// What happens if a type your looking for is scoped within a type, +// but you are one level into the completion so the originating scope +// excludes the type of the variable you are completing through? +// Thanks Martin Stein for this nice example. + +namespace ms_structs +{ + struct ms_aaa + { + int xx; + }; + + struct ms_bbb + { + struct ms_aaa yy; + }; +}; + +int fun() +{ + using namespace ms_structs; + struct ms_bbb mszz; + int uu = mszz.// -5- + ; // #5# ( "yy" ) + int kk = mszz.yy.// - 6- @TODO - bring in patch from SF + ; // #6# ( "xx" ) +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c b/test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c new file mode 100644 index 00000000000..084d6a8687d --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c @@ -0,0 +1,66 @@ +/* testesppcomplete.cpp --- semantic-ia-utest completion engine unit tests + + Copyright (C) 2008-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 . +*/ + +/* Example provided by Hannes Janetzek */ + +struct Test { int test; }; + +#define BLA(_type) \ + _type *bla = (_type*) malloc(sizeof(_type)); + +#define BLUB(_type) \ + (_type*)malloc(sizeof(_type)); + +#define FOO(_type) \ + _type *foo = BLUB(_type); + +#define BAR(_type) \ + _type *bar = (*_type)BLUB(_type); + +int main(int argc, char *argv[]) { + BLA(Test); + bla->// -1- + ; // #1# ( "test" ) + + FOO(Test); + foo->// -2- + ; // #2# ( "test" ) + + BAR(Test); + bar->// -3- + ; // #3# ( "test" ) +} + +/* Test symref and macros together. */ + +// This function exists only so we can have a comment in a tag with this name. +void function_with_macro_name () +// %1% ( ( "testsppcomplete.c" ) ( "function_with_macro_name" "function_with_macro_name" "use_macro") ) +// Note: fwmn is in twice, once for function, and once for the constant macro below. +{ +} + +#define function_with_macro_name 1 + +int use_macro () { + int a = function_with_macro_name; +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp b/test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp new file mode 100644 index 00000000000..6659b5557b8 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp @@ -0,0 +1,86 @@ +// teststruct.cpp --- semantic-ia-utest completion engine unit tests + +// Copyright (C) 2008-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 . + + +// Note: initially provided by by Alex Ott. + +template +struct grammar { +public: + typedef grammar self_t; + typedef DerivedT const& embed_t; + grammar() {} + ~grammar() { } + void use_parser() const { } + void test1() { } +}; + +struct PDFbool_parser : public grammar { + PDFbool_parser() {} + template struct definition { + typedef typename scannerT::iterator_t iterator_t; + int top; + definition(const PDFbool_parser& /*self*/) { + return ; + } + const int start() const { + return top; + } + }; +}; + +int main(void) { + PDFbool_parser PDFbool_p = PDFbool_parser(); + PDFbool_p.//-1- + ; + // #1# ("definition" "embed_t" "self_t" "test1" "use_parser") +} + +// ---------------------------------------------------------------------- + +template struct Base { +public: + void interface() + { + // ... + static_cast(this)->implementation(); + // ... + } + + static void static_func() + { + // ... + Derived::static_sub_func(); + // ... + } +}; + +struct Derived : Base { + void implementation() { } + static void static_sub_func() { } +}; + +int foo () { + Derived d; + d.//-2- + ; + // #2# ("implementation" "interface" "static_func" "static_sub_func") +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp new file mode 100644 index 00000000000..409950cce2f --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp @@ -0,0 +1,248 @@ +// testsubclass.cpp --- unit test for analyzer and complex C++ inheritance + +// Copyright (C) 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 . + +//#include +#include "testsubclass.hh" + +void animal::moose::setFeet(int numfeet) //^1^ +{ + if (numfeet > 4) { + std::cerr << "Why would a moose have more than 4 feet?" << std::endl; + return; + } + + fFeet = numfeet; +} + +int animal::moose::getFeet() //^2^ +{ + return fFeet; +} + +void animal::moose::doNothing() //^3^ +{ + animal::moose foo(); + + fFeet = N// -15- + ; // #15# ( "NAME1" "NAME2" "NAME3" ) +} + + +void deer::moose::setAntlers(bool have_antlers) //^4^ +{ + fAntlers = have_antlers; +} + +bool deer::moose::getAntlers() //^5^ +// %1% ( ( "testsubclass.cpp" "testsubclass.hh" ) ( "deer::moose::doSomething" "deer::moose::getAntlers" "moose" ) ) +{ + return fAntlers; +} + +bool i_dont_have_symrefs() +// %2% ( ("testsubclass.cpp" ) ("i_dont_have_symrefs")) +{ +} + +void deer::moose::doSomething() //^6^ +{ + // All these functions should be identified by semantic analyzer. + getAntlers(); + setAntlers(true); + + getFeet(); + setFeet(true); + + doNothing(); + + fSomeField = true; + + fIsValid = true; +} + +void deer::alces::setLatin(bool l) { + fLatin = l; +} + +bool deer::alces::getLatin() { + return fLatin; +} + +void deer::alces::doLatinStuff(moose moosein) { + // All these functions should be identified by semantic analyzer. + getFeet(); + setFeet(true); + + getLatin(); + setLatin(true); + + doNothing(); + + deer::moose foo(); + + +} + +moose deer::alces::createMoose() +{ + moose MooseVariableName; + bool tmp; + int itmp; + bool fool; + int fast; + + MooseVariableName = createMoose(); + + doLatinStuff(MooseVariableName); + + tmp = this.f// -1- + // #1# ( "fAlcesBool" "fIsValid" "fLatin" ) + ; + + itmp = this.f// -2- + // #2# ( "fAlcesInt" "fGreek" "fIsProtectedInt" ) + ; + + tmp = f// -3- + // #3# ( "fAlcesBool" "fIsValid" "fLatin" "fool" ) + ; + + itmp = f// -4- + // #4# ( "fAlcesInt" "fGreek" "fIsProtectedInt" "fast" ) + ; + + MooseVariableName = m// -5- + // #5# ( "moose" ) + + return MooseVariableName; +} + +/** Test Scope Changes + * + * This function is rigged to make sure the scope changes to account + * for different locations in local variable parsing. + */ +int someFunction(int mPickle) +{ + moose mMoose = deer::alces::createMoose(); + + if (mPickle == 1) { + + int mOption1 = 2; + + m// -5- + // #5# ( "mMoose" "mOption1" "mPickle" ) + ; + + } else { + + int mOption2 = 2; + + m// -6- + // #6# ( "mMoose" "mOption2" "mPickle" ) + ; + } + +} + +// Thanks Ming-Wei Chang for this next example. + +namespace pub_priv { + + class A{ + private: + void private_a(){} + public: + void public_a(); + }; + + void A::public_a() { + A other_a; + + other_a.p// -7- + // #7# ( "private_a" "public_a" ) + ; + } + + int some_regular_function(){ + A a; + a.p// -8- + // #8# ( "public_a" ) + ; + return 0; + } + +} + + +/** Test Scope w/in a function (non-method) with classes using + * different levels of inheritance. + */ +int otherFunction() +{ + sneaky::antelope Antelope(1); + sneaky::jackalope Jackalope(1); + sneaky::bugalope Bugalope(1); + + Antelope.// -9- + // #9# ( "fAntyPublic" "fQuadPublic" "testAccess") + ; + + Jackalope.// -10- + // #10# ( "fBunnyPublic" "testAccess") + ; + + Jackalope// @1@ 6 + ; + Jackalope; + Jackalope; + Jackalope; + + Bugalope.// -11- + // #11# ( "fBugPublic" "testAccess") + ; + Bugalope// @2@ 3 + ; +} + +/** Test methods within each class for types of access to the baseclass. + */ + +bool sneaky::antelope::testAccess() //^7^ +{ + this.// -12- + // #12# ( "fAntyPrivate" "fAntyProtected" "fAntyPublic" "fQuadProtected" "fQuadPublic" "testAccess" ) + ; +} + +bool sneaky::jackalope::testAccess() //^8^ +{ + this.// -13- + // #13# ( "fBunnyPrivate" "fBunnyProtected" "fBunnyPublic" "fQuadProtected" "fQuadPublic" "testAccess" ) + ; +} + +bool sneaky::bugalope::testAccess() //^9^ +{ + this.// -14- + // #14# ( "fBugPrivate" "fBugProtected" "fBugPublic" "fQuadPublic" "testAccess" ) + ; +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh new file mode 100644 index 00000000000..5d795b32b10 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh @@ -0,0 +1,190 @@ +// testsubclass.hh --- unit test for analyzer and complex C++ inheritance + +// Copyright (C) 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 . + +//#include +// #include + +#ifndef TESTSUBCLASS_HH +#define TESTSUBCLASS_HH + +namespace animal { + + class moose { + public: + moose() : fFeet(0), + fIsValid(false) + { } + + virtual void setFeet(int); + int getFeet(); + + void doNothing(); + + enum moose_enum { + NAME1, NAME2, NAME3 }; + + + protected: + + bool fIsValid; + int fIsProtectedInt; + + private: + int fFeet; // Usually 2 or 4. + bool fIsPrivateBool; + + }; // moose + + int two_prototypes(); + int two_prototypes(); + + class quadruped { + public: + quadruped(int a) : fQuadPrivate(a) + { } + + int fQuadPublic; + + protected: + int fQuadProtected; + + private: + int fQuadPrivate; + + }; + +} + + +namespace deer { + + class moose : public animal::moose { + public: + moose() : fAntlers(false) + { } + + void setAntlers(bool); + bool getAntlers(); + + void doSomething(); + + protected: + + bool fSomeField; + + private: + bool fAntlers; + + }; + +} // deer + +// A second namespace of the same name will test the +// namespace merging needed to resolve deer::alces +namespace deer { + + class alces : public animal::moose { + public: + alces(int lat) : fLatin(lat) + { } + + void setLatin(bool); + bool getLatin(); + + void doLatinStuff(moose moosein); // for completion testing + + moose createMoose(); // for completion testing. + + protected: + bool fAlcesBool; + int fAlcesInt; + + private: + bool fLatin; + int fGreek; + }; + +}; + +// A third namespace with classes that does protected and private inheritance. +namespace sneaky { + + class antelope : public animal::quadruped { + + public: + antelope(int a) : animal::quadruped(), + fAntyProtected(a) + {} + + int fAntyPublic; + + bool testAccess(); + + protected: + int fAntyProtected; + + private : + int fAntyPrivate; + + }; + + class jackalope : protected animal::quadruped { + + public: + jackalope(int a) : animal::quadruped(), + fBunny(a) + {} + + int fBunnyPublic; + + bool testAccess(); + + protected: + bool fBunnyProtected; + + private : + bool fBunnyPrivate; + + }; + + // Nothing specified means private. + class bugalope : /* private*/ animal::quadruped { + + public: + bugalope(int a) : animal::quadruped(), + fBug(a) + {} + + int fBugPublic; + + bool testAccess(); + protected: + bool fBugProtected; + + private : + bool fBugPrivate; + + }; + + +}; + +#endif diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp new file mode 100644 index 00000000000..ed7a057df0b --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp @@ -0,0 +1,149 @@ +// testtemplates.cpp --- semantic-ia-utest completion engine unit tests + +// Copyright (C) 2008-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 . + + +// TODO - this probably means can't be part of emacs, as I don't know who this guy is. +// Written by 'Raf' + +template +class read_ref { +public: + const T* read_ref_member_one( T); + const V* read_ref_member_two(); +}; + +namespace NS { + template + class ref { + public: + read_ref operator->() { + m_// -1- + ; + // #1# ( "m_datas" ) + } + + private: + T m_datas[U]; + }; + +} + +class FooOne { +public: + int fooOneMember(); +}; + +class FooTwo { +public: + int fooTwoMember(); +}; + +class FooThree { +public: + int fooThreeMember(); + + FooOne * operator->(); +}; + +typedef ref Test; + +using NS; + +void +main(void) { + ref v; + + v->read_ref_member_one()-> // -2- + ; + // #2# ( "fooOneMember" ) + + v->read_ref_member_two()-> // -3- + ; + // #3# ( "fooTwoMember" ) + + v-> // -4- + ; + // #4# ( "read_ref_member_one" "read_ref_member_two" ) + + Test t; + + t->read_ref_member_two()-> // -5- + ; + // #5# ( "fooTwoMember" ) + + ref v2; + + v2->read_ref_member_two()-> // -6- + ; + // #6# ( "fooOneMember" ) + + /* Try all these things by also specifying the namespace in the name. */ + NS::ref v3; + + v3->read_ref_member_one()-> // -7- + ; + // #7# ( "fooOneMember" ) + + v3->read_ref_member_two()-> // -8- + ; + // #8# ( "fooTwoMember" ) + + v3->read_ref_member_two// @1@ 5 + ; + +} + +// More Namespace Magic using member constants. + +template +struct isFooLike { + static const bool value = false; +}; + +template <> +struct isFooLike { + static const bool value = true; +}; + + +template +class A { +public: + A(); + void foo() {}; +}; + + +template +class FooFour : public A::value> { +public: + bool bar() {} +}; + + +int main2() { + + FooFour ff; + + ff.// - 9- @ TODO - bring over patch from SF + ; // #9# ( "bar" "foo" ); + +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp new file mode 100644 index 00000000000..c82535f9581 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp @@ -0,0 +1,155 @@ +// testtypedefs.cpp --- Sample with some fake bits out of std::string + +// Copyright (C) 2008-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 . + +// Thanks Ming-Wei Chang for these examples. + +namespace std { + template class basic_string { + public: + void resize(int); + }; +} + +typedef std::basic_string mstring; + +using namespace std; +typedef basic_string bstring; + +int main(){ + mstring a; + a.// -1- + ; + // #1# ( "resize" ) + bstring b; + // It doesn't work here. + b.// -2- + ; + // #2# ( "resize" ) + return 0; +} + +// ------------------ + +class Bar +{ +public: + void someFunc() {} +}; + +typedef Bar new_Bar; + +template +class TBar +{ +public: + void otherFunc() {} +}; + +typedef TBar new_TBar; + +int main() +{ + new_Bar nb; + new_TBar ntb; + + nb.// -3- + ; + // #3# ("someFunc") + ntb.// -4- + ; + // #4# ("otherFunc") + + return 0; +} + +// ------------------ +// Example from Yupeng. + +typedef struct epd_info { + int a; +} epd_info_t; + +static int epd_probe(struct platform_device *pdev) +{ + struct epd_info *db; + epd_info_t db1; + + db.// -5- + ; // #5# ("a") + db1.// -6- + ;// #6# ("a") + + return 1; +} + +// ------------------ +// Example from Michel LAFON-PUYO + +typedef enum +{ + ENUM1, + ENUM2 +} e_toto; + +typedef struct +{ + int field_a; + int field_b; +} t_toto; + +// Note: Error condition from anonymous types in a typedef +// was that the first (ie - the enum) would be used in +// place of the struct. +int func(void) +{ + t_toto t; + t. // -7- + ; // #7# ( "field_a" "field_b" ) + return 0; +} + + +// ------------------ +// Example from Dixon Ryan + + +namespace NS2 { + class MyClass { + + public: + void myFunction() { } + }; +} + +typedef class NS2::MyClass* MyClassHandle; + +int dixon ( void ) { + MyClassHandle mch = getMyClassHandle(); + NS2::MyClass* mcptr = getMyClassHandle(); + + mcptr-> // -8- + ; // #8# ( "myFunction" ) + mch-> // - 9- TODO bring over patch from SF + ; // #9# ( "myFunction" ) + deleteMyClassHandle(mch); + + return 0; +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp new file mode 100644 index 00000000000..6f6c8542633 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp @@ -0,0 +1,265 @@ +// testusing.cpp --- semantic-ia-utest completion engine unit tests + +// Copyright (C) 2008-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 . + + +#include + +#include + +namespace moose { + + class MyClass; + class Point; + + typedef MyClass snerk; +} + +namespace moose { + + class Point; + class MyClass; + +} + +namespace { + + int global_variable = 0; + +}; + +using moose::MyClass; + +void someFcn() { + + MyClass f; + + f.//-1- + ; //#1# ( "getVal" "setVal" ) + +} + +// Code from Zhiqiu Kong + +namespace panda { + + using namespace bread_name; + + int func() + { + bread test; + test.//-2- + ;// #2# ( "geta" ) + return 0; + } +} + +namespace togglemoose { + + MyOtherClass::testToggle1() { //^1^ + // Impl for testToggle1 + } +} + +togglemoose::MyOtherClass::testToggle2() { //^3^ + // Impl for testToggle2 +} + +using togglemoose; + +MyOtherClass::testToggle3() { //^3^ + // Impl for testToggle3 +} + +// Local using statements and aliased types +// Code from David Engster + +void func2() +{ + using namespace somestuff; + OneClass f; + f.//-3- + ; //#3# ( "aFunc" "anInt" ) +} + +void func3() +{ + using somestuff::OneClass; + OneClass f; + f.//-4- + ; //#4# ( "aFunc" "anInt" ) +} + +// Dereferencing alias types created through 'using' statements + +// Alias with fully qualified name +void func4() +{ + otherstuff::OneClass f; + f. //-5- + ; //#5# ( "aFunc" "anInt" ) +} + +// Alias through namespace directive +void func5() +{ + using namespace otherstuff; + OneClass f; + f. //-6- + ; //#6# ( "aFunc" "anInt" ) +} + +// Check name hiding +void func6() +{ + using namespace morestuff; + OneClass f; // Alias for somestuff::OneClass + f. //-7- + ; //#7# ( "aFunc" "anInt" ) + aStruct g; // This however is morestuff::aStruct ! + g. //-8- + ; //#8# ( "anotherBar" "anotherFoo" ) +} + +// Alias of an alias +// Currently doesn't work interactively for some reason. +void func6() +{ + using namespace evenmorestuff; + OneClass f; + f. //-7- + ; //#7# ( "aFunc" "anInt" ) +} + +// Alias for struct in nested namespace, fully qualified +void func7() +{ + outer::StructNested f; + f.//-8- + ; //#8# ( "one" "two" ) +} + +// Alias for nested namespace +void func8() +{ + using namespace outerinner; + StructNested f; + AnotherStruct g; + f.//-9- + ; //#9# ( "one" "two" ) + g.//-10- + ; //#10# ( "four" "three" ) +} + +// Check conventional namespace aliases +// - fully qualified - +void func9() +{ + alias_for_somestuff::OneClass c; + c.//-11- + ; //#11# ( "aFunc" "anInt" ) + alias_for_outerinner::AnotherStruct s; + s. //-12- + ; //#12# ( "four" "three" ) +} + +// - unqualified - +void func10() +{ + using namespace alias_for_somestuff; + OneClass c2; + c2.//-13- + ; //#13# ( "aFunc" "anInt" ) + using namespace alias_for_outerinner; + AnotherStruct s2; + s2.//-14- + ; //#14# ( "four" "three" ) +} + +// Completion on namespace aliases +void func11() +{ + alias_for_somestuff:://-15- + ; //#15# ( "OneClass" "aStruct") + alias_for_outerinner:://-16- + ; //#16# ( "AnotherStruct" "StructNested" ) +} + +// make sure unfound using statements don't crash stuff. +using something::cantbe::Found; + +void unfoundfunc() +{ + NotFound notfound; // Variable can't be found. + + notfound.//-17- + ; //#17# ( ) Nothing here since this is an undefined class + +} + +// Using statements can depend on previous ones... + +void acc_using() +{ + using namespace outer; + // This is effectively like 'using namespace outer::inner' + using namespace inner; + + StructNested sn; + sn.//-18- + ; //#18# ( "one" "two" ) +} + +// Check the same outside of function scope + +using namespace outer; +using namespace inner; + +void acc_using2() +{ + StructNested sn; + sn.//-19- + ; //#19# ( "one" "two" ) +} + +// Check if scope gets correctly generated, i.e., without us providing any +// hints in the form of an existing type + +void check_scope() +{ + using namespace first; + AAA//-20- + ; //#20# ( "AAA1" "AAA2" ) +} + +void check_scope2() +{ + using namespace third; + AAA//-21- + ; //#21# ( "AAA1" "AAA2" "AAA3" ) +} + +// Make sure this also works not only in functions + +namespace check_scope3 { + using namespace first; + AAA//-22- + ; //#22# ( "AAA1" "AAA2" ) +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testusing.hh b/test/lisp/cedet/semantic-utest-ia-resources/testusing.hh new file mode 100644 index 00000000000..d3b690f8542 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testusing.hh @@ -0,0 +1,176 @@ +// testusing.hh --- semantic-ia-utest completion engine unit tests + +// Copyright (C) 2008-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 . + +namespace moose { + + class Point; + + class MyClass; + +} + + +namespace moose { + + class Point; + + class MyClass { + public: + MyClass() : fVal(0) { + } + + ~MyClass() {}; + + /** + * fVal Accessors + * @{ + */ + int getVal() const { + return fVal; + } + void setVal(int Val) const { + fVal = Val; + } + /** + * @} + */ + + private: + int fVal; + }; + +} + +namespace togglemoose { + + class MyOtherClass { + public: + int testToggle1(); + int testToggle2(); + int testToggle3(); + }; +} + +namespace deer { + + class Pickle; + +}; + +// Code from Zhiqiu Kong + +#ifndef BREAD_H +#define BREAD_H + +namespace bread_name { + class bread + { + public: + void geta(); + private: + int m_a; + int m_b; + }; +} + +#endif + +// Code from David Engster +// Creating alias types through 'using' trickery + +namespace somestuff { + class OneClass { + public: + void aFunc(); + int anInt; + }; + struct aStruct { + int foo; + int bar; + }; +} + +namespace otherstuff { + // make otherstuff::OneClass an alias for somestuff::OneClass + using somestuff::OneClass; +} + +namespace morestuff { + // make morestuff an alias namespace for somestuff + using namespace somestuff; + // but hide aStruct with own type + struct aStruct { + int anotherFoo; + int anotherBar; + }; +} + +// We can also create an alias for an alias +namespace evenmorestuff { + using otherstuff::OneClass; +} + +// Now with nested namespaces +namespace outer { + namespace inner { + struct StructNested { + int one; + int two; + }; + struct AnotherStruct { + int three; + int four; + }; + } +} + +// Namespace which pulls in one of its own nested namespaces +namespace first { + class AAA1; + namespace second { + class AAA2; + } + // Elevate nested namespace into first one + using namespace second; +} + +namespace third { + using namespace first; + class AAA3; +} + + +// Elevate the first struct into 'outer' +// so that we can access it via 'outer::StructNested' +namespace outer { + using outer::inner::StructNested; +} + +// Create an alias for a nested namespace +namespace outerinner { + // equivalent to 'namespace outerinner = outer::inner;' + using namespace outer::inner; +} + +// Create namespace alias +namespace alias_for_somestuff = somestuff; +// Same for nested namespace +namespace alias_for_outerinner = outer::inner; diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c new file mode 100644 index 00000000000..e796eb285c6 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c @@ -0,0 +1,104 @@ +/* testvarnames.cpp --- semantic-ia-utest completion engine unit tests + + Copyright (C) 2008-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 . + +*/ + +struct independent { + int indep_1; + int indep_2; +}; + +struct independent var_indep_struct; + +struct { + int unnamed_1; + int unnamed_2; +} var_unnamed_struct; + +struct { + int unnamed_3; + int unnamed_4; +} var_un_2, var_un_3; + +struct inlinestruct { + int named_1; + int named_2; +} var_named_struct; + +struct inline2struct { + int named_3; + int named_4; +} var_n_2, var_n_3; + +/* Structures with names that then declare variables + * should also be completable. + * + * Getting this to work is the bugfix in semantic-c.el CVS v 1.122 + */ +struct inlinestruct in_var1; +struct inline2struct in_var2; + +/* + * Structures (or any types) could have the same name as a variable. + * Make sure we complete vars over types. + * + * See cedet-devel mailing list Dec 23, 2013 for details. + */ +struct varorstruct {}; +int varorstruct; + +int assigntovarorstruct; + +int test_1(int var_arg1) { + + var_// -1- + ; // #1# ("var_arg1" "var_indep_struct" "var_n_2" "var_n_3" "var_named_struct" "var_un_2" "var_un_3" "var_unnamed_struct") + + var_indep_struct.// -2- + ; // #2# ( "indep_1" "indep_2" ) + + var_unnamed_struct.// -3- + ; // #3# ( "unnamed_1" "unnamed_2" ) + + var_named_struct.// -4- + ; // #4# ( "named_1" "named_2" ) + + var_un_2.// -5- + ; // #5# ( "unnamed_3" "unnamed_4" ) + var_un_3.// -6- + ; // #6# ( "unnamed_3" "unnamed_4" ) + + var_n_2.// -7- + ; // #7# ( "named_3" "named_4" ) + var_n_3.// -8- + ; // #8# ( "named_3" "named_4" ) + + in_// -9- + ; // #9# ( "in_var1" "in_var2" ) + + in_var1.// -10- + ; // #10# ( "named_1" "named_2") + in_var2.// -11- + ; // #11# ( "named_3" "named_4") + + varorstruct = assign// -12- + ; // #12# ( "assigntovarorstruct" ) +} diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java new file mode 100644 index 00000000000..7ed9785fc07 --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java @@ -0,0 +1,60 @@ +// testvarnames.java --- Semantic unit test for Java + +// Copyright (C) 2009-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 . + +package tests; + +/** + * + * + * Created: 02/17/14 + * + * @author Eric M. Ludlam + * @version + * @since + */ +public class testvarnames { + + public class varorclass { + public static long misclongvalue; + }; + + public static varorclass varoftypevarorclass = NULL; + + public static long varorclass = 1; + + public static long assignintovar = 1; + + public static varorclass classassign = NULL; + + static public void main(String [] args) { + + varorclass = assign// -1- + // #1# ( "assignintovar" ) + ; + + varoftypevarorclass = clas// -2- + // #2# ( "classassign" ) + + varoftypevarorclass.misc//-3- + // #3# ( "misclongvalue" ) + } + +} // testvarnames diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy b/test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy new file mode 100644 index 00000000000..49eb5780f4b --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy @@ -0,0 +1,85 @@ +;; testwisent.wy --- unit test support file for semantic-utest-ia + +;; Copyright (C) 2008-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: +;; +;; Parser for nothing in particular mode + +%languagemode nothing-mode +%parsetable wisent-nothing-parser-tables +%keywordtable wisent-nothing-keywords +%tokentable wisent-nothing-tokens +%languagemode nothing-mode +%setupfunction wisent-nothing-default-setup + +%start goal + +;;; Punctuation +%type ;;syntax "\\(\\s.\\|\\s$\\|\\s'\\)+" matchdatatype string + +%token DOT "." +%token COMA "," +%token COLONCOLON "::" +%token COLON ":" +%token SEMICOLON ";" + +;;; KEYWORDS +%type + +%keyword COLONOSCOPY "colonoscopy" +%keyword SEMISOMETHING "semisomething" + +%% + +goal + ;; Misc + : COLON ;; -1- + ;; #1# ( "COLONCOLON" "COLON" "COLONOSCOPY" ) + | SEMI ;; -2- + ;; #2# ( "SEMI_useless_rule" "SEMICOLON" "SEMISOMETHING" ) + | thing ;; -3- + ;; #3# ( "thing_term_1" "thing_term_2" ) + ; + +SEMI_useless_rule + : + ; + +thing_term_1 + : + ; + +thing_term_2 + : + ; + +%% +(define-lex wisent-nothing-lexer + "Lexical analyzer to handle nothing in particular buffers." + ;; semantic-lex-newline + semantic-lex-ignore-whitespace + semantic-lex-ignore-newline + semantic-lex-ignore-comments + + semantic-lex-default-action + ) + +;; testwisent.wy ends here \ No newline at end of file diff --git a/test/lisp/cedet/semantic-utest-ia.el b/test/lisp/cedet/semantic-utest-ia.el index 7210f66b0a7..122c431d472 100644 --- a/test/lisp/cedet/semantic-utest-ia.el +++ b/test/lisp/cedet/semantic-utest-ia.el @@ -30,121 +30,94 @@ ;; (Replace // with contents of comment-start for the language being tested.) ;;; Code: +(require 'ert) +(require 'ert-x) (require 'semantic) (require 'semantic/analyze) (require 'semantic/analyze/refs) (require 'semantic/symref) (require 'semantic/symref/filter) -(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-utest-test-directory (expand-file-name "tests" cedet-utest-directory) - "Location of test files.") - (ert-deftest semantic-utest-ia-doublens.cpp () - (let ((tst (expand-file-name "testdoublens.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testdoublens.cpp"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-subclass.cpp () - (let ((tst (expand-file-name "testsubclass.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testsubclass.cpp"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-typedefs.cpp () - (let ((tst (expand-file-name "testtypedefs.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testtypedefs.cpp"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-struct.cpp () - (let ((tst (expand-file-name "teststruct.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "teststruct.cpp"))) (should-not (semantic-ia-utest tst)))) ;;(ert-deftest semantic-utest-ia-union.cpp () -;; (let ((tst (expand-file-name "testunion.cpp" semantic-utest-test-directory))) -;; (should (file-exists-p tst)) +;; (let ((tst (ert-resource-file "testunion.cpp"))) ;; (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-templates.cpp () - (let ((tst (expand-file-name "testtemplates.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testtemplates.cpp"))) (should-not (semantic-ia-utest tst)))) ;;(ert-deftest semantic-utest-ia-friends.cpp () -;; (let ((tst (expand-file-name "testfriends.cpp" semantic-utest-test-directory))) -;; (should (file-exists-p tst)) +;; (let ((tst (ert-resource-file "testfriends.cpp"))) ;; (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-using.cpp () - (let ((tst (expand-file-name "testusing.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testusing.cpp"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-nsp.cpp () (skip-unless (executable-find "g++")) - (let ((tst (expand-file-name "testnsp.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testnsp.cpp"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-localvars.cpp () - (let ((tst (expand-file-name "testlocalvars.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testlocalvars.cpp"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-namespace.cpp () (skip-unless (executable-find "g++")) - (let ((tst (expand-file-name "testnsp.cpp" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testnsp.cpp"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-sppcomplete.c () - (let ((tst (expand-file-name "testsppcomplete.c" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testsppcomplete.c"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-varnames.c () - (let ((tst (expand-file-name "testvarnames.c" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testvarnames.c"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-javacomp.java () - (let ((tst (expand-file-name "testjavacomp.java" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testjavacomp.java"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-varnames.java () - (let ((tst (expand-file-name "testvarnames.java" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testvarnames.java"))) (should-not (semantic-ia-utest tst)))) ;;(ert-deftest semantic-utest-ia-f90.f90 () -;; (let ((tst (expand-file-name "testf90.f90" semantic-utest-test-directory))) -;; (should (file-exists-p tst)) +;; (let ((tst (ert-resource-file "testf90.f90"))) ;; (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-wisent.wy () - (let ((tst (expand-file-name "testwisent.wy" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "testwisent.wy"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-texi () - (let ((tst (expand-file-name "test.texi" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "test.texi"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-make () - (let ((tst (expand-file-name "test.mk" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "test.mk"))) (should-not (semantic-ia-utest tst)))) (ert-deftest semantic-utest-ia-srecoder () - (let ((tst (expand-file-name "test.srt" semantic-utest-test-directory))) - (should (file-exists-p tst)) + (let ((tst (ert-resource-file "test.srt"))) (should-not (semantic-ia-utest tst)))) ;;; Core testing utility diff --git a/test/manual/cedet/tests/test.mk b/test/manual/cedet/tests/test.mk deleted file mode 100644 index edea97e7b98..00000000000 --- a/test/manual/cedet/tests/test.mk +++ /dev/null @@ -1,18 +0,0 @@ -# A Test Makefile. -*-makefile-*- - -# This test is for a file in this test directory. Just a random one. -FILES=testdoub # -1- -# #1# ("testdoublens.cpp" "testdoublens.hpp" ) - -all: optional - -# This one completes on a variable name. -optional: $FIL # -2- - # #2# ("FILES") - compile $@ - -notoptional: opt # -3- - # #3# ("optional") - echo "Done." - -#end diff --git a/test/manual/cedet/tests/test.srt b/test/manual/cedet/tests/test.srt deleted file mode 100644 index 38e6f9ed7b7..00000000000 --- a/test/manual/cedet/tests/test.srt +++ /dev/null @@ -1,64 +0,0 @@ -;; test.srt --- unit test support file for semantic-utest-ia - -;; Copyright (C) 2008-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 . -;; - -set mode "c++-mode" -set escape_start "{{" -set escape_end "}}" - -context file - -template class :blank -"A test template for emacs lisp" ----- ----- - -template classic :blank -"A test template for emacs lisp" ----- ----- - -template variable :blank -"A test template for emacs lisp" ----- ----- - -template function :blank -"A test template for emacs lisp" ----- ----- - -template testarea :blank -"A test template for emacs lisp" ----- -{{ - -// 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 . - -#include "testdoublens.hpp" - -namespace Name1 { - namespace Name2 { - - Foo::Foo() - { - p// -1- - // #1# ( "pMumble" "publishStuff" ) - ; - } - - int Foo::get() // ^1^ - { - p// -2- - // #2# ( "pMumble" "publishStuff" ) - ; - return 0; - } - - void Foo::publishStuff(int a, int b) // ^2^ - { - int foo = a; - int bar = b; - } - - // Test polymorphism on arg types. Note that order is - // mixed to maximize failure cases - void Foo::publishStuff(char a, char b) // ^4^ - { - int foo = a; - int bar = b; - } - - void Foo::sendStuff(int a, int b) // ^3^ - { - int foo = a; - int bar = b; - - Foo::publishStuff(1,2) - - } - - } // namespace Name2 -} // namespace Name1 - -// Test multiple levels of metatype expansion -int test_fcn () { - stage3_Foo MyFoo; - - MyFoo.// -3- - // #3# ( "Mumble" "get" ) - ; - - Name1::Name2::F//-4- - // #4# ( "Foo" ) - ; - - // @TODO - get this working... - Name1::stage2_Foo::M//-5- - /// #5# ( "Mumble" ) - ; -} - -stage3_Foo foo_fcn() { - // Can we go "up" to foo with senator-go-to-up-reference? -} - - -// Second test from Ravikiran Rajagopal - -namespace A { - class foo { - public: - void aa(); - void bb(); - }; -} -namespace A { - class bar { - public: - void xx(); - public: - foo myFoo; - }; - - void bar::xx() - { - myFoo.// -6- <--- cursor is here after the dot - // #6# ( "aa" "bb" ) - ; - } -} - -// Double namespace example from Hannu Koivisto -// -// This is tricky because the parent class "Foo" is found within the -// scope of B, so the scope calculation needs to put that together -// before searching for parents in scope. -namespace a { - namespace b { - - class Bar : public Foo - { - int baz(); - }; - - int Bar::baz() - { - return dum// -7- - // #7# ( "dumdum" ) - ; - } - - } // namespace b -} // namespace a - -// Three namespace example from Hannu Koivisto -// -// This one is special in that the name e::Foo, where "e" is in -// the scope, and not referenced from the global namespace. This -// wasn't previously handled, so the fullscope needed to be added -// to the list of things searched when in split-name decent search mode -// for scopes. - -namespace d { - namespace e { - - class Foo - { - public: - int write(); - }; - - } // namespace d -} // namespace e - - -namespace d { - namespace f { - - class Bar - { - public: - int baz(); - - private: - e::Foo &foo; - }; - - int Bar::baz() - { - return foo.w// -8- - // #8# ( "write" ) - ; - } - - } // namespace f -} // namespace d - -// Fully qualified const struct function arguments -class ContainsStruct -{ - struct TheStruct - { - int memberOne; - int memberTwo; - }; -}; - -void someFunc(const struct ContainsStruct::TheStruct *foo) -{ - foo->// -9- - // #9# ("memberOne" "memberTwo") -} - -// Class with structure tag -class ContainsNamedStruct -{ - struct _fooStruct - { - int memberOne; - int memberTwo; - } member; -}; - -void someOtherFunc(void) -{ - ContainsNamedStruct *someClass; - // This has to find ContainsNamedStruct::_fooStruct - someClass->member.// -10- - // #10# ("memberOne" "memberTwo") -} diff --git a/test/manual/cedet/tests/testdoublens.hpp b/test/manual/cedet/tests/testdoublens.hpp deleted file mode 100644 index e8c9b345b28..00000000000 --- a/test/manual/cedet/tests/testdoublens.hpp +++ /dev/null @@ -1,71 +0,0 @@ -// testdoublens.hpp --- Header file used in one of the Semantic tests - -// Copyright (C) 2008-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 . - -namespace Name1 { - namespace Name2 { - - class Foo - { - typedef unsigned int Mumble; - public: - Foo(); - ~Foo(); - int get(); - - private: - void publishStuff(char /* a */, char /* b */); - - void publishStuff(int q, int r); // Purposely different names. - - void sendStuff(int a, int b); - - Mumble* pMumble; - }; - - typedef Foo stage1_Foo; - - } // namespace Name2 - - typedef Name2::stage1_Foo stage2_Foo; - - typedef Name2::Foo decl_stage1_Foo; - -} // namespace Name1 - -typedef Name1::stage2_Foo stage3_Foo; - - -// Double namespace from Hannu Koivisto -namespace a { - namespace b { - - class Foo - { - struct Dum { - int diDum; - }; - - protected: - mutable a::b::Foo::Dum dumdum; - }; - - } // namespace b -} // namespace a diff --git a/test/manual/cedet/tests/testfriends.cpp b/test/manual/cedet/tests/testfriends.cpp deleted file mode 100644 index 20425f93afa..00000000000 --- a/test/manual/cedet/tests/testfriends.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// Test parsing of friends and how they are used in completion. -/* - >> Thanks Damien Profeta for the nice example. - > - > I paste a small example. - > It would be great if friend can be well parsed and even greater if - > class B can access to all the members of A. -*/ - -class Af // %2% ( ( "testfriends.cpp" ) ( "Af" "B::testB" ) ) -{ -public: - int pubVar; -private: - int privateVar; - - friend class B; - -}; - -class B -{ -public: - int testB(); - int testAB(); - -}; - - -int B::testB() { - Af classA; - classA.//-1- - ; //#1# ( "privateVar" "pubVar" ) -} - -int B::testAB() { // %1% ( ( "testfriends.cpp" ) ( "B" "B::testAB" ) ) -} - diff --git a/test/manual/cedet/tests/testjavacomp.java b/test/manual/cedet/tests/testjavacomp.java deleted file mode 100644 index bfc016903c8..00000000000 --- a/test/manual/cedet/tests/testjavacomp.java +++ /dev/null @@ -1,77 +0,0 @@ -// testjavacomp.java --- Semantic unit test for Java - -// Copyright (C) 2009-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 . - -package tests.testjavacomp; - -class secondClass { - private void scFuncOne() { } - public void scFuncOne() { } - - int package_protected_field; - public int public_protected_field; - private int private_protected_field; -} - - -public class testjavacomp { - - private int funcOne() { } - private int funcTwo() { } - private char funcThree() { } - - class nestedClass { - private void ncFuncOne() { } - public void ncFuncOne() { } - } - - public void publicFunc() { - - int i; - - i = fu// -1- - // #1# ( "funcOne" "funcTwo" ) - ; - - fu// -2- - // #2# ( "funcOne" "funcThree" "funcTwo" ) - ; - - secondClass SC; - - SC.s//-3- - // #3# ( "scFuncOne" ) - ; - - // @TODO - to make this test complete, we need an import - // with a package protected field that is excluded - // from the completion list. - SC.p//-4- - // #4# ( "package_protected_field" "public_protected_field" ) - - nestedClass NC; - - // @todo - need to fix this? I don't know if this is legal java. - NC.// - 5- - // #5# ( "ncFuncOne" ) - ; - } - -} // testjavacomp diff --git a/test/manual/cedet/tests/testlocalvars.cpp b/test/manual/cedet/tests/testlocalvars.cpp deleted file mode 100644 index 9d2329a0fa8..00000000000 --- a/test/manual/cedet/tests/testlocalvars.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// testlocalvars.java --- Semantic unit test for Java - -// Copyright (C) 2009-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 . - - -class foo { - foo *member; - char anArray[10]; -}; - -void func() -{ - foo local1; - foo* local2 = localvar.member; - foo* local3 = new foo(); - foo local4[10]; - char local5[5] = {'1','2','3','4','5'}; - char *local6 = "12345"; - char local7 = local.anArray[0]; - char local8 = true ? 10 : 11 ; - - // Check that all of the above was parsed - local//-1- - ; //#1# ("local1" "local2" "local3" "local4" "local5" "local6" "local7" "local8" ) - - local1.//-2- - ; //#2# ("anArray" "member") - - local2->//-3- - ; //#3# ("anArray" "member") - - local3->//-4- - ; //#4# ("anArray" "member") - - local4[0].//-5- - ; //#5# ("anArray" "member") -} diff --git a/test/manual/cedet/tests/testnsp.cpp b/test/manual/cedet/tests/testnsp.cpp deleted file mode 100644 index db1603cead2..00000000000 --- a/test/manual/cedet/tests/testnsp.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* testnsp.cpp --- semantic-ia-utest completion engine unit tests - - Copyright (C) 2008-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 . -*/ - -namespace nsp { - - class rootclass { - public: - int fromroot() {}; - }; - -} - -namespace nsp { - class childclass : public rootclass { - public: - int fromchild() {}; - }; -} - -void myfcn_not_in_ns (void) { - nsp::childclass test; - - test.// -1- - ; // #1# ( "fromchild" "fromroot" ) -} - -// Test a class declared in a class, where the contents -// are in a qualified name. -// -// Thanks Michael Reiher for the concise example. - -class AAA -{ -public: - AAA(); - - void aaa(); - -private: - class Private; - Private * const d; -}; - -class AAA::Private -{ - Private() : bbb(0) { - } - - BBB* bbb; -}; - -void AAA::aaa() -{ - d->// -2- - ; // #2# ( "bbb" ) -} - -// #include files inside a namespace -// David Engster -// See revisions 8034-8037 which implement this. - -namespace another { - #include "testdoublens.hpp" -} - -void foo(void) { - - another::// -3- - ; // #3# ( "Name1" "a" "stage3_Foo" ) - - another::Name1::Name2::Foo a; - - a.// -4- - ; // #4# ( "Mumble" "get" ) -} - -// What happens if a type your looking for is scoped within a type, -// but you are one level into the completion so the originating scope -// excludes the type of the variable you are completing through? -// Thanks Martin Stein for this nice example. - -namespace ms_structs -{ - struct ms_aaa - { - int xx; - }; - - struct ms_bbb - { - struct ms_aaa yy; - }; -}; - -int fun() -{ - using namespace ms_structs; - struct ms_bbb mszz; - int uu = mszz.// -5- - ; // #5# ( "yy" ) - int kk = mszz.yy.// - 6- @TODO - bring in patch from SF - ; // #6# ( "xx" ) -} diff --git a/test/manual/cedet/tests/testsppcomplete.c b/test/manual/cedet/tests/testsppcomplete.c deleted file mode 100644 index 084d6a8687d..00000000000 --- a/test/manual/cedet/tests/testsppcomplete.c +++ /dev/null @@ -1,66 +0,0 @@ -/* testesppcomplete.cpp --- semantic-ia-utest completion engine unit tests - - Copyright (C) 2008-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 . -*/ - -/* Example provided by Hannes Janetzek */ - -struct Test { int test; }; - -#define BLA(_type) \ - _type *bla = (_type*) malloc(sizeof(_type)); - -#define BLUB(_type) \ - (_type*)malloc(sizeof(_type)); - -#define FOO(_type) \ - _type *foo = BLUB(_type); - -#define BAR(_type) \ - _type *bar = (*_type)BLUB(_type); - -int main(int argc, char *argv[]) { - BLA(Test); - bla->// -1- - ; // #1# ( "test" ) - - FOO(Test); - foo->// -2- - ; // #2# ( "test" ) - - BAR(Test); - bar->// -3- - ; // #3# ( "test" ) -} - -/* Test symref and macros together. */ - -// This function exists only so we can have a comment in a tag with this name. -void function_with_macro_name () -// %1% ( ( "testsppcomplete.c" ) ( "function_with_macro_name" "function_with_macro_name" "use_macro") ) -// Note: fwmn is in twice, once for function, and once for the constant macro below. -{ -} - -#define function_with_macro_name 1 - -int use_macro () { - int a = function_with_macro_name; -} diff --git a/test/manual/cedet/tests/teststruct.cpp b/test/manual/cedet/tests/teststruct.cpp deleted file mode 100644 index 6659b5557b8..00000000000 --- a/test/manual/cedet/tests/teststruct.cpp +++ /dev/null @@ -1,86 +0,0 @@ -// teststruct.cpp --- semantic-ia-utest completion engine unit tests - -// Copyright (C) 2008-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 . - - -// Note: initially provided by by Alex Ott. - -template -struct grammar { -public: - typedef grammar self_t; - typedef DerivedT const& embed_t; - grammar() {} - ~grammar() { } - void use_parser() const { } - void test1() { } -}; - -struct PDFbool_parser : public grammar { - PDFbool_parser() {} - template struct definition { - typedef typename scannerT::iterator_t iterator_t; - int top; - definition(const PDFbool_parser& /*self*/) { - return ; - } - const int start() const { - return top; - } - }; -}; - -int main(void) { - PDFbool_parser PDFbool_p = PDFbool_parser(); - PDFbool_p.//-1- - ; - // #1# ("definition" "embed_t" "self_t" "test1" "use_parser") -} - -// ---------------------------------------------------------------------- - -template struct Base { -public: - void interface() - { - // ... - static_cast(this)->implementation(); - // ... - } - - static void static_func() - { - // ... - Derived::static_sub_func(); - // ... - } -}; - -struct Derived : Base { - void implementation() { } - static void static_sub_func() { } -}; - -int foo () { - Derived d; - d.//-2- - ; - // #2# ("implementation" "interface" "static_func" "static_sub_func") -} diff --git a/test/manual/cedet/tests/testsubclass.cpp b/test/manual/cedet/tests/testsubclass.cpp deleted file mode 100644 index 409950cce2f..00000000000 --- a/test/manual/cedet/tests/testsubclass.cpp +++ /dev/null @@ -1,248 +0,0 @@ -// testsubclass.cpp --- unit test for analyzer and complex C++ inheritance - -// Copyright (C) 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 . - -//#include -#include "testsubclass.hh" - -void animal::moose::setFeet(int numfeet) //^1^ -{ - if (numfeet > 4) { - std::cerr << "Why would a moose have more than 4 feet?" << std::endl; - return; - } - - fFeet = numfeet; -} - -int animal::moose::getFeet() //^2^ -{ - return fFeet; -} - -void animal::moose::doNothing() //^3^ -{ - animal::moose foo(); - - fFeet = N// -15- - ; // #15# ( "NAME1" "NAME2" "NAME3" ) -} - - -void deer::moose::setAntlers(bool have_antlers) //^4^ -{ - fAntlers = have_antlers; -} - -bool deer::moose::getAntlers() //^5^ -// %1% ( ( "testsubclass.cpp" "testsubclass.hh" ) ( "deer::moose::doSomething" "deer::moose::getAntlers" "moose" ) ) -{ - return fAntlers; -} - -bool i_dont_have_symrefs() -// %2% ( ("testsubclass.cpp" ) ("i_dont_have_symrefs")) -{ -} - -void deer::moose::doSomething() //^6^ -{ - // All these functions should be identified by semantic analyzer. - getAntlers(); - setAntlers(true); - - getFeet(); - setFeet(true); - - doNothing(); - - fSomeField = true; - - fIsValid = true; -} - -void deer::alces::setLatin(bool l) { - fLatin = l; -} - -bool deer::alces::getLatin() { - return fLatin; -} - -void deer::alces::doLatinStuff(moose moosein) { - // All these functions should be identified by semantic analyzer. - getFeet(); - setFeet(true); - - getLatin(); - setLatin(true); - - doNothing(); - - deer::moose foo(); - - -} - -moose deer::alces::createMoose() -{ - moose MooseVariableName; - bool tmp; - int itmp; - bool fool; - int fast; - - MooseVariableName = createMoose(); - - doLatinStuff(MooseVariableName); - - tmp = this.f// -1- - // #1# ( "fAlcesBool" "fIsValid" "fLatin" ) - ; - - itmp = this.f// -2- - // #2# ( "fAlcesInt" "fGreek" "fIsProtectedInt" ) - ; - - tmp = f// -3- - // #3# ( "fAlcesBool" "fIsValid" "fLatin" "fool" ) - ; - - itmp = f// -4- - // #4# ( "fAlcesInt" "fGreek" "fIsProtectedInt" "fast" ) - ; - - MooseVariableName = m// -5- - // #5# ( "moose" ) - - return MooseVariableName; -} - -/** Test Scope Changes - * - * This function is rigged to make sure the scope changes to account - * for different locations in local variable parsing. - */ -int someFunction(int mPickle) -{ - moose mMoose = deer::alces::createMoose(); - - if (mPickle == 1) { - - int mOption1 = 2; - - m// -5- - // #5# ( "mMoose" "mOption1" "mPickle" ) - ; - - } else { - - int mOption2 = 2; - - m// -6- - // #6# ( "mMoose" "mOption2" "mPickle" ) - ; - } - -} - -// Thanks Ming-Wei Chang for this next example. - -namespace pub_priv { - - class A{ - private: - void private_a(){} - public: - void public_a(); - }; - - void A::public_a() { - A other_a; - - other_a.p// -7- - // #7# ( "private_a" "public_a" ) - ; - } - - int some_regular_function(){ - A a; - a.p// -8- - // #8# ( "public_a" ) - ; - return 0; - } - -} - - -/** Test Scope w/in a function (non-method) with classes using - * different levels of inheritance. - */ -int otherFunction() -{ - sneaky::antelope Antelope(1); - sneaky::jackalope Jackalope(1); - sneaky::bugalope Bugalope(1); - - Antelope.// -9- - // #9# ( "fAntyPublic" "fQuadPublic" "testAccess") - ; - - Jackalope.// -10- - // #10# ( "fBunnyPublic" "testAccess") - ; - - Jackalope// @1@ 6 - ; - Jackalope; - Jackalope; - Jackalope; - - Bugalope.// -11- - // #11# ( "fBugPublic" "testAccess") - ; - Bugalope// @2@ 3 - ; -} - -/** Test methods within each class for types of access to the baseclass. - */ - -bool sneaky::antelope::testAccess() //^7^ -{ - this.// -12- - // #12# ( "fAntyPrivate" "fAntyProtected" "fAntyPublic" "fQuadProtected" "fQuadPublic" "testAccess" ) - ; -} - -bool sneaky::jackalope::testAccess() //^8^ -{ - this.// -13- - // #13# ( "fBunnyPrivate" "fBunnyProtected" "fBunnyPublic" "fQuadProtected" "fQuadPublic" "testAccess" ) - ; -} - -bool sneaky::bugalope::testAccess() //^9^ -{ - this.// -14- - // #14# ( "fBugPrivate" "fBugProtected" "fBugPublic" "fQuadPublic" "testAccess" ) - ; -} diff --git a/test/manual/cedet/tests/testsubclass.hh b/test/manual/cedet/tests/testsubclass.hh deleted file mode 100644 index 5d795b32b10..00000000000 --- a/test/manual/cedet/tests/testsubclass.hh +++ /dev/null @@ -1,190 +0,0 @@ -// testsubclass.hh --- unit test for analyzer and complex C++ inheritance - -// Copyright (C) 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 . - -//#include -// #include - -#ifndef TESTSUBCLASS_HH -#define TESTSUBCLASS_HH - -namespace animal { - - class moose { - public: - moose() : fFeet(0), - fIsValid(false) - { } - - virtual void setFeet(int); - int getFeet(); - - void doNothing(); - - enum moose_enum { - NAME1, NAME2, NAME3 }; - - - protected: - - bool fIsValid; - int fIsProtectedInt; - - private: - int fFeet; // Usually 2 or 4. - bool fIsPrivateBool; - - }; // moose - - int two_prototypes(); - int two_prototypes(); - - class quadruped { - public: - quadruped(int a) : fQuadPrivate(a) - { } - - int fQuadPublic; - - protected: - int fQuadProtected; - - private: - int fQuadPrivate; - - }; - -} - - -namespace deer { - - class moose : public animal::moose { - public: - moose() : fAntlers(false) - { } - - void setAntlers(bool); - bool getAntlers(); - - void doSomething(); - - protected: - - bool fSomeField; - - private: - bool fAntlers; - - }; - -} // deer - -// A second namespace of the same name will test the -// namespace merging needed to resolve deer::alces -namespace deer { - - class alces : public animal::moose { - public: - alces(int lat) : fLatin(lat) - { } - - void setLatin(bool); - bool getLatin(); - - void doLatinStuff(moose moosein); // for completion testing - - moose createMoose(); // for completion testing. - - protected: - bool fAlcesBool; - int fAlcesInt; - - private: - bool fLatin; - int fGreek; - }; - -}; - -// A third namespace with classes that does protected and private inheritance. -namespace sneaky { - - class antelope : public animal::quadruped { - - public: - antelope(int a) : animal::quadruped(), - fAntyProtected(a) - {} - - int fAntyPublic; - - bool testAccess(); - - protected: - int fAntyProtected; - - private : - int fAntyPrivate; - - }; - - class jackalope : protected animal::quadruped { - - public: - jackalope(int a) : animal::quadruped(), - fBunny(a) - {} - - int fBunnyPublic; - - bool testAccess(); - - protected: - bool fBunnyProtected; - - private : - bool fBunnyPrivate; - - }; - - // Nothing specified means private. - class bugalope : /* private*/ animal::quadruped { - - public: - bugalope(int a) : animal::quadruped(), - fBug(a) - {} - - int fBugPublic; - - bool testAccess(); - protected: - bool fBugProtected; - - private : - bool fBugPrivate; - - }; - - -}; - -#endif diff --git a/test/manual/cedet/tests/testtemplates.cpp b/test/manual/cedet/tests/testtemplates.cpp deleted file mode 100644 index ed7a057df0b..00000000000 --- a/test/manual/cedet/tests/testtemplates.cpp +++ /dev/null @@ -1,149 +0,0 @@ -// testtemplates.cpp --- semantic-ia-utest completion engine unit tests - -// Copyright (C) 2008-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 . - - -// TODO - this probably means can't be part of emacs, as I don't know who this guy is. -// Written by 'Raf' - -template -class read_ref { -public: - const T* read_ref_member_one( T); - const V* read_ref_member_two(); -}; - -namespace NS { - template - class ref { - public: - read_ref operator->() { - m_// -1- - ; - // #1# ( "m_datas" ) - } - - private: - T m_datas[U]; - }; - -} - -class FooOne { -public: - int fooOneMember(); -}; - -class FooTwo { -public: - int fooTwoMember(); -}; - -class FooThree { -public: - int fooThreeMember(); - - FooOne * operator->(); -}; - -typedef ref Test; - -using NS; - -void -main(void) { - ref v; - - v->read_ref_member_one()-> // -2- - ; - // #2# ( "fooOneMember" ) - - v->read_ref_member_two()-> // -3- - ; - // #3# ( "fooTwoMember" ) - - v-> // -4- - ; - // #4# ( "read_ref_member_one" "read_ref_member_two" ) - - Test t; - - t->read_ref_member_two()-> // -5- - ; - // #5# ( "fooTwoMember" ) - - ref v2; - - v2->read_ref_member_two()-> // -6- - ; - // #6# ( "fooOneMember" ) - - /* Try all these things by also specifying the namespace in the name. */ - NS::ref v3; - - v3->read_ref_member_one()-> // -7- - ; - // #7# ( "fooOneMember" ) - - v3->read_ref_member_two()-> // -8- - ; - // #8# ( "fooTwoMember" ) - - v3->read_ref_member_two// @1@ 5 - ; - -} - -// More Namespace Magic using member constants. - -template -struct isFooLike { - static const bool value = false; -}; - -template <> -struct isFooLike { - static const bool value = true; -}; - - -template -class A { -public: - A(); - void foo() {}; -}; - - -template -class FooFour : public A::value> { -public: - bool bar() {} -}; - - -int main2() { - - FooFour ff; - - ff.// - 9- @ TODO - bring over patch from SF - ; // #9# ( "bar" "foo" ); - -} diff --git a/test/manual/cedet/tests/testtypedefs.cpp b/test/manual/cedet/tests/testtypedefs.cpp deleted file mode 100644 index c82535f9581..00000000000 --- a/test/manual/cedet/tests/testtypedefs.cpp +++ /dev/null @@ -1,155 +0,0 @@ -// testtypedefs.cpp --- Sample with some fake bits out of std::string - -// Copyright (C) 2008-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 . - -// Thanks Ming-Wei Chang for these examples. - -namespace std { - template class basic_string { - public: - void resize(int); - }; -} - -typedef std::basic_string mstring; - -using namespace std; -typedef basic_string bstring; - -int main(){ - mstring a; - a.// -1- - ; - // #1# ( "resize" ) - bstring b; - // It doesn't work here. - b.// -2- - ; - // #2# ( "resize" ) - return 0; -} - -// ------------------ - -class Bar -{ -public: - void someFunc() {} -}; - -typedef Bar new_Bar; - -template -class TBar -{ -public: - void otherFunc() {} -}; - -typedef TBar new_TBar; - -int main() -{ - new_Bar nb; - new_TBar ntb; - - nb.// -3- - ; - // #3# ("someFunc") - ntb.// -4- - ; - // #4# ("otherFunc") - - return 0; -} - -// ------------------ -// Example from Yupeng. - -typedef struct epd_info { - int a; -} epd_info_t; - -static int epd_probe(struct platform_device *pdev) -{ - struct epd_info *db; - epd_info_t db1; - - db.// -5- - ; // #5# ("a") - db1.// -6- - ;// #6# ("a") - - return 1; -} - -// ------------------ -// Example from Michel LAFON-PUYO - -typedef enum -{ - ENUM1, - ENUM2 -} e_toto; - -typedef struct -{ - int field_a; - int field_b; -} t_toto; - -// Note: Error condition from anonymous types in a typedef -// was that the first (ie - the enum) would be used in -// place of the struct. -int func(void) -{ - t_toto t; - t. // -7- - ; // #7# ( "field_a" "field_b" ) - return 0; -} - - -// ------------------ -// Example from Dixon Ryan - - -namespace NS2 { - class MyClass { - - public: - void myFunction() { } - }; -} - -typedef class NS2::MyClass* MyClassHandle; - -int dixon ( void ) { - MyClassHandle mch = getMyClassHandle(); - NS2::MyClass* mcptr = getMyClassHandle(); - - mcptr-> // -8- - ; // #8# ( "myFunction" ) - mch-> // - 9- TODO bring over patch from SF - ; // #9# ( "myFunction" ) - deleteMyClassHandle(mch); - - return 0; -} diff --git a/test/manual/cedet/tests/testusing.cpp b/test/manual/cedet/tests/testusing.cpp deleted file mode 100644 index 6f6c8542633..00000000000 --- a/test/manual/cedet/tests/testusing.cpp +++ /dev/null @@ -1,265 +0,0 @@ -// testusing.cpp --- semantic-ia-utest completion engine unit tests - -// Copyright (C) 2008-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 . - - -#include - -#include - -namespace moose { - - class MyClass; - class Point; - - typedef MyClass snerk; -} - -namespace moose { - - class Point; - class MyClass; - -} - -namespace { - - int global_variable = 0; - -}; - -using moose::MyClass; - -void someFcn() { - - MyClass f; - - f.//-1- - ; //#1# ( "getVal" "setVal" ) - -} - -// Code from Zhiqiu Kong - -namespace panda { - - using namespace bread_name; - - int func() - { - bread test; - test.//-2- - ;// #2# ( "geta" ) - return 0; - } -} - -namespace togglemoose { - - MyOtherClass::testToggle1() { //^1^ - // Impl for testToggle1 - } -} - -togglemoose::MyOtherClass::testToggle2() { //^3^ - // Impl for testToggle2 -} - -using togglemoose; - -MyOtherClass::testToggle3() { //^3^ - // Impl for testToggle3 -} - -// Local using statements and aliased types -// Code from David Engster - -void func2() -{ - using namespace somestuff; - OneClass f; - f.//-3- - ; //#3# ( "aFunc" "anInt" ) -} - -void func3() -{ - using somestuff::OneClass; - OneClass f; - f.//-4- - ; //#4# ( "aFunc" "anInt" ) -} - -// Dereferencing alias types created through 'using' statements - -// Alias with fully qualified name -void func4() -{ - otherstuff::OneClass f; - f. //-5- - ; //#5# ( "aFunc" "anInt" ) -} - -// Alias through namespace directive -void func5() -{ - using namespace otherstuff; - OneClass f; - f. //-6- - ; //#6# ( "aFunc" "anInt" ) -} - -// Check name hiding -void func6() -{ - using namespace morestuff; - OneClass f; // Alias for somestuff::OneClass - f. //-7- - ; //#7# ( "aFunc" "anInt" ) - aStruct g; // This however is morestuff::aStruct ! - g. //-8- - ; //#8# ( "anotherBar" "anotherFoo" ) -} - -// Alias of an alias -// Currently doesn't work interactively for some reason. -void func6() -{ - using namespace evenmorestuff; - OneClass f; - f. //-7- - ; //#7# ( "aFunc" "anInt" ) -} - -// Alias for struct in nested namespace, fully qualified -void func7() -{ - outer::StructNested f; - f.//-8- - ; //#8# ( "one" "two" ) -} - -// Alias for nested namespace -void func8() -{ - using namespace outerinner; - StructNested f; - AnotherStruct g; - f.//-9- - ; //#9# ( "one" "two" ) - g.//-10- - ; //#10# ( "four" "three" ) -} - -// Check conventional namespace aliases -// - fully qualified - -void func9() -{ - alias_for_somestuff::OneClass c; - c.//-11- - ; //#11# ( "aFunc" "anInt" ) - alias_for_outerinner::AnotherStruct s; - s. //-12- - ; //#12# ( "four" "three" ) -} - -// - unqualified - -void func10() -{ - using namespace alias_for_somestuff; - OneClass c2; - c2.//-13- - ; //#13# ( "aFunc" "anInt" ) - using namespace alias_for_outerinner; - AnotherStruct s2; - s2.//-14- - ; //#14# ( "four" "three" ) -} - -// Completion on namespace aliases -void func11() -{ - alias_for_somestuff:://-15- - ; //#15# ( "OneClass" "aStruct") - alias_for_outerinner:://-16- - ; //#16# ( "AnotherStruct" "StructNested" ) -} - -// make sure unfound using statements don't crash stuff. -using something::cantbe::Found; - -void unfoundfunc() -{ - NotFound notfound; // Variable can't be found. - - notfound.//-17- - ; //#17# ( ) Nothing here since this is an undefined class - -} - -// Using statements can depend on previous ones... - -void acc_using() -{ - using namespace outer; - // This is effectively like 'using namespace outer::inner' - using namespace inner; - - StructNested sn; - sn.//-18- - ; //#18# ( "one" "two" ) -} - -// Check the same outside of function scope - -using namespace outer; -using namespace inner; - -void acc_using2() -{ - StructNested sn; - sn.//-19- - ; //#19# ( "one" "two" ) -} - -// Check if scope gets correctly generated, i.e., without us providing any -// hints in the form of an existing type - -void check_scope() -{ - using namespace first; - AAA//-20- - ; //#20# ( "AAA1" "AAA2" ) -} - -void check_scope2() -{ - using namespace third; - AAA//-21- - ; //#21# ( "AAA1" "AAA2" "AAA3" ) -} - -// Make sure this also works not only in functions - -namespace check_scope3 { - using namespace first; - AAA//-22- - ; //#22# ( "AAA1" "AAA2" ) -} diff --git a/test/manual/cedet/tests/testusing.hh b/test/manual/cedet/tests/testusing.hh deleted file mode 100644 index d3b690f8542..00000000000 --- a/test/manual/cedet/tests/testusing.hh +++ /dev/null @@ -1,176 +0,0 @@ -// testusing.hh --- semantic-ia-utest completion engine unit tests - -// Copyright (C) 2008-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 . - -namespace moose { - - class Point; - - class MyClass; - -} - - -namespace moose { - - class Point; - - class MyClass { - public: - MyClass() : fVal(0) { - } - - ~MyClass() {}; - - /** - * fVal Accessors - * @{ - */ - int getVal() const { - return fVal; - } - void setVal(int Val) const { - fVal = Val; - } - /** - * @} - */ - - private: - int fVal; - }; - -} - -namespace togglemoose { - - class MyOtherClass { - public: - int testToggle1(); - int testToggle2(); - int testToggle3(); - }; -} - -namespace deer { - - class Pickle; - -}; - -// Code from Zhiqiu Kong - -#ifndef BREAD_H -#define BREAD_H - -namespace bread_name { - class bread - { - public: - void geta(); - private: - int m_a; - int m_b; - }; -} - -#endif - -// Code from David Engster -// Creating alias types through 'using' trickery - -namespace somestuff { - class OneClass { - public: - void aFunc(); - int anInt; - }; - struct aStruct { - int foo; - int bar; - }; -} - -namespace otherstuff { - // make otherstuff::OneClass an alias for somestuff::OneClass - using somestuff::OneClass; -} - -namespace morestuff { - // make morestuff an alias namespace for somestuff - using namespace somestuff; - // but hide aStruct with own type - struct aStruct { - int anotherFoo; - int anotherBar; - }; -} - -// We can also create an alias for an alias -namespace evenmorestuff { - using otherstuff::OneClass; -} - -// Now with nested namespaces -namespace outer { - namespace inner { - struct StructNested { - int one; - int two; - }; - struct AnotherStruct { - int three; - int four; - }; - } -} - -// Namespace which pulls in one of its own nested namespaces -namespace first { - class AAA1; - namespace second { - class AAA2; - } - // Elevate nested namespace into first one - using namespace second; -} - -namespace third { - using namespace first; - class AAA3; -} - - -// Elevate the first struct into 'outer' -// so that we can access it via 'outer::StructNested' -namespace outer { - using outer::inner::StructNested; -} - -// Create an alias for a nested namespace -namespace outerinner { - // equivalent to 'namespace outerinner = outer::inner;' - using namespace outer::inner; -} - -// Create namespace alias -namespace alias_for_somestuff = somestuff; -// Same for nested namespace -namespace alias_for_outerinner = outer::inner; diff --git a/test/manual/cedet/tests/testvarnames.c b/test/manual/cedet/tests/testvarnames.c deleted file mode 100644 index e796eb285c6..00000000000 --- a/test/manual/cedet/tests/testvarnames.c +++ /dev/null @@ -1,104 +0,0 @@ -/* testvarnames.cpp --- semantic-ia-utest completion engine unit tests - - Copyright (C) 2008-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 . - -*/ - -struct independent { - int indep_1; - int indep_2; -}; - -struct independent var_indep_struct; - -struct { - int unnamed_1; - int unnamed_2; -} var_unnamed_struct; - -struct { - int unnamed_3; - int unnamed_4; -} var_un_2, var_un_3; - -struct inlinestruct { - int named_1; - int named_2; -} var_named_struct; - -struct inline2struct { - int named_3; - int named_4; -} var_n_2, var_n_3; - -/* Structures with names that then declare variables - * should also be completable. - * - * Getting this to work is the bugfix in semantic-c.el CVS v 1.122 - */ -struct inlinestruct in_var1; -struct inline2struct in_var2; - -/* - * Structures (or any types) could have the same name as a variable. - * Make sure we complete vars over types. - * - * See cedet-devel mailing list Dec 23, 2013 for details. - */ -struct varorstruct {}; -int varorstruct; - -int assigntovarorstruct; - -int test_1(int var_arg1) { - - var_// -1- - ; // #1# ("var_arg1" "var_indep_struct" "var_n_2" "var_n_3" "var_named_struct" "var_un_2" "var_un_3" "var_unnamed_struct") - - var_indep_struct.// -2- - ; // #2# ( "indep_1" "indep_2" ) - - var_unnamed_struct.// -3- - ; // #3# ( "unnamed_1" "unnamed_2" ) - - var_named_struct.// -4- - ; // #4# ( "named_1" "named_2" ) - - var_un_2.// -5- - ; // #5# ( "unnamed_3" "unnamed_4" ) - var_un_3.// -6- - ; // #6# ( "unnamed_3" "unnamed_4" ) - - var_n_2.// -7- - ; // #7# ( "named_3" "named_4" ) - var_n_3.// -8- - ; // #8# ( "named_3" "named_4" ) - - in_// -9- - ; // #9# ( "in_var1" "in_var2" ) - - in_var1.// -10- - ; // #10# ( "named_1" "named_2") - in_var2.// -11- - ; // #11# ( "named_3" "named_4") - - varorstruct = assign// -12- - ; // #12# ( "assigntovarorstruct" ) -} diff --git a/test/manual/cedet/tests/testvarnames.java b/test/manual/cedet/tests/testvarnames.java deleted file mode 100644 index 7ed9785fc07..00000000000 --- a/test/manual/cedet/tests/testvarnames.java +++ /dev/null @@ -1,60 +0,0 @@ -// testvarnames.java --- Semantic unit test for Java - -// Copyright (C) 2009-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 . - -package tests; - -/** - * - * - * Created: 02/17/14 - * - * @author Eric M. Ludlam - * @version - * @since - */ -public class testvarnames { - - public class varorclass { - public static long misclongvalue; - }; - - public static varorclass varoftypevarorclass = NULL; - - public static long varorclass = 1; - - public static long assignintovar = 1; - - public static varorclass classassign = NULL; - - static public void main(String [] args) { - - varorclass = assign// -1- - // #1# ( "assignintovar" ) - ; - - varoftypevarorclass = clas// -2- - // #2# ( "classassign" ) - - varoftypevarorclass.misc//-3- - // #3# ( "misclongvalue" ) - } - -} // testvarnames diff --git a/test/manual/cedet/tests/testwisent.wy b/test/manual/cedet/tests/testwisent.wy deleted file mode 100644 index 49eb5780f4b..00000000000 --- a/test/manual/cedet/tests/testwisent.wy +++ /dev/null @@ -1,85 +0,0 @@ -;; testwisent.wy --- unit test support file for semantic-utest-ia - -;; Copyright (C) 2008-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: -;; -;; Parser for nothing in particular mode - -%languagemode nothing-mode -%parsetable wisent-nothing-parser-tables -%keywordtable wisent-nothing-keywords -%tokentable wisent-nothing-tokens -%languagemode nothing-mode -%setupfunction wisent-nothing-default-setup - -%start goal - -;;; Punctuation -%type ;;syntax "\\(\\s.\\|\\s$\\|\\s'\\)+" matchdatatype string - -%token DOT "." -%token COMA "," -%token COLONCOLON "::" -%token COLON ":" -%token SEMICOLON ";" - -;;; KEYWORDS -%type - -%keyword COLONOSCOPY "colonoscopy" -%keyword SEMISOMETHING "semisomething" - -%% - -goal - ;; Misc - : COLON ;; -1- - ;; #1# ( "COLONCOLON" "COLON" "COLONOSCOPY" ) - | SEMI ;; -2- - ;; #2# ( "SEMI_useless_rule" "SEMICOLON" "SEMISOMETHING" ) - | thing ;; -3- - ;; #3# ( "thing_term_1" "thing_term_2" ) - ; - -SEMI_useless_rule - : - ; - -thing_term_1 - : - ; - -thing_term_2 - : - ; - -%% -(define-lex wisent-nothing-lexer - "Lexical analyzer to handle nothing in particular buffers." - ;; semantic-lex-newline - semantic-lex-ignore-whitespace - semantic-lex-ignore-newline - semantic-lex-ignore-comments - - semantic-lex-default-action - ) - -;; testwisent.wy ends here \ No newline at end of file