1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
# Copyright 2014-2017 Insight Software Consortium.
# Copyright 2004-2009 Roman Yakovenko.
# Distributed under the Boost Software License, Version 1.0.
# See http://www.boost.org/LICENSE_1_0.txt
import pytest
from . import autoconfig
from pygccxml import declarations
from pygccxml import parser
from pygccxml import utils
TEST_FILES = [
"patcher.hpp",
]
config = autoconfig.cxx_parsers_cfg.config.clone()
project_reader = parser.project_reader_t(config=config, cache=None)
decls = project_reader.read_files(
TEST_FILES,
parser.COMPILATION_MODE.ALL_AT_ONCE
)
config.xml_generator_from_xml_file = project_reader.xml_generator_from_xml_file
config.__cxx_std = utils.cxx_standard(config.cflags)
@pytest.fixture
def global_ns():
global_ns = declarations.get_global_namespace(decls)
return global_ns
def test_enum_patcher(global_ns):
fix_enum = global_ns.free_function("fix_enum")
default_val = fix_enum.arguments[0].default_value
if config.__cxx_std.is_cxx11_or_greater:
val = "::ns1::ns2::fruit::apple"
else:
val = "::ns1::ns2::apple"
assert default_val == val
fix_enum2 = global_ns.free_function("fix_enum2")
default_val = fix_enum2.arguments[0].default_value
assert default_val == val
ns1 = global_ns.namespace("ns1")
ns2 = ns1.namespace("ns2")
fix_enum2 = ns2.free_function("fix_enum2")
default_val = fix_enum2.arguments[0].default_value
assert default_val == val
fix_enum3 = global_ns.free_function("fix_enum3")
default_val = fix_enum3.arguments[0].default_value
val = val.replace("apple", "orange")
assert default_val == val
if config.__cxx_std.is_cxx11_or_greater:
fix_enum4 = global_ns.free_function("fix_enum4")
default_val = fix_enum4.arguments[0].default_value
assert default_val == "::ns4::color::blue"
fix_enum5 = global_ns.free_function("fix_enum5")
default_val = fix_enum5.arguments[0].default_value
assert default_val == "::ns4::color::blue"
lpe = global_ns.free_function("log_priority_enabled")
default_val = lpe.arguments[0].default_value
if config.__cxx_std.is_cxx11_or_greater:
val = "(long int)" + \
"(::ACE_Log_Priority_Index::LM_INVALID_BIT_INDEX)"
else:
val = "(long int)(::LM_INVALID_BIT_INDEX)"
assert default_val == val
def test_numeric_patcher(global_ns):
fix_numeric = global_ns.free_function("fix_numeric")
generator = config.xml_generator_from_xml_file
if generator.is_castxml1 or \
float(generator.xml_output_version) >= 1.137:
val = "(unsigned long long)-1"
else:
val = "(ull)-1"
assert fix_numeric.arguments[0].default_value == val
def test_unqualified_integral_patcher(global_ns):
# For this check to be removed, patcher_tester_64bit.xml
# will need to be updated for CastXML
return
ns1 = global_ns.namespace("ns1")
st1 = ns1.class_("st1")
fun1 = st1.member_function("fun1")
output_verion = xml_generator_from_xml_file.xml_output_version
if xml_generator_from_xml_file.is_castxml1 or \
float(output_verion) >= 1.137:
val1 = "ns1::DEFAULT_1"
val2 = "ns1::st1::DEFAULT_2"
else:
val1 = "::ns1::DEFAULT_1"
val2 = "::ns1::st1::DEFAULT_2"
assertEqual(
fun1.arguments[0].default_value, val1)
assertEqual(
fun1.arguments[1].default_value, val2)
fun2 = global_ns.free_function("fun2")
assertEqual(
fun2.arguments[0].default_value,
"::DEFAULT_1")
output_verion = xml_generator_from_xml_file.xml_output_version
if xml_generator_from_xml_file.is_castxml1 or \
float(output_verion) >= 1.137:
val1 = "ns1::DEFAULT_1"
val2 = "ns1::st1::DEFAULT_2"
else:
# Before XML output version 1.137, the following two
# were unpatched and were identical to the text in
# matcher.hpp
val1 = "ns1::DEFAULT_1"
val2 = "::ns1::st1::DEFAULT_2"
assertEqual(
fun2.arguments[1].default_value, val1)
assertEqual(
fun2.arguments[2].default_value, val2)
def test_unnamed_enum_patcher(global_ns):
fix_unnamed = global_ns.free_function("fix_unnamed")
assert fix_unnamed.arguments[0].default_value == "int(::fx::unnamed)"
def test_function_call_patcher(global_ns):
fix_function_call = global_ns.free_function("fix_function_call")
default_val = fix_function_call.arguments[0].default_value
output_verion = config.xml_generator_from_xml_file.xml_output_version
if config.xml_generator_from_xml_file.is_castxml1 or \
float(output_verion) >= 1.137:
val = "function_call::calc(1, 2, 3)"
else:
val = "calc(1, 2, 3)"
assert default_val == val
def test_fundamental_patcher(global_ns):
fcall = global_ns.free_function("fix_fundamental")
if config.__cxx_std.is_cxx11_or_greater:
val = "(unsigned int)(::fundamental::spam::eggs)"
else:
val = "(unsigned int)(::fundamental::eggs)"
assert fcall.arguments[0].default_value == val
def test_constructor_patcher(global_ns):
typedef__func = global_ns.free_function("typedef__func")
default_val = typedef__func.arguments[0].default_value
val = "typedef_::alias()"
assert default_val == val
|