Skip to content

Commit 49ed24f

Browse files
committed
add tests for the MetaAttribute
1 parent 488679f commit 49ed24f

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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

Comments
 (0)