emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/merge-cedet-tests 23862f3 023/316: Test friends


From: Edward John Steere
Subject: [Emacs-diffs] scratch/merge-cedet-tests 23862f3 023/316: Test friends
Date: Fri, 27 Jan 2017 20:03:22 +0000 (UTC)

branch: scratch/merge-cedet-tests
commit 23862f3d52080a15823a448ff2d9c98a9c6920c8
Author: Eric Ludlam <address@hidden>
Commit: Edward John Steere <address@hidden>

    Test friends
    
    * test/manual/cedet/cedet/semantic/tests/testfriends.cpp:
     (Af): Add a friend of C w/out the CLASS token. (C): New.  (scA, scB,
     scC, scD): New test classes. (main): New (scA::PublicMethod,
     scB::b_pub_method, scC::c_pub_method) (scD::d_pub_method): New.
---
 .../cedet/cedet/semantic/tests/testfriends.cpp     |   94 +++++++++++++++++++-
 1 file changed, 93 insertions(+), 1 deletion(-)

diff --git a/test/manual/cedet/cedet/semantic/tests/testfriends.cpp 
b/test/manual/cedet/cedet/semantic/tests/testfriends.cpp
index f84ed5a..ff6e440 100644
--- a/test/manual/cedet/cedet/semantic/tests/testfriends.cpp
+++ b/test/manual/cedet/cedet/semantic/tests/testfriends.cpp
@@ -14,7 +14,9 @@ public:
 private:
   int privateVar;
 
-  friend class B;
+  friend class B; // Full class friend format.
+
+  friend C; // Abbreviated friend format.
 
 };
 
@@ -26,6 +28,13 @@ public:
 
 };
 
+class C
+{
+public:
+  int testC();
+  int testAC();
+
+};
 
 int B::testB() {
   Af classA;
@@ -35,3 +44,86 @@ int B::testB() {
 
 int B::testAB() { // %1% ( ( "testfriends.cpp" ) ( "B" "B::testAB" ) )
 }
+
+
+// Test friends when subclassing.
+class scA : public scB, public scC, public scD
+{
+public:
+  friend class scB;
+  friend scC;
+
+private:
+
+  int data;
+
+public:
+
+  int PublicMethod();
+
+};
+
+class scB
+{
+public:
+  int b_pub_method();
+protected:
+  int b_prot_method();
+private:
+  int b_priv_method();
+};
+
+
+class scC
+{
+public:
+  int c_pub_method();
+protected:
+  int c_prot_method();
+private:
+  int c_priv_method();
+};
+
+class scD // Not a friend
+{
+public:
+  int d_pub_method();
+protected:
+  int d_prot_method();
+private:
+  int d_priv_method();
+};
+
+
+int main()
+{
+  scA aclass;
+
+  aclass. //-2-
+    ; //#2# ( "PublicMethod" "b_pub_method" "c_pub_method" "d_pub_method")
+}
+
+
+int scA::PublicMethod() {
+  this. // -3-
+    ; // #3# ( "PublicMethod" "b_prot_method" "b_pub_method" "c_prot_method" 
"c_pub_method" "d_prot_method" "d_pub_method" "data")
+}
+
+int scB::b_pub_method() {
+  scA myfriend;
+  myfriend. // -4-
+    ; // #4# ( "PublicMethod" "b_priv_method" "b_prot_method" "b_pub_method" 
"c_pub_method" "d_pub_method" "data")
+}
+
+int scC::c_pub_method() {
+  scA myfriend;
+  myfriend. // -5-
+    ; // #5# ( "PublicMethod" "b_pub_method" "c_priv_method" "c_prot_method" 
"c_pub_method" "d_pub_method" "data")
+}
+
+int scD::d_pub_method() {
+  scA myfriend;
+  // The NOT FRIEND can't see 'data' which is private to scA
+  myfriend. // -6-
+    ; // #6# ( "PublicMethod" "b_pub_method" "c_pub_method" "d_priv_method" 
"d_prot_method" "d_pub_method")
+}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]