cxxheaderparser/tests/test_namespaces.py

122 lines
3.8 KiB
Python

# Note: testcases generated via `python -m cxxheaderparser.gentest`
from cxxheaderparser.types import (
FundamentalSpecifier,
NameSpecifier,
PQName,
Token,
Type,
Value,
Variable,
)
from cxxheaderparser.simple import (
NamespaceScope,
parse_string,
ParsedData,
)
def test_dups_in_different_ns() -> None:
content = """
namespace {
int x = 4;
}
int x = 5;
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(
namespace=NamespaceScope(
variables=[
Variable(
name=PQName(segments=[NameSpecifier(name="x")]),
type=Type(
typename=PQName(segments=[FundamentalSpecifier(name="int")])
),
value=Value(tokens=[Token(value="5")]),
)
],
namespaces={
"": NamespaceScope(
variables=[
Variable(
name=PQName(segments=[NameSpecifier(name="x")]),
type=Type(
typename=PQName(
segments=[FundamentalSpecifier(name="int")]
)
),
value=Value(tokens=[Token(value="4")]),
)
]
)
},
)
)
def test_correct_ns() -> None:
content = """
namespace a::b::c {
int i1;
}
namespace a {
namespace b {
namespace c {
int i2;
}
}
}
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(
namespace=NamespaceScope(
namespaces={
"a": NamespaceScope(
name="a",
namespaces={
"b": NamespaceScope(
name="b",
namespaces={
"c": NamespaceScope(
name="c",
variables=[
Variable(
name=PQName(
segments=[NameSpecifier(name="i1")]
),
type=Type(
typename=PQName(
segments=[
FundamentalSpecifier(name="int")
]
)
),
),
Variable(
name=PQName(
segments=[NameSpecifier(name="i2")]
),
type=Type(
typename=PQName(
segments=[
FundamentalSpecifier(name="int")
]
)
),
),
],
)
},
)
},
)
}
)
)