Home | History | Annotate | Download | only in Index
      1 // RUN: rm -rf %t
      2 // RUN: mkdir %t
      3 // RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng -target x86_64-apple-darwin10 %s > %t/out
      4 // RUN: FileCheck %s < %t/out
      5 
      6 // Ensure that XML we generate is not invalid.
      7 // RUN: FileCheck %s -check-prefix=WRONG < %t/out
      8 // WRONG-NOT: CommentXMLInvalid
      9 // rdar://12378714
     10 
     11 /**
     12  * \brief plain c++ class
     13 */
     14 class Test
     15 {
     16 public:
     17 /**
     18  * \brief plain c++ constructor
     19 */
     20     Test () : reserved (new data()) {}
     21 
     22 /**
     23  * \brief plain c++ member function
     24 */
     25     unsigned getID() const
     26     {
     27         return reserved->objectID;
     28     }
     29 /**
     30  * \brief plain c++ destructor
     31 */
     32     ~Test () {}
     33 protected:
     34     struct data {
     35         unsigned objectID;
     36     };
     37 /**
     38  * \brief plain c++ data field
     39 */
     40     data* reserved;
     41 };
     42 // CHECK: <Declaration>class Test {}</Declaration>
     43 // CHECK: <Declaration>Test() : reserved(new Test::data())</Declaration>
     44 // CHECK: <Declaration>unsigned int getID() const</Declaration>
     45 // CHECK: <Declaration>~Test()</Declaration>
     46 // CHECK: <Declaration>Test::data *reserved</Declaration>
     47 
     48 
     49 class S {
     50 /**
     51  * \brief Aaa
     52 */
     53   friend class Test;
     54 /**
     55  * \brief Bbb
     56 */
     57   friend void foo() {}
     58 
     59 /**
     60  * \brief Ccc
     61 */
     62   friend int int_func();
     63 
     64 /**
     65  * \brief Ddd
     66 */
     67   friend bool operator==(const Test &, const Test &);
     68 
     69 /**
     70  * \brief Eee
     71 */
     72 template <typename T> friend void TemplateFriend();
     73 
     74 /**
     75  * \brief Eee
     76 */
     77   template <typename T> friend class TemplateFriendClass;
     78 
     79 };
     80 // CHECK: <Declaration>friend class Test</Declaration>
     81 // CHECK: <Declaration>friend void foo()</Declaration>
     82 // CHECK: <Declaration>friend int int_func()</Declaration>
     83 // CHECK: <Declaration>friend bool operator==(const Test &amp;, const Test &amp;)</Declaration>
     84 // CHECK: <Declaration>friend template &lt;typename T&gt; void TemplateFriend()</Declaration>
     85 // CHECK: <Declaration>friend template &lt;typename T&gt; class TemplateFriendClass</Declaration>
     86 
     87 namespace test0 {
     88   namespace ns {
     89     void f(int);
     90   }
     91 
     92   struct A {
     93 /**
     94  * \brief Fff
     95 */
     96     friend void ns::f(int a);
     97   };
     98 }
     99 // CHECK: <Declaration>friend void f(int a)</Declaration>
    100 
    101 namespace test1 {
    102   template <class T> struct Outer {
    103     void foo(T);
    104     struct Inner {
    105 /**
    106  * \brief Ggg
    107 */
    108       friend void Outer::foo(T);
    109     };
    110   };
    111 }
    112 // CHECK: <Declaration>friend void foo(T)</Declaration>
    113 
    114 namespace test2 {
    115   namespace foo {
    116     void Func(int x);
    117   }
    118 
    119   class Bar {
    120 /**
    121  * \brief Hhh
    122 */
    123     friend void ::test2::foo::Func(int x);
    124   };
    125 }
    126 // CHECK: <Declaration>friend void Func(int x)</Declaration>
    127 
    128 namespace test3 {
    129   template<class T> class vector {
    130    public:
    131     vector(int i) {}
    132 /**
    133  * \brief Iii
    134 */
    135     void f(const T& t = T()) {}
    136   };
    137   class A {
    138    private:
    139 /**
    140  * \brief Jjj
    141 */
    142     friend void vector<A>::f(const A&);
    143   };
    144 }
    145 // CHECK: <Declaration>void f(const T &amp;t = T())</Declaration>
    146 // CHECK: <Declaration>friend void f(const test3::A &amp;)</Declaration>
    147 
    148 class MyClass
    149 {
    150 /**
    151  * \brief plain friend test.
    152 */
    153   friend class MyClass;
    154 };
    155 // CHECK: <Declaration>friend  class MyClass</Declaration>
    156 
    157 template<class _Tp> class valarray
    158 {
    159 private:
    160 /**
    161  * \brief template friend test.
    162 */
    163     template <class T> friend class valarray;
    164 };
    165 // CHECK: <Declaration>template &lt;class T&gt; class valarray</Declaration>
    166 // CHECK: <Declaration>friend template &lt;class T&gt; class valarray</Declaration>
    167 
    168 class gslice
    169 {
    170   valarray<unsigned> __size_;
    171 };
    172