Fix template specialization unit tests

This commit is contained in:
Dustin Spicuzza 2020-12-30 02:53:36 -05:00
parent cd110bbe29
commit d97ed6c99c
6 changed files with 710 additions and 204 deletions

View File

@ -296,7 +296,7 @@ def test_class_member_spec_2():
), ),
fields=[ fields=[
Field( Field(
name="C", access="private",
type=Type( type=Type(
typename=PQName( typename=PQName(
segments=[ segments=[
@ -305,10 +305,10 @@ def test_class_member_spec_2():
] ]
) )
), ),
access="private", name="C",
), ),
Field( Field(
name="data", access="private",
type=Type( type=Type(
typename=PQName( typename=PQName(
segments=[ segments=[
@ -318,7 +318,15 @@ def test_class_member_spec_2():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
) )
] ]
), ),
@ -326,7 +334,7 @@ def test_class_member_spec_2():
] ]
) )
), ),
access="private", name="data",
), ),
], ],
methods=[ methods=[
@ -617,7 +625,7 @@ def test_class_member_spec_6():
), ),
fields=[ fields=[
Field( Field(
name="s", access="public",
type=Type( type=Type(
typename=PQName( typename=PQName(
segments=[ segments=[
@ -627,17 +635,23 @@ def test_class_member_spec_6():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="CharT") typename=PQName(
segments=[
NameSpecifier(
name="CharT"
)
] ]
) )
)
)
] ]
), ),
), ),
] ]
) )
), ),
access="public", name="s",
) )
], ],
) )
@ -1662,7 +1676,15 @@ def test_initializer_with_initializer_list_1():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
) )
] ]
), ),
@ -1747,10 +1769,16 @@ def test_initializer_with_initializer_list_2():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="R") typename=PQName(
segments=[
NameSpecifier(
name="R"
)
] ]
) )
)
)
] ]
), ),
) )
@ -2438,10 +2466,26 @@ def test_class_multi_vars():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="string")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="string"
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
), ),
] ]
), ),
@ -2461,10 +2505,26 @@ def test_class_multi_vars():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="string")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="string"
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
), ),
] ]
), ),
@ -2484,10 +2544,26 @@ def test_class_multi_vars():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="string")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="string"
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
), ),
] ]
), ),

View File

@ -220,7 +220,15 @@ def test_class_base_specialized():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="Green")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="Green"
)
]
)
)
) )
] ]
), ),

View File

@ -433,11 +433,18 @@ def test_fn_template_ptr():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Pointer(
Token(value="Pointer"), ptr_to=Type(
Token(value="*"), typename=PQName(
segments=[
NameSpecifier(
name="Pointer"
)
] ]
) )
)
)
)
] ]
), ),
), ),
@ -458,11 +465,18 @@ def test_fn_template_ptr():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Pointer(
Token(value="Pointer"), ptr_to=Type(
Token(value="*"), typename=PQName(
segments=[
NameSpecifier(
name="Pointer"
)
] ]
) )
)
)
)
] ]
), ),
), ),

View File

