diff options
Diffstat (limited to 'test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp')
-rw-r--r-- | test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp new file mode 100644 index 00000000000..54941fa974a --- /dev/null +++ b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp @@ -0,0 +1,214 @@ +// testdoublens.cpp --- semantic-ia-utest completion engine unit tests + +// Copyright (C) 2008-2022 Free Software Foundation, Inc. + +// Author: Eric M. Ludlam <zappo@gnu.org> + +// This file is part of GNU Emacs. + +// GNU Emacs is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// GNU Emacs is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. + +#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") +} |