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=[
Field(
name="C",
access="private",
type=Type(
typename=PQName(
segments=[
@ -305,10 +305,10 @@ def test_class_member_spec_2():
]
)
),
access="private",
name="C",
),
Field(
name="data",
access="private",
type=Type(
typename=PQName(
segments=[
@ -318,7 +318,15 @@ def test_class_member_spec_2():
specialization=TemplateSpecialization(
args=[
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=[
@ -617,7 +625,7 @@ def test_class_member_spec_6():
),
fields=[
Field(
name="s",
access="public",
type=Type(
typename=PQName(
segments=[
@ -627,9 +635,15 @@ def test_class_member_spec_6():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[
Token(value="CharT")
]
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="CharT"
)
]
)
)
)
]
),
@ -637,7 +651,7 @@ def test_class_member_spec_6():
]
)
),
access="public",
name="s",
)
],
)
@ -1662,7 +1676,15 @@ def test_initializer_with_initializer_list_1():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[Token(value="int")]
arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
)
]
),
@ -1747,9 +1769,15 @@ def test_initializer_with_initializer_list_2():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[
Token(value="R")
]
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="R"
)
]
)
)
)
]
),
@ -2438,10 +2466,26 @@ def test_class_multi_vars():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[Token(value="string")]
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="string"
)
]
)
)
),
TemplateArgument(
tokens=[Token(value="int")]
arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
),
]
),
@ -2461,10 +2505,26 @@ def test_class_multi_vars():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[Token(value="string")]
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="string"
)
]
)
)
),
TemplateArgument(
tokens=[Token(value="int")]
arg=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
)
),
]
),
@ -2484,10 +2544,26 @@ def test_class_multi_vars():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[Token(value="string")]
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="string"
)
]
)
)
),
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(
args=[
TemplateArgument(
tokens=[Token(value="Green")]
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="Green"
)
]
)
)
)
]
),

View File

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

View File

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

View File

@ -4,6 +4,7 @@ from cxxheaderparser.types import (
BaseClass,
ClassDecl,
Function,
FunctionType,
FundamentalSpecifier,
Method,
NameSpecifier,
@ -139,7 +140,15 @@ def test_alias_declaration_2():
name="foo",
specialization=TemplateSpecialization(
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",
specialization=TemplateSpecialization(
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",
specialization=TemplateSpecialization(
args=[
TemplateArgument(tokens=[Token(value="T")])
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(name="T")
]
)
)
)
]
),
),
@ -410,11 +435,18 @@ def test_using_many_things():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[
Token(value="int"),
Token(value="("),
Token(value=")"),
]
arg=FunctionType(
return_type=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="int"
)
]
)
),
parameters=[],
)
)
]
),
@ -491,11 +523,18 @@ def test_using_many_things():
specialization=TemplateSpecialization(
args=[
TemplateArgument(
tokens=[
Token(value="void"),
Token(value="("),
Token(value=")"),
]
arg=FunctionType(
return_type=Type(
typename=PQName(
segments=[
FundamentalSpecifier(
name="void"
)
]
)
),
parameters=[],
)
)
]
),