@ -4,6 +4,7 @@ from cxxheaderparser.types import (
Array, Array,
BaseClass, BaseClass,
ClassDecl, ClassDecl,
DecltypeSpecifier,
Field, Field,
ForwardDecl, ForwardDecl,
Function, Function,
@ -52,10 +53,26 @@ def test_template_base_template_ns():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
), ),
] ]
), ),
@ -341,16 +358,43 @@ def test_template_template_template():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="TT"), typename=PQName(
Token(value="<"), segments=[
Token(value="T1"), NameSpecifier(
Token(value=","), name="TT",
Token(value="Rest"), specialization=TemplateSpecialization(
Token(value="..."), args=[
Token(value=">"), TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="T1"
)
] ]
) )
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="Rest"
)
]
)
),
param_pack=True,
),
]
),
)
]
)
)
)
] ]
), ),
) )
@ -420,13 +464,13 @@ def test_template_static_var():
), ),
fields=[ fields=[
Field( Field(
name="x", access="public",
type=Type( type=Type(
typename=PQName( typename=PQName(
segments=[FundamentalSpecifier(name="int")] segments=[FundamentalSpecifier(name="int")]
) )
), ),
access="public", name="x",
static=True, static=True,
) )
], ],
@ -439,7 +483,15 @@ def test_template_static_var():
NameSpecifier( NameSpecifier(
name="X", name="X",
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[TemplateArgument(tokens=[Token(value="T")])] args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[NameSpecifier(name="T")]
)
)
)
]
), ),
), ),
NameSpecifier(name="x"), NameSpecifier(name="x"),
@ -547,10 +599,26 @@ def test_template_fn_param_initializer():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="T")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="T"
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[Token(value="U")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="U"
)
]
)
)
), ),
] ]
), ),
@ -624,28 +692,73 @@ def test_template_huge():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="unsigned")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="unsigned"
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="std"), typename=PQName(
Token(value="::"), segments=[
Token(value="pair"), NameSpecifier(
Token(value="<"), name="std"
Token(value="unsigned"),
Token(value=","),
Token(
value="SnailTemplateClass"
), ),
Token(value="<"), NameSpecifier(
Token( name="pair",
value="SnailNamespace" specialization=TemplateSpecialization(
), args=[
Token(value="::"), TemplateArgument(
Token(value="SnailClass"), arg=Type(
Token(value=">"), typename=PQName(
Token(value=">"), segments=[
FundamentalSpecifier(
name="unsigned"
)
] ]
)
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="SnailTemplateClass",
specialization=TemplateSpecialization(
args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="SnailNamespace"
),
NameSpecifier(
name="SnailClass"
),
]
)
)
)
]
),
)
]
)
)
),
]
),
),
]
)
)
), ),
] ]
), ),
@ -673,36 +786,73 @@ def test_template_huge():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token( typename=PQName(
value="unsigned" segments=[
FundamentalSpecifier(
name="unsigned"
)
]
)
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="std"
),
NameSpecifier(
name="pair",
specialization=TemplateSpecialization(
args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="unsigned"
)
]
)
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="SnailTemplateClass",
specialization=TemplateSpecialization(
args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="SnailNamespace"
),
NameSpecifier(
name="SnailClass"
),
]
)
)
) )
] ]
), ),
TemplateArgument( )
tokens=[
Token(value="std"),
Token(value="::"),
Token(value="pair"),
Token(value="<"),
Token(
value="unsigned"
),
Token(value=","),
Token(
value="SnailTemplateClass"
),
Token(value="<"),
Token(
value="SnailNamespace"
),
Token(value="::"),
Token(
value="SnailClass"
),
Token(value=">"),
Token(value=">"),
] ]
)
)
),
]
),
),
]
)
)
), ),
] ]
), ),
@ -740,7 +890,15 @@ def test_template_specialized():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
) )
] ]
), ),
@ -799,7 +957,15 @@ def test_template_class_defaults():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="VALUE")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="VALUE"
)
]
)
)
) )
] ]
), ),
@ -953,10 +1119,26 @@ def test_template_many_packs():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="Type")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="Type"
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
), ),
] ]
), ),
@ -995,29 +1177,67 @@ def test_template_many_packs():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token( typename=PQName(
value="concat_iterator" segments=[
), NameSpecifier(
Token(value="<"), name="concat_iterator",
Token(value="ValueT"), specialization=TemplateSpecialization(
Token(value=","), args=[
Token(value="IterTs"), TemplateArgument(
Token(value="..."), arg=Type(
Token(value=">"), typename=PQName(
segments=[
NameSpecifier(
name="ValueT"
)
] ]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="std"), typename=PQName(
Token(value="::"), segments=[
Token( NameSpecifier(
value="forward_iterator_tag" name="IterTs"
)
]
)
),
param_pack=True,
), ),
] ]
), ),
)
]
)
)
),
TemplateArgument( TemplateArgument(
tokens=[Token(value="ValueT")] arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="std"
),
NameSpecifier(
name="forward_iterator_tag"
),
]
)
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="ValueT"
)
]
)
)
), ),
] ]
), ),
@ -1052,24 +1272,34 @@ def test_template_many_packs():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
arg=Value(
tokens=[ tokens=[
Token(value="N"), Token(value="N"),
Token(value="-"), Token(value="-"),
Token(value="1"), Token(value="1"),
] ]
)
), ),
TemplateArgument( TemplateArgument(
arg=Value(
tokens=[ tokens=[
Token(value="N"), Token(value="N"),
Token(value="-"), Token(value="-"),
Token(value="1"), Token(value="1"),
] ]
)
), ),
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="I"), typename=PQName(
Token(value="..."), segments=[
NameSpecifier(
name="I"
)
] ]
)
),
param_pack=True,
), ),
] ]
), ),
@ -1115,12 +1345,18 @@ def test_template_many_packs():
name="build_index_impl", name="build_index_impl",
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument(tokens=[Token(value="0")]),
TemplateArgument( TemplateArgument(
tokens=[ arg=Value(tokens=[Token(value="0")])
Token(value="I"), ),
Token(value="..."), TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(name="I")
] ]
)
),
param_pack=True,
), ),
] ]
), ),
@ -1138,11 +1374,17 @@ def test_template_many_packs():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="I"), typename=PQName(
Token(value="..."), segments=[
NameSpecifier(
name="I"
)
] ]
) )
),
param_pack=True,
)
] ]
), ),
) )
@ -1176,60 +1418,179 @@ def test_template_many_packs():
name="is_callable", name="is_callable",
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument(tokens=[Token(value="F")]),
TemplateArgument(tokens=[Token(value="P")]),
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="typelist"), typename=PQName(
Token(value="<"), segments=[
Token(value="T"), NameSpecifier(name="F")
Token(value="..."),
Token(value=">"),
] ]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="void_t"), typename=PQName(
Token(value="<"), segments=[
Token(value="decltype"), NameSpecifier(name="P")
Token(value="("),
Token(value="("),
Token(value="("),
Token(value="*"),
Token(value="std"),
Token(value="::"),
Token(value="declval"),
Token(value="<"),
Token(value="P"),
Token(value=">"),
Token(value="("),
Token(value=")"),
Token(value=")"),
Token(value="."),
Token(value="*"),
Token(value="std"),
Token(value="::"),
Token(value="declval"),
Token(value="<"),
Token(value="F"),
Token(value=">"),
Token(value="("),
Token(value=")"),
Token(value=")"),
Token(value="("),
Token(value="std"),
Token(value="::"),
Token(value="declval"),
Token(value="<"),
Token(value="T"),
Token(value=">"),
Token(value="("),
Token(value=")"),
Token(value="..."),
Token(value=")"),
Token(value=")"),
Token(value=">"),
] ]
)
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="typelist",
specialization=TemplateSpecialization(
args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="T"
)
]
)
),
param_pack=True,
)
]
),
)
]
)
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="void_t",
specialization=TemplateSpecialization(
args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
DecltypeSpecifier(
tokens=[
Token(
value="("
),
Token(
value="("
),
Token(
value="*"
),
Token(
value="std"
),
Token(
value="::"
),
Token(
value="declval"
),
Token(
value="<"
),
Token(
value="P"
),
Token(
value=">"
),
Token(
value="("
),
Token(
value=")"
),
Token(
value=")"
),
Token(
value="."
),
Token(
value="*"
),
Token(
value="std"
),
Token(
value="::"
),
Token(
value="declval"
),
Token(
value="<"
),
Token(
value="F"
),
Token(
value=">"
),
Token(
value="("
),
Token(
value=")"
),
Token(
value=")"
),
Token(
value="("
),
Token(
value="std"
),
Token(
value="::"
),
Token(
value="declval"
),
Token(
value="<"
),
Token(
value="T"
),
Token(
value=">"
),
Token(
value="("
),
Token(
value=")"
),
Token(
value="..."
),
Token(
value=")"
),
]
)
]
)
)
)
]
),
)
]
)
)
), ),
] ]
), ),

