Initial commit
This commit is contained in:
148
tests/test_attributes.py
Normal file
148
tests/test_attributes.py
Normal file
@@ -0,0 +1,148 @@
|
||||
# Note: testcases generated via `python -m cxxheaderparser.gentest`
|
||||
|
||||
from cxxheaderparser.types import (
|
||||
ClassDecl,
|
||||
EnumDecl,
|
||||
Enumerator,
|
||||
Field,
|
||||
Function,
|
||||
FundamentalSpecifier,
|
||||
NameSpecifier,
|
||||
PQName,
|
||||
Pointer,
|
||||
Token,
|
||||
Type,
|
||||
Typedef,
|
||||
Value,
|
||||
Variable,
|
||||
)
|
||||
from cxxheaderparser.simple import (
|
||||
ClassScope,
|
||||
NamespaceScope,
|
||||
parse_string,
|
||||
ParsedData,
|
||||
)
|
||||
|
||||
|
||||
def test_attributes_everywhere():
|
||||
# TODO: someday we'll actually support storing attributes,
|
||||
# but for now just make sure they don't get in the way
|
||||
|
||||
content = """
|
||||
struct [[deprecated]] S {};
|
||||
[[deprecated]] typedef S *PS;
|
||||
|
||||
[[deprecated]] int x;
|
||||
union U {
|
||||
[[deprecated]] int n;
|
||||
};
|
||||
[[deprecated]] void f();
|
||||
|
||||
enum [[deprecated]] E{A [[deprecated]], B [[deprecated]] = 42};
|
||||
|
||||
struct alignas(8) AS {};
|
||||
"""
|
||||
data = parse_string(content, cleandoc=True)
|
||||
|
||||
assert data == ParsedData(
|
||||
namespace=NamespaceScope(
|
||||
classes=[
|
||||
ClassScope(
|
||||
class_decl=ClassDecl(
|
||||
typename=PQName(
|
||||
segments=[NameSpecifier(name="S")], classkey="struct"
|
||||
)
|
||||
)
|
||||
),
|
||||
ClassScope(
|
||||
class_decl=ClassDecl(
|
||||
typename=PQName(
|
||||
segments=[NameSpecifier(name="U")], classkey="union"
|
||||
)
|
||||
),
|
||||
fields=[
|
||||
Field(
|
||||
access="public",
|
||||
type=Type(
|
||||
typename=PQName(
|
||||
segments=[FundamentalSpecifier(name="int")]
|
||||
)
|
||||
),
|
||||
name="n",
|
||||
)
|
||||
],
|
||||
),
|
||||
ClassScope(
|
||||
class_decl=ClassDecl(
|
||||
typename=PQName(
|
||||
segments=[NameSpecifier(name="AS")], classkey="struct"
|
||||
)
|
||||
)
|
||||
),
|
||||
],
|
||||
enums=[
|
||||
EnumDecl(
|
||||
typename=PQName(
|
||||
segments=[NameSpecifier(name="E")], classkey="enum"
|
||||
),
|
||||
values=[
|
||||
Enumerator(name="A"),
|
||||
Enumerator(name="B", value=Value(tokens=[Token(value="42")])),
|
||||
],
|
||||
)
|
||||
],
|
||||
functions=[
|
||||
Function(
|
||||
return_type=Type(
|
||||
typename=PQName(segments=[FundamentalSpecifier(name="void")])
|
||||
),
|
||||
name=PQName(segments=[NameSpecifier(name="f")]),
|
||||
parameters=[],
|
||||
)
|
||||
],
|
||||
typedefs=[
|
||||
Typedef(
|
||||
type=Pointer(
|
||||
ptr_to=Type(typename=PQName(segments=[NameSpecifier(name="S")]))
|
||||
),
|
||||
name="PS",
|
||||
)
|
||||
],
|
||||
variables=[
|
||||
Variable(
|
||||
name=PQName(segments=[NameSpecifier(name="x")]),
|
||||
type=Type(
|
||||
typename=PQName(segments=[FundamentalSpecifier(name="int")])
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def test_attributes_gcc_enum_packed():
|
||||
content = """
|
||||
enum Wheat {
|
||||
w1,
|
||||
w2,
|
||||
w3,
|
||||
} __attribute__((packed));
|
||||
"""
|
||||
data = parse_string(content, cleandoc=True)
|
||||
|
||||
assert data == ParsedData(
|
||||
namespace=NamespaceScope(
|
||||
enums=[
|
||||
EnumDecl(
|
||||
typename=PQName(
|
||||
segments=[NameSpecifier(name="Wheat")], classkey="enum"
|
||||
),
|
||||
values=[
|
||||
Enumerator(name="w1"),
|
||||
Enumerator(name="w2"),
|
||||
Enumerator(name="w3"),
|
||||
],
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user