155 lines
5.1 KiB
Python
155 lines
5.1 KiB
Python
# Note: testcases generated via `python -m cxxheaderparser.gentest`
|
|
|
|
from cxxheaderparser.types import (
|
|
AnonymousName,
|
|
ClassDecl,
|
|
Field,
|
|
FundamentalSpecifier,
|
|
NameSpecifier,
|
|
PQName,
|
|
Type,
|
|
)
|
|
from cxxheaderparser.simple import (
|
|
ClassScope,
|
|
NamespaceScope,
|
|
parse_string,
|
|
ParsedData,
|
|
)
|
|
|
|
|
|
def test_union_basic():
|
|
content = """
|
|
|
|
struct HAL_Value {
|
|
union {
|
|
int v_int;
|
|
HAL_Bool v_boolean;
|
|
} data;
|
|
};
|
|
"""
|
|
data = parse_string(content, cleandoc=True)
|
|
|
|
assert data == ParsedData(
|
|
namespace=NamespaceScope(
|
|
classes=[
|
|
ClassScope(
|
|
class_decl=ClassDecl(
|
|
typename=PQName(
|
|
segments=[NameSpecifier(name="HAL_Value")],
|
|
classkey="struct",
|
|
)
|
|
),
|
|
classes=[
|
|
ClassScope(
|
|
class_decl=ClassDecl(
|
|
typename=PQName(
|
|
segments=[AnonymousName(id=1)], classkey="union"
|
|
),
|
|
access="public",
|
|
),
|
|
fields=[
|
|
Field(
|
|
access="public",
|
|
type=Type(
|
|
typename=PQName(
|
|
segments=[FundamentalSpecifier(name="int")]
|
|
)
|
|
),
|
|
name="v_int",
|
|
),
|
|
Field(
|
|
access="public",
|
|
type=Type(
|
|
typename=PQName(
|
|
segments=[NameSpecifier(name="HAL_Bool")]
|
|
)
|
|
),
|
|
name="v_boolean",
|
|
),
|
|
],
|
|
)
|
|
],
|
|
fields=[
|
|
Field(
|
|
access="public",
|
|
type=Type(
|
|
typename=PQName(
|
|
segments=[AnonymousName(id=1)], classkey="union"
|
|
)
|
|
),
|
|
name="data",
|
|
)
|
|
],
|
|
)
|
|
]
|
|
)
|
|
)
|
|
|
|
|
|
def test_union_anon_in_struct():
|
|
content = """
|
|
struct Outer {
|
|
union {
|
|
int x;
|
|
int y;
|
|
};
|
|
int z;
|
|
};
|
|
"""
|
|
data = parse_string(content, cleandoc=True)
|
|
|
|
assert data == ParsedData(
|
|
namespace=NamespaceScope(
|
|
classes=[
|
|
ClassScope(
|
|
class_decl=ClassDecl(
|
|
typename=PQName(
|
|
segments=[NameSpecifier(name="Outer")], classkey="struct"
|
|
)
|
|
),
|
|
classes=[
|
|
ClassScope(
|
|
class_decl=ClassDecl(
|
|
typename=PQName(
|
|
segments=[AnonymousName(id=1)], classkey="union"
|
|
),
|
|
access="public",
|
|
),
|
|
fields=[
|
|
Field(
|
|
access="public",
|
|
type=Type(
|
|
typename=PQName(
|
|
segments=[FundamentalSpecifier(name="int")]
|
|
)
|
|
),
|
|
name="x",
|
|
),
|
|
Field(
|
|
access="public",
|
|
type=Type(
|
|
typename=PQName(
|
|
segments=[FundamentalSpecifier(name="int")]
|
|
)
|
|
),
|
|
name="y",
|
|
),
|
|
],
|
|
)
|
|
],
|
|
fields=[
|
|
Field(
|
|
access="public",
|
|
type=Type(
|
|
typename=PQName(
|
|
segments=[FundamentalSpecifier(name="int")]
|
|
)
|
|
),
|
|
name="z",
|
|
)
|
|
],
|
|
)
|
|
]
|
|
)
|
|
)
|