1 // Note: the run lines follow their respective tests, since line/column numbers
2 // matter in this test.
3 
4 /// This is T1.
5 template<typename T>
T1(T t)6 void T1(T t) { }
7 
8 /// This is T2.
9 template<typename T>
T2(T t)10 void T2(T t) { }
11 
12 /// This is T2<int>.
13 template<>
T2(int t)14 void T2(int t) { }
15 
test_CC1()16 void test_CC1() {
17 
18 }
19 
20 // Check that implicit instantiations of class templates and members pick up
21 // comments from class templates and specializations.
22 
23 /// This is T3.
24 template<typename T>
25 class T3 {
26 public:
27   /// This is T4.
28   static void T4();
29 
30   /// This is T5.
31   static int T5;
32 
33   /// This is T6.
34   void T6();
35 
36   /// This is T7.
37   int T7;
38 
39   /// This is T8.
40   class T8 {};
41 
42   /// This is T9.
43   enum T9 {
44     /// This is T10.
45     T10
46   };
47 
48   /// This is T11.
49   template<typename U>
T11(U t)50   void T11(U t) {}
51 
52   typedef T3<double> T12;
53 };
54 
test_CC2_CC3_CC4()55 void test_CC2_CC3_CC4() {
56   T3<int>::T4();
57   T3<int> t3;
58   t3.T6();
59   T3<int>::T8 t8;
60 }
61 
62 /// This is T100.
63 template<typename T, typename U>
64 class T100 {
65 };
66 
67 /// This is T100<int, T>.
68 template<typename T>
69 class T100<int, T> {
70 public:
71   /// This is T101.
72   static void T101();
73 
74   /// This is T102.
75   static int T102;
76 
77   /// This is T103.
78   void T103();
79 
80   /// This is T104.
81   int T104;
82 
83   /// This is T105.
84   class T105 {};
85 
86   /// This is T106.
87   enum T106 {
88     /// This is T107.
89     T107
90   };
91 
92   /// This is T108.
93   template<typename U>
T108(U t)94   void T108(U t) {}
95 
96   typedef T100<double, T> T109;
97 
98   typedef T100<double, double> T110;
99 };
100 
test_CC5_CC6_CC7()101 void test_CC5_CC6_CC7() {
102   T100<int, long>::T101();
103   T100<int, long> t100;
104   t100.T103();
105   T100<int, long>::T105 t105;
106 }
107 
108 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:17:1 %s | FileCheck -check-prefix=CHECK-CC1 %s
109 // CHECK-CC1: FunctionTemplate:{ResultType void}{TypedText T1}{{.*}}(brief comment: This is T1.)
110 // CHECK-CC1: FunctionTemplate:{ResultType void}{TypedText T2}{{.*}}(brief comment: This is T2.)
111 
112 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:56:12 %s | FileCheck -check-prefix=CHECK-CC2 %s
113 // CHECK-CC2: CXXMethod:{ResultType void}{TypedText T4}{{.*}}(brief comment: This is T4.)
114 // CHECK-CC2: VarDecl:{ResultType int}{TypedText T5}{{.*}}(brief comment: This is T5.)
115 
116 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:58:6 %s | FileCheck -check-prefix=CHECK-CC3 %s
117 // CHECK-CC3: FunctionTemplate:{ResultType void}{TypedText T11}{{.*}}(brief comment: This is T11.)
118 // CHECK-CC3: CXXMethod:{ResultType void}{TypedText T6}{{.*}}(brief comment: This is T6.)
119 // CHECK-CC3: FieldDecl:{ResultType int}{TypedText T7}{{.*}}(brief comment: This is T7.)
120 
121 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:59:12 %s | FileCheck -check-prefix=CHECK-CC4 %s
122 // CHECK-CC4: EnumConstantDecl:{ResultType T3<int>::T9}{TypedText T10}{{.*}}(brief comment: This is T10.)
123 // FIXME: after we implement propagating comments through typedefs, this
124 // typedef for implicit instantiation should pick up the documentation
125 // comment from class template.
126 // CHECK-CC4: TypedefDecl:{TypedText T12}
127 // CHECK-CC4-SHOULD-BE: TypedefDecl:{TypedText T12}{{.*}}(brief comment: This is T3.)
128 // CHECK-CC4: ClassDecl:{TypedText T8}{{.*}}(brief comment: This is T8.)
129 // CHECK-CC4: EnumDecl:{TypedText T9}{{.*}}(brief comment: This is T9.)
130 
131 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:102:20 %s | FileCheck -check-prefix=CHECK-CC5 %s
132 // CHECK-CC5: CXXMethod:{ResultType void}{TypedText T101}{{.*}}(brief comment: This is T101.)
133 // CHECK-CC5: VarDecl:{ResultType int}{TypedText T102}{{.*}}(brief comment: This is T102.)
134 
135 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:104:8 %s | FileCheck -check-prefix=CHECK-CC6 %s
136 // CHECK-CC6: CXXMethod:{ResultType void}{TypedText T103}{{.*}}(brief comment: This is T103.)
137 // CHECK-CC6: FieldDecl:{ResultType int}{TypedText T104}{{.*}}(brief comment: This is T104.)
138 // CHECK-CC6: FunctionTemplate:{ResultType void}{TypedText T108}{{.*}}(brief comment: This is T108.)
139 
140 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:105:20 %s | FileCheck -check-prefix=CHECK-CC7 %s
141 // CHECK-CC7: ClassDecl:{TypedText T105}{{.*}}(brief comment: This is T105.)
142 // CHECK-CC7: EnumDecl:{TypedText T106}{{.*}}(brief comment: This is T106.)
143 // CHECK-CC7: EnumConstantDecl:{ResultType T100<int, long>::T106}{TypedText T107}{{.*}}(brief comment: This is T107.)
144 // FIXME: after we implement propagating comments through typedefs, these two
145 // typedefs for implicit instantiations should pick up the documentation
146 // comment from class template.
147 // CHECK-CC7: TypedefDecl:{TypedText T109}
148 // CHECK-CC7: TypedefDecl:{TypedText T110}
149 // CHECK-CC7-SHOULD-BE: TypedefDecl:{TypedText T109}{{.*}}(brief comment: This is T100.)
150 // CHECK-CC7-SHOULD-BE: TypedefDecl:{TypedText T110}{{.*}}(brief comment: This is T100.)
151 
152