]> git.eshelyaron.com Git - emacs.git/commitdiff
Test friends
authorEric Ludlam <zappo@gnu.org>
Wed, 26 Nov 2014 19:27:10 +0000 (14:27 -0500)
committerEdward John Steere <edward.steere@gmail.com>
Wed, 25 Jan 2017 15:47:55 +0000 (17:47 +0200)
* 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.

test/manual/cedet/cedet/semantic/tests/testfriends.cpp

index f84ed5a21909008dd393c61e05f5a189c81629e6..ff6e440a41337777718836cedd26eb71bfbe8349 100644 (file)
@@ -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")
+}