View File

@ -45,7 +45,15 @@ def test_simple_typedef():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[Token(value="int")] arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
) )
] ]
), ),

View File

@ -4,6 +4,7 @@ from cxxheaderparser.types import (
BaseClass, BaseClass,
ClassDecl, ClassDecl,
Function, Function,
FunctionType,
FundamentalSpecifier, FundamentalSpecifier,
Method, Method,
NameSpecifier, NameSpecifier,
@ -139,7 +140,15 @@ def test_alias_declaration_2():
name="foo", name="foo",
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument(tokens=[Token(value="T")]) TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(name="T")
]
)
)
)
] ]
), ),
) )
@ -201,7 +210,15 @@ def test_alias_declaration_4():
name="bar", name="bar",
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument(tokens=[Token(value="T")]) TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(name="T")
]
)
)
)
] ]
), ),
), ),
@ -260,7 +277,15 @@ def test_alias_declaration_6():
name="foo", name="foo",
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument(tokens=[Token(value="T")]) TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(name="T")
]
)
)
)
] ]
), ),
), ),
@ -410,12 +435,19 @@ def test_using_many_things():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=FunctionType(
Token(value="int"), return_type=Type(
Token(value="("), typename=PQName(
Token(value=")"), segments=[
FundamentalSpecifier(
name="int"
)
] ]
) )
),
parameters=[],
)
)
] ]
), ),
), ),
@ -491,12 +523,19 @@ def test_using_many_things():
specialization=TemplateSpecialization( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( TemplateArgument(
tokens=[ arg=FunctionType(
Token(value="void"), return_type=Type(
Token(value="("), typename=PQName(
Token(value=")"), segments=[
FundamentalSpecifier(
name="void"
)
] ]
) )
),
parameters=[],
)
)
] ]
), ),
), ),