1
+ using System ;
2
+
3
+ namespace CppAst . Tests
4
+ {
5
+
6
+ public class TestMetaAttribute : InlineTestBase
7
+ {
8
+ [ Test ]
9
+ public void TestNamespaceMetaAttribute ( )
10
+ {
11
+ ParseAssert ( @"
12
+
13
+ #if !defined(__cppast)
14
+ #define __cppast(...)
15
+ #endif
16
+
17
+ namespace __cppast(script, is_browsable=true, desc=""a namespace test"") TestNs{
18
+
19
+ }
20
+
21
+ " , compilation =>
22
+ {
23
+ Assert . False ( compilation . HasErrors ) ;
24
+
25
+ //annotate attribute support on namespace
26
+ var ns = compilation . Namespaces [ 0 ] ;
27
+
28
+ Assert . IsTrue ( ns . MetaAttributes . QueryArgumentAsBool ( "script" , false ) ) ;
29
+ Assert . IsFalse ( ! ns . MetaAttributes . QueryArgumentAsBool ( "is_browsable" , false ) ) ;
30
+ Assert . AreEqual ( "a namespace test" , ns . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
31
+
32
+ }
33
+ ) ;
34
+ }
35
+
36
+ [ Test ]
37
+ public void TestClassMetaAttribute ( )
38
+ {
39
+
40
+ ParseAssert ( @"
41
+
42
+ #if !defined(__cppast)
43
+ #define __cppast(...)
44
+ #endif
45
+
46
+ class __cppast(script, is_browsable=true, desc=""a class"") TestClass
47
+ {
48
+ public:
49
+ __cppast(desc=""a member function"")
50
+ __cppast(desc2=""a member function 2"")
51
+ void TestMemberFunc();
52
+
53
+ __cppast(desc=""a member field"")
54
+ __cppast(desc2=""a member field 2"")
55
+ int X;
56
+ };
57
+
58
+ " , compilation =>
59
+ {
60
+ Assert . False ( compilation . HasErrors ) ;
61
+
62
+ var cppClass = compilation . Classes [ 0 ] ;
63
+ Assert . IsTrue ( cppClass . MetaAttributes . QueryArgumentAsBool ( "script" , false ) ) ;
64
+ Assert . IsFalse ( ! cppClass . MetaAttributes . QueryArgumentAsBool ( "is_browsable" , false ) ) ;
65
+ Assert . AreEqual ( "a class" , cppClass . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
66
+
67
+ Assert . AreEqual ( 1 , cppClass . Functions . Count ) ;
68
+ Assert . AreEqual ( "a member function" , cppClass . Functions [ 0 ] . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
69
+ Assert . AreEqual ( "a member function 2" , cppClass . Functions [ 0 ] . MetaAttributes . QueryArgumentAsString ( "desc2" , "" ) ) ;
70
+
71
+ Assert . AreEqual ( 1 , cppClass . Fields . Count ) ;
72
+ Assert . AreEqual ( "a member field" , cppClass . Fields [ 0 ] . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
73
+ Assert . AreEqual ( "a member field 2" , cppClass . Fields [ 0 ] . MetaAttributes . QueryArgumentAsString ( "desc2" , "" ) ) ;
74
+
75
+ }
76
+ ) ;
77
+ }
78
+
79
+ [ Test ]
80
+ public void TestTemplateMetaAttribute ( )
81
+ {
82
+
83
+ ParseAssert ( @"
84
+
85
+ #if !defined(__cppast)
86
+ #define __cppast(...)
87
+ #endif
88
+
89
+ template <typename T>
90
+ class TestTemplateClass
91
+ {
92
+ public:
93
+
94
+ __cppast(desc=""a template member field"")
95
+ T X;
96
+ };
97
+
98
+ using IntClass __cppast(desc=""a template class for int"") = TestTemplateClass<int>;
99
+ using DoubleClass __cppast(desc=""a template class for double"") = TestTemplateClass<double>;
100
+
101
+ typedef TestTemplateClass<float> __cppast(desc=""a template class for float"") FloatClass;
102
+ " , compilation =>
103
+ {
104
+ Assert . False ( compilation . HasErrors ) ;
105
+
106
+ var templateClass = compilation . Classes [ 0 ] ;
107
+ Assert . AreEqual ( "a template member field" , templateClass . Fields [ 0 ] . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
108
+
109
+ var intClass = compilation . Classes [ 1 ] ;
110
+ var doubleClass = compilation . Classes [ 2 ] ;
111
+ var floatClass = compilation . Classes [ 3 ] ;
112
+ Assert . AreEqual ( "a template class for int" , intClass . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
113
+ Assert . AreEqual ( "a template class for double" , doubleClass . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
114
+ Assert . AreEqual ( "a template class for float" , floatClass . MetaAttributes . QueryArgumentAsString ( "desc" , "" ) ) ;
115
+ }
116
+ ) ;
117
+ }
118
+ }
119
+ }
0 commit comments