blob: 46ead4f6425686459bd2bde9d0221653a501c387 [file] [log] [blame]
Fariborz Jahanianbf967be2012-10-10 18:34:52 +00001// 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 %s > %t/out
4// RUN: FileCheck %s < %t/out
Fariborz Jahanian749ace62012-10-11 23:52:50 +00005// Test to search overridden methods for documentation when overriding method has none. rdar://12378793
Fariborz Jahanianbf967be2012-10-10 18:34:52 +00006
7// Ensure that XML we generate is not invalid.
8// RUN: FileCheck %s -check-prefix=WRONG < %t/out
9// WRONG-NOT: CommentXMLInvalid
10
11@protocol P
12- (void)METH:(id)PPP;
13@end
14
15@interface Root<P>
16/**
17 * \param[in] AAA ZZZ
18 */
19- (void)METH:(id)AAA;
20@end
21
Fariborz Jahanian154120c2012-12-20 19:54:13 +000022// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>METH:</Name><USR>c:objc(cs)Root(im)METH:</USR><Declaration>- (void)METH:(id)AAA;</Declaration><Parameters><Parameter><Name>AAA</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> ZZZ </Para></Discussion></Parameter></Parameters></Function>]
Dmitri Gribenkob164af62012-11-15 18:37:27 +000023
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000024@interface Sub : Root
25@end
26
27@interface Sub (CAT)
28- (void)METH:(id)BBB;
29@end
30
Fariborz Jahanian154120c2012-12-20 19:54:13 +000031// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>METH:</Name><USR>c:objc(cs)Root(im)METH:</USR><Declaration>- (void)METH:(id)BBB;</Declaration><Parameters><Parameter><Name>BBB</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> ZZZ </Para></Discussion></Parameter></Parameters></Function>]
Dmitri Gribenkob164af62012-11-15 18:37:27 +000032
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000033@implementation Sub(CAT)
34- (void)METH:(id)III {}
35@end
36
Fariborz Jahanian154120c2012-12-20 19:54:13 +000037// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>METH:</Name><USR>c:objc(cs)Root(im)METH:</USR><Declaration>- (void)METH:(id)III;</Declaration><Parameters><Parameter><Name>III</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> ZZZ </Para></Discussion></Parameter></Parameters></Function>]
Dmitri Gribenkob164af62012-11-15 18:37:27 +000038
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000039@interface Redec : Root
40@end
41
42@interface Redec()
43/**
Dmitri Gribenkob164af62012-11-15 18:37:27 +000044 * \param[in] AAA input value
45 * \param[out] CCC output value is int
46 * \param[in] BBB 2nd input value is double
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000047 */
48- (void)EXT_METH:(id)AAA : (double)BBB : (int)CCC;
49@end
50
Fariborz Jahanian154120c2012-12-20 19:54:13 +000051// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>EXT_METH:::</Name><USR>c:objc(cs)Redec(im)EXT_METH:::</USR><Declaration>- (void)EXT_METH:(id)AAA:(double)BBB:(int)CCC;</Declaration><Parameters><Parameter><Name>AAA</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> input value </Para></Discussion></Parameter><Parameter><Name>BBB</Name><Index>1</Index><Direction isExplicit="1">in</Direction><Discussion><Para> 2nd input value is double </Para></Discussion></Parameter><Parameter><Name>CCC</Name><Index>2</Index><Direction isExplicit="1">out</Direction><Discussion><Para> output value is int </Para></Discussion></Parameter></Parameters></Function>]
Dmitri Gribenkob164af62012-11-15 18:37:27 +000052
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000053@implementation Redec
54- (void)EXT_METH:(id)PPP : (double)QQQ : (int)RRR {}
55@end
56
Fariborz Jahanian154120c2012-12-20 19:54:13 +000057// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-3]]" column="1"><Name>EXT_METH:::</Name><USR>c:objc(cs)Redec(im)EXT_METH:::</USR><Declaration>- (void)EXT_METH:(id)PPP:(double)QQQ:(int)RRR;</Declaration><Parameters><Parameter><Name>PPP</Name><Index>0</Index><Direction isExplicit="1">in</Direction><Discussion><Para> input value </Para></Discussion></Parameter><Parameter><Name>QQQ</Name><Index>1</Index><Direction isExplicit="1">in</Direction><Discussion><Para> 2nd input value is double </Para></Discussion></Parameter><Parameter><Name>RRR</Name><Index>2</Index><Direction isExplicit="1">out</Direction><Discussion><Para> output value is int </Para></Discussion></Parameter></Parameters></Function>]
Dmitri Gribenkob164af62012-11-15 18:37:27 +000058
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000059struct Base {
60 /// \brief Does something.
61 /// \param AAA argument to foo_pure.
62 virtual void foo_pure(int AAA) = 0;
63
Dmitri Gribenkob164af62012-11-15 18:37:27 +000064// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_pure</Name><USR>c:@S@Base@F@foo_pure#I#</USR><Declaration>virtual void foo_pure(int AAA) = 0</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>AAA</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to foo_pure.</Para></Discussion></Parameter></Parameters></Function>]
65
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000066 /// \brief Does something.
67 /// \param BBB argument to defined virtual.
68 virtual void foo_inline(int BBB) {}
69
Dmitri Gribenkob164af62012-11-15 18:37:27 +000070// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_inline</Name><USR>c:@S@Base@F@foo_inline#I#</USR><Declaration>virtual void foo_inline(int BBB)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>BBB</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to defined virtual.</Para></Discussion></Parameter></Parameters></Function>]
71
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000072 /// \brief Does something.
73 /// \param CCC argument to undefined virtual.
74 virtual void foo_outofline(int CCC);
Dmitri Gribenkob164af62012-11-15 18:37:27 +000075
76// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_outofline</Name><USR>c:@S@Base@F@foo_outofline#I#</USR><Declaration>virtual void foo_outofline(int CCC)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>CCC</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to undefined virtual.</Para></Discussion></Parameter></Parameters></Function>]
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000077};
78
79void Base::foo_outofline(int RRR) {}
80
Dmitri Gribenkob164af62012-11-15 18:37:27 +000081// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="12"><Name>foo_outofline</Name><USR>c:@S@Base@F@foo_outofline#I#</USR><Declaration>void foo_outofline(int RRR)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>RRR</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to undefined virtual.</Para></Discussion></Parameter></Parameters></Function>]
82
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000083struct Derived : public Base {
84 virtual void foo_pure(int PPP);
85
Dmitri Gribenkob164af62012-11-15 18:37:27 +000086// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_pure</Name><USR>c:@S@Base@F@foo_pure#I#</USR><Declaration>virtual void foo_pure(int PPP)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>PPP</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to foo_pure.</Para></Discussion></Parameter></Parameters></Function>]
87
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000088 virtual void foo_inline(int QQQ) {}
Dmitri Gribenkob164af62012-11-15 18:37:27 +000089
90// CHECK: FullCommentAsXML=[<Function isInstanceMethod="1" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="16"><Name>foo_inline</Name><USR>c:@S@Base@F@foo_inline#I#</USR><Declaration>virtual void foo_inline(int QQQ)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>QQQ</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to defined virtual.</Para></Discussion></Parameter></Parameters></Function>]
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000091};
92
93/// \brief Does something.
94/// \param DDD a value.
95void foo(int DDD);
96
Dmitri Gribenkob164af62012-11-15 18:37:27 +000097// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@F@foo#I#</USR><Declaration>void foo(int DDD)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>DDD</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> a value.</Para></Discussion></Parameter></Parameters></Function>]
98
Fariborz Jahanianbf967be2012-10-10 18:34:52 +000099void foo(int SSS) {}
100
Dmitri Gribenkob164af62012-11-15 18:37:27 +0000101// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@F@foo#I#</USR><Declaration>void foo(int SSS)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>SSS</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> a value.</Para></Discussion></Parameter></Parameters></Function>]
102
Fariborz Jahanianbf967be2012-10-10 18:34:52 +0000103/// \brief Does something.
Dmitri Gribenkob164af62012-11-15 18:37:27 +0000104/// \param EEE argument to function decl.
Fariborz Jahanianbf967be2012-10-10 18:34:52 +0000105void foo1(int EEE);
106
Dmitri Gribenkob164af62012-11-15 18:37:27 +0000107// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo1</Name><USR>c:@F@foo1#I#</USR><Declaration>void foo1(int EEE)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>EEE</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to function decl.</Para></Discussion></Parameter></Parameters></Function>]
108
Fariborz Jahanianbf967be2012-10-10 18:34:52 +0000109void foo1(int TTT);
110
Dmitri Gribenkob164af62012-11-15 18:37:27 +0000111// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo1</Name><USR>c:@F@foo1#I#</USR><Declaration>void foo1(int TTT)</Declaration><Abstract><Para> Does something. </Para></Abstract><Parameters><Parameter><Name>TTT</Name><Index>0</Index><Direction isExplicit="0">in</Direction><Discussion><Para> argument to function decl.</Para></Discussion></Parameter></Parameters></Function>]
112
Fariborz Jahanian6553c682012-10-15 18:58:50 +0000113/// \brief Documentation
114/// \tparam BBB The type, silly.
115/// \tparam AAA The type, silly as well.
116template<typename AAA, typename BBB>
117void foo(AAA, BBB);
118
Dmitri Gribenkob164af62012-11-15 18:37:27 +0000119// CHECK: FullCommentAsXML=[<Function templateKind="template" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@FT@&gt;2#T#Tfoo#t0.0#t0.1#</USR><Declaration>template &lt;typename AAA, typename BBB&gt; void foo(AAA, BBB)</Declaration><Abstract><Para> Documentation </Para></Abstract><TemplateParameters><Parameter><Name>AAA</Name><Index>0</Index><Discussion><Para> The type, silly as well.</Para></Discussion></Parameter><Parameter><Name>BBB</Name><Index>1</Index><Discussion><Para> The type, silly. </Para></Discussion></Parameter></TemplateParameters></Function>]
120
Fariborz Jahanian6553c682012-10-15 18:58:50 +0000121template<typename PPP, typename QQQ>
122void foo(PPP, QQQ);
123
Dmitri Gribenkob164af62012-11-15 18:37:27 +0000124// CHECK: FullCommentAsXML=[<Function templateKind="template" file="{{[^"]+}}overriding-method-comments.mm" line="[[@LINE-2]]" column="6"><Name>foo</Name><USR>c:@FT@&gt;2#T#Tfoo#t0.0#t0.1#</USR><Declaration>template &lt;typename PPP, typename QQQ&gt; void foo(PPP, QQQ)</Declaration><Abstract><Para> Documentation </Para></Abstract><TemplateParameters><Parameter><Name>PPP</Name><Index>0</Index><Discussion><Para> The type, silly as well.</Para></Discussion></Parameter><Parameter><Name>QQQ</Name><Index>1</Index><Discussion><Para> The type, silly. </Para></Discussion></Parameter></TemplateParameters></Function>]
Fariborz Jahanian6553c682012-10-15 18:58:50 +0000125