From 6d84042ac00528aec8c9600bd59c13ff30fe6774 Mon Sep 17 00:00:00 2001 From: Michka Popoff Date: Fri, 22 Nov 2024 22:54:35 +0100 Subject: [PATCH] test --- .github/workflows/tests.yml | 2 +- src/pygccxml/declarations/container_traits.py | 2 + src/pygccxml/declarations/pattern_parser.py | 6 +- src/pygccxml/parser/patcher.py | 26 ++ tests/test_pattern_parser.py | 4 +- tests/test_remove_template_defaults.py | 279 +++++++++--------- tests/test_templates.py | 22 +- tests/test_vector_traits.py | 8 +- 8 files changed, 189 insertions(+), 160 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3c68ef7a..e7865783 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -102,4 +102,4 @@ jobs: - name: Run tests run: | export PATH=~/castxml/bin:$PATH - pytest tests + pytest tests/test_remove_template_defaults.py diff --git a/src/pygccxml/declarations/container_traits.py b/src/pygccxml/declarations/container_traits.py index 5d2df537..a593ada9 100644 --- a/src/pygccxml/declarations/container_traits.py +++ b/src/pygccxml/declarations/container_traits.py @@ -30,6 +30,8 @@ def normalize(self, type_str): def replace_basic_string(self, cls_name): + print("replace_basic_string", cls_name) + # Take the lists of all possible string variations # and clean them up by replacing ::std by std. str_eq = [ diff --git a/src/pygccxml/declarations/pattern_parser.py b/src/pygccxml/declarations/pattern_parser.py index 093e692b..4689d2c5 100644 --- a/src/pygccxml/declarations/pattern_parser.py +++ b/src/pygccxml/declarations/pattern_parser.py @@ -192,11 +192,11 @@ def join(self, name, args, arg_separator=None): args = [_f for _f in args if _f] if not args: - args_str = ' ' + args_str = '' elif len(args) == 1: - args_str = ' ' + args[0] + ' ' + args_str = '' + args[0] + '' else: - args_str = ' ' + arg_separator.join(args) + ' ' + args_str = '' + arg_separator.join(args) + '' return ''.join([name, self.__begin, args_str, self.__end]) diff --git a/src/pygccxml/parser/patcher.py b/src/pygccxml/parser/patcher.py index 5c457c39..ad28470d 100644 --- a/src/pygccxml/parser/patcher.py +++ b/src/pygccxml/parser/patcher.py @@ -314,6 +314,32 @@ def remove_spaces_from_template_names(decls): after hash> """ for decl in decls: + # if "v_int" in decl.name: + # print("------") + # print( + # decl.decl_type, + # type(decl.decl_type), + # decl.decl_type.declaration.name) + # if "vector" in decl.name: + # print("------") + # print("vvvvvvv", decl, decl.name) decl.name = decl.name.replace(" >", ">").replace("< ", "<") decl.partial_name = \ decl.partial_name.replace(" >", ">").replace("< ", "<") + if isinstance(decl, declarations.typedef_t) and \ + isinstance(decl.decl_type, declarations.declarated_t): + decl.decl_type.declaration.name = fix_spaces( + decl.decl_type.declaration.name) + decl.decl_type.declaration.partial_name = fix_spaces( + decl.decl_type.declaration.partial_name) + # if "v_int" in decl.name: + # print( + # decl.decl_type, + # type(decl.decl_type), + # decl.decl_type.declaration.name) + # if "vector" in decl.name: + # print("vvvvvvv", decl, decl.name) + + +def fix_spaces(val): + return val.replace(" >", ">").replace("< ", "<") diff --git a/tests/test_pattern_parser.py b/tests/test_pattern_parser.py index 2f3d8532..98f92435 100644 --- a/tests/test_pattern_parser.py +++ b/tests/test_pattern_parser.py @@ -66,8 +66,8 @@ def test_split(): """ - p1 = "std::vector >" - p2 = "std::vector >" + p1 = "std::vector>" + p2 = "std::vector>" args_list = [ "const std::basic_string &", "const int &", "const double &"] diff --git a/tests/test_remove_template_defaults.py b/tests/test_remove_template_defaults.py index cbd0840a..bf969b63 100644 --- a/tests/test_remove_template_defaults.py +++ b/tests/test_remove_template_defaults.py @@ -37,142 +37,143 @@ def test_vector(global_ns): v_v_int = global_ns.typedef('v_v_int') assert 'vector>' == \ v_traits.remove_defaults(v_v_int) - - -def test_list(global_ns): - l_int = global_ns.typedef('l_int') - l_traits = declarations.list_traits - assert 'list' == l_traits.remove_defaults(l_int) - l_wstring = global_ns.typedef('l_wstring') - assert 'list' == l_traits.remove_defaults(l_wstring) - - -def test_deque(global_ns): - d_v_int = global_ns.typedef('d_v_int') - d_v_traits = declarations.deque_traits - assert 'deque>' == \ - d_v_traits.remove_defaults(d_v_int) - d_l_string = global_ns.typedef('d_l_string') - assert 'deque>' == \ - d_v_traits.remove_defaults(d_l_string) - - -def test_queue(global_ns): - q_int = global_ns.typedef('q_int') - q_traits = declarations.queue_traits - assert 'queue' == q_traits.remove_defaults(q_int) - q_string = global_ns.typedef('q_string') - assert 'queue' == q_traits.remove_defaults(q_string) - - -def test_priority_queue(global_ns): - pq_int = global_ns.typedef('pq_int') - pq_traits = declarations.priority_queue_traits - assert 'priority_queue' == pq_traits.remove_defaults(pq_int) - pq_string = global_ns.typedef('pq_string') - assert 'priority_queue' == \ - pq_traits.remove_defaults(pq_string) - - -def test_set(global_ns): - s_v_int = global_ns.typedef('s_v_int') - assert 'set>' == \ - declarations.set_traits.remove_defaults(s_v_int) - s_string = global_ns.typedef('s_string') - assert 'set' == \ - declarations.set_traits.remove_defaults(s_string) - - -def test_multiset(global_ns): - ms_v_int = global_ns.typedef('ms_v_int') - ms_v_traits = declarations.multiset_traits - assert 'multiset>' == \ - ms_v_traits.remove_defaults(ms_v_int) - ms_string = global_ns.typedef('ms_string') - assert 'multiset' == \ - ms_v_traits.remove_defaults(ms_string) - - -def test_map(global_ns): - m_i2d = global_ns.typedef('m_i2d') - assert 'map' == \ - declarations.map_traits.remove_defaults(m_i2d) - m_wstr2d = global_ns.typedef('m_wstr2d') - assert 'map' == \ - declarations.map_traits.remove_defaults(m_wstr2d) - m_v_i2m_wstr2d = global_ns.typedef('m_v_i2m_wstr2d') - m = 'map, std::map>' - assert m == declarations.map_traits.remove_defaults(m_v_i2m_wstr2d) - - -def test_multimap(global_ns): - mm_i2d = global_ns.typedef('mm_i2d') - mm_traits = declarations.multimap_traits - assert 'multimap' == mm_traits.remove_defaults(mm_i2d) - mm_wstr2d = global_ns.typedef('mm_wstr2d') - assert 'multimap' == \ - mm_traits.remove_defaults(mm_wstr2d) - mm_v_i2mm_wstr2d = global_ns.typedef('mm_v_i2mm_wstr2d') - assert ('multimap, ' + - 'const std::multimap>') == \ - mm_traits.remove_defaults(mm_v_i2mm_wstr2d) - - -def test_hash_set(global_ns): - hs_v_int = global_ns.typedef('hs_v_int') - hs_traits = declarations.unordered_set_traits - name = 'unordered_set' - assert (name + '>') == \ - hs_traits.remove_defaults(hs_v_int), \ - hs_traits.remove_defaults(hs_v_int) - hs_string = global_ns.typedef('hs_string') - assert (name + '') == \ - hs_traits.remove_defaults(hs_string) - - -def test_hash_multiset(global_ns): - mhs_v_int = global_ns.typedef('mhs_v_int') - mhs_traits = declarations.unordered_multiset_traits - name = 'unordered_multiset' - assert (name + '>') == \ - mhs_traits.remove_defaults(mhs_v_int) - mhs_string = global_ns.typedef('mhs_string') - assert (name + '') == \ - mhs_traits.remove_defaults(mhs_string) - - -def test_hash_map(global_ns): - hm_i2d = global_ns.typedef('hm_i2d') - hm_traits = declarations.unordered_map_traits - name = 'unordered_map' - assert (name + '') == \ - hm_traits.remove_defaults(hm_i2d) - hm_wstr2d = global_ns.typedef('hm_wstr2d') - assert (name + '') == \ - hm_traits.remove_defaults(hm_wstr2d) - - -def test_hash_multimap(global_ns): - hmm_i2d = global_ns.typedef('hmm_i2d') - hmm_traits = declarations.unordered_multimap_traits - name = 'unordered_multimap' - assert (name + '') == \ - hmm_traits.remove_defaults(hmm_i2d) - hmm_wstr2d = global_ns.typedef('hmm_wstr2d') - assert (name + '') == \ - hmm_traits.remove_defaults(hmm_wstr2d) - - hmm_v_i2mm_wstr2d = global_ns.typedef('hmm_v_i2mm_wstr2d') - - hmm_traits_value = hmm_traits.remove_defaults(hmm_v_i2mm_wstr2d) - - possible_values = ( - name + ', ' + - 'const __gnu_cxx::' + name + '>', - name + ', ' + - 'const std::' + utils.get_tr1(hmm_traits_value) + name + - '>', - name + ', ' + - 'const stdext::' + name + '>') - - assert hmm_traits_value in possible_values, hmm_traits_value + raise + + +# def test_list(global_ns): +# l_int = global_ns.typedef('l_int') +# l_traits = declarations.list_traits +# assert 'list' == l_traits.remove_defaults(l_int) +# l_wstring = global_ns.typedef('l_wstring') +# assert 'list' == l_traits.remove_defaults(l_wstring) + + +# def test_deque(global_ns): +# d_v_int = global_ns.typedef('d_v_int') +# d_v_traits = declarations.deque_traits +# assert 'deque>' == \ +# d_v_traits.remove_defaults(d_v_int) +# d_l_string = global_ns.typedef('d_l_string') +# assert 'deque>' == \ +# d_v_traits.remove_defaults(d_l_string) + + +# def test_queue(global_ns): +# q_int = global_ns.typedef('q_int') +# q_traits = declarations.queue_traits +# assert 'queue' == q_traits.remove_defaults(q_int) +# q_string = global_ns.typedef('q_string') +# assert 'queue' == q_traits.remove_defaults(q_string) + + +# def test_priority_queue(global_ns): +# pq_int = global_ns.typedef('pq_int') +# pq_traits = declarations.priority_queue_traits +# assert 'priority_queue' == pq_traits.remove_defaults(pq_int) +# pq_string = global_ns.typedef('pq_string') +# assert 'priority_queue' == \ +# pq_traits.remove_defaults(pq_string) + + +# def test_set(global_ns): +# s_v_int = global_ns.typedef('s_v_int') +# assert 'set>' == \ +# declarations.set_traits.remove_defaults(s_v_int) +# s_string = global_ns.typedef('s_string') +# assert 'set' == \ +# declarations.set_traits.remove_defaults(s_string) + + +# def test_multiset(global_ns): +# ms_v_int = global_ns.typedef('ms_v_int') +# ms_v_traits = declarations.multiset_traits +# assert 'multiset>' == \ +# ms_v_traits.remove_defaults(ms_v_int) +# ms_string = global_ns.typedef('ms_string') +# assert 'multiset' == \ +# ms_v_traits.remove_defaults(ms_string) + + +# def test_map(global_ns): +# m_i2d = global_ns.typedef('m_i2d') +# assert 'map' == \ +# declarations.map_traits.remove_defaults(m_i2d) +# m_wstr2d = global_ns.typedef('m_wstr2d') +# assert 'map' == \ +# declarations.map_traits.remove_defaults(m_wstr2d) +# m_v_i2m_wstr2d = global_ns.typedef('m_v_i2m_wstr2d') +# m = 'map, std::map>' +# assert m == declarations.map_traits.remove_defaults(m_v_i2m_wstr2d) + + +# def test_multimap(global_ns): +# mm_i2d = global_ns.typedef('mm_i2d') +# mm_traits = declarations.multimap_traits +# assert 'multimap' == mm_traits.remove_defaults(mm_i2d) +# mm_wstr2d = global_ns.typedef('mm_wstr2d') +# assert 'multimap' == \ +# mm_traits.remove_defaults(mm_wstr2d) +# mm_v_i2mm_wstr2d = global_ns.typedef('mm_v_i2mm_wstr2d') +# assert ('multimap, ' + +# 'const std::multimap>') == \ +# mm_traits.remove_defaults(mm_v_i2mm_wstr2d) + + +# def test_hash_set(global_ns): +# hs_v_int = global_ns.typedef('hs_v_int') +# hs_traits = declarations.unordered_set_traits +# name = 'unordered_set' +# assert (name + '>') == \ +# hs_traits.remove_defaults(hs_v_int), \ +# hs_traits.remove_defaults(hs_v_int) +# hs_string = global_ns.typedef('hs_string') +# assert (name + '') == \ +# hs_traits.remove_defaults(hs_string) + + +# def test_hash_multiset(global_ns): +# mhs_v_int = global_ns.typedef('mhs_v_int') +# mhs_traits = declarations.unordered_multiset_traits +# name = 'unordered_multiset' +# assert (name + '>') == \ +# mhs_traits.remove_defaults(mhs_v_int) +# mhs_string = global_ns.typedef('mhs_string') +# assert (name + '') == \ +# mhs_traits.remove_defaults(mhs_string) + + +# def test_hash_map(global_ns): +# hm_i2d = global_ns.typedef('hm_i2d') +# hm_traits = declarations.unordered_map_traits +# name = 'unordered_map' +# assert (name + '') == \ +# hm_traits.remove_defaults(hm_i2d) +# hm_wstr2d = global_ns.typedef('hm_wstr2d') +# assert (name + '') == \ +# hm_traits.remove_defaults(hm_wstr2d) + + +# def test_hash_multimap(global_ns): +# hmm_i2d = global_ns.typedef('hmm_i2d') +# hmm_traits = declarations.unordered_multimap_traits +# name = 'unordered_multimap' +# assert (name + '') == \ +# hmm_traits.remove_defaults(hmm_i2d) +# hmm_wstr2d = global_ns.typedef('hmm_wstr2d') +# assert (name + '') == \ +# hmm_traits.remove_defaults(hmm_wstr2d) + +# hmm_v_i2mm_wstr2d = global_ns.typedef('hmm_v_i2mm_wstr2d') + +# hmm_traits_value = hmm_traits.remove_defaults(hmm_v_i2mm_wstr2d) + +# possible_values = ( +# name + ', ' + +# 'const __gnu_cxx::' + name + '>', +# name + ', ' + +# 'const std::' + utils.get_tr1(hmm_traits_value) + name + +# '>', +# name + ', ' + +# 'const stdext::' + name + '>') + +# assert hmm_traits_value in possible_values, hmm_traits_value diff --git a/tests/test_templates.py b/tests/test_templates.py index d9b20ec8..08a81a81 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -21,25 +21,25 @@ def __test_is_template_impl(decl_string): def test_split_on_vector(): - __test_is_template_impl("vector >") + __test_is_template_impl("vector>") __test_split_impl( - "vector >", + "vector>", "vector", ["int", "std::allocator"]) __test_split_recursive_impl( - "vector >", + "vector>", [("vector", ["int", "std::allocator"]), ("std::allocator", ["int"])]) def test_split_on_string(): __test_is_template_impl( - "basic_string,std::allocator >") + "basic_string,std::allocator>") __test_split_impl( - "basic_string,std::allocator >", + "basic_string,std::allocator>", "basic_string", ["char", "std::char_traits", @@ -48,20 +48,20 @@ def test_split_on_string(): def test_split_on_map(): __test_is_template_impl( - "map >," + + "map>," + "std::less,std::allocator > > > >") + "std::vector>>>>") __test_split_impl( - "map >," + + "map>," + "std::less,std::allocator > > > >", + "std::vector>>>>", "map", ["long int", - "std::vector >", + "std::vector>", "std::less", "std::allocator > > >"]) + "std::vector>>>"]) def test_join_on_vector(): diff --git a/tests/test_vector_traits.py b/tests/test_vector_traits.py index 81efa62b..7f5a4b32 100644 --- a/tests/test_vector_traits.py +++ b/tests/test_vector_traits.py @@ -71,11 +71,11 @@ def test_no(global_ns): def test_declaration(): cnt = ( 'std::vector, ' + - 'std::allocator >,std::allocator, std::allocator > > >' + + 'std::allocator>,std::allocator, std::allocator>>>' + '@::std::vector, ' + - 'std::allocator >,std::allocator, std::allocator > > >') + 'std::allocator>,std::allocator, std::allocator>>>') traits = declarations.find_container_traits(cnt) assert declarations.vector_traits == traits