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,9 +635,15 @@ 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"
)
]
)
)
) )
] ]
), ),
@ -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( specialization=TemplateSpecialization(
args=[ args=[
TemplateArgument( 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( 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,10 +433,17 @@ 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,10 +465,17 @@ 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,15 +358,42 @@ 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=","), NameSpecifier(
Token( name="pair",
value="SnailTemplateClass" specialization=TemplateSpecialization(
), args=[
Token(value="<"), TemplateArgument(
Token( arg=Type(
value="SnailNamespace" typename=PQName(
), segments=[
Token(value="::"), FundamentalSpecifier(
Token(value="SnailClass"), name="unsigned"
Token(value=">"), )
Token(value=">"), ]
] )
)
),
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( TemplateArgument(
tokens=[ arg=Type(
Token(value="std"), typename=PQName(
Token(value="::"), segments=[
Token(value="pair"), NameSpecifier(
Token(value="<"), name="std"
Token( ),
value="unsigned" NameSpecifier(
), name="pair",
Token(value=","), specialization=TemplateSpecialization(
Token( args=[
value="SnailTemplateClass" TemplateArgument(
), arg=Type(
Token(value="<"), typename=PQName(
Token( segments=[
value="SnailNamespace" FundamentalSpecifier(
), name="unsigned"
Token(value="::"), )
Token( ]
value="SnailClass" )
), )
Token(value=">"), ),
Token(value=">"), 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( 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(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="IterTs"
)
]
)
),
param_pack=True,
),
]
),
)
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[ arg=Type(
Token(value="std"), typename=PQName(
Token(value="::"), segments=[
Token( NameSpecifier(
value="forward_iterator_tag" name="std"
), ),
] NameSpecifier(
name="forward_iterator_tag"
),
]
)
)
), ),
TemplateArgument( TemplateArgument(
tokens=[Token(value="ValueT")] 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(
tokens=[ arg=Value(
Token(value="N"), tokens=[
Token(value="-"), Token(value="N"),
Token(value="1"), Token(value="-"),
] Token(value="1"),
]
)
), ),
TemplateArgument( TemplateArgument(
tokens=[ arg=Value(
Token(value="N"), tokens=[
Token(value="-"), Token(value="N"),
Token(value="1"), Token(value="-"),
] 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,10 +1374,16 @@ 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"), TemplateArgument(
Token(value="::"), arg=Type(
Token(value="declval"), typename=PQName(
Token(value="<"), segments=[
Token(value="P"), NameSpecifier(
Token(value=">"), name="typelist",
Token(value="("), specialization=TemplateSpecialization(
Token(value=")"), args=[
Token(value=")"), TemplateArgument(
Token(value="."), arg=Type(
Token(value="*"), typename=PQName(
Token(value="std"), segments=[
Token(value="::"), NameSpecifier(
Token(value="declval"), name="T"
Token(value="<"), )
Token(value="F"), ]
Token(value=">"), )
Token(value="("), ),
Token(value=")"), param_pack=True,
Token(value=")"), )
Token(value="("), ]
Token(value="std"), ),
Token(value="::"), )
Token(value="declval"), ]
Token(value="<"), )
Token(value="T"), )
Token(value=">"), ),
Token(value="("), TemplateArgument(
Token(value=")"), arg=Type(
Token(value="..."), typename=PQName(
Token(value=")"), segments=[
Token(value=")"), NameSpecifier(
Token(value=">"), 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,11 +435,18 @@ 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,11 +523,18 @@ 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=[],
)
) )
] ]
), ),