def test_cache( self ):
     cache = parser.file_cache_t( self.cache_file )
     reader = parser.source_reader_t( self.config, cache )
     decls1 = reader.read_file( self.header )
     cache.flush()
     cache = parser.file_cache_t( self.cache_file )
     reader = parser.source_reader_t( self.config, cache )
     decls2 = reader.read_file( self.header )
     
     enum_matcher = declarations.declaration_matcher_t( name="EColor"
                                                        , decl_type=declarations.enumeration_t )
     
     color1 = declarations.matcher.get_single( enum_matcher, decls1 )
     color2 = declarations.matcher.get_single( enum_matcher, decls2 )
     self.failUnless( color1.values == color2.values )
Exemplo n.º 2
0
 def test(self):
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     global_ns.decl('A<int>')
     f = global_ns.free_fun('f')
     self.failUnless(f.demangled == 'void f<int>(A<int> const&)')
    def test_remove_va_list_tag(self):

        if "gccxml" in self.config.xml_generator:
            return True

        self.config.flags = []
        src_reader = parser.source_reader_t(self.config)
        decls = declarations.make_flatten(src_reader.read_string(self.__code))

        classes = [
            i for i in decls if isinstance(i, declarations.class_t)]

        typedefs = [
            i for i in decls if isinstance(i, declarations.typedef_t)]

        variables = [
            i for i in decls if isinstance(i, declarations.variable_t)]

        tag = "__va_list_tag"

        self.assertFalse(tag in [class_.name for class_ in classes])
        self.assertTrue("a" in [class_.name for class_ in classes])
        self.assertTrue(len(classes) == 1)

        self.assertFalse(tag in [ty.name for ty in typedefs])
        self.assertTrue(len(typedefs) == 3)

        self.assertFalse(
            tag in [var.decl_string.split("::")[1] for var in variables])
        self.assertTrue(len(variables) == 0)
Exemplo n.º 4
0
    def test(self):
        """
        The purpose of this test was to check if changes to GCCXML
        would lead to changes in the outputted xml file (Meaning
        the bug was fixed).

        GCCXML wrongly outputted partial template specialization.
        CastXML does not have this bug. In this case we check if
        the template specialization can not be found; which is the
        expected/wanted behaviour.

        https://github.com/CastXML/CastXML/issues/20

        """

        src_reader = parser.source_reader_t(self.config)
        global_ns = declarations.get_global_namespace(
            src_reader.read_string(code))
        if 'GCCXML' in utils.xml_generator:
            a = global_ns.class_('A<const char [N]>')
            a.mem_fun('size')
        elif 'CastXML' in utils.xml_generator:
            self.assertRaises(
                global_ns.declaration_not_found_t,
                lambda: global_ns.class_('A<const char [N]>'))
    def test(self):
        src_reader = parser.source_reader_t(self.config)
        src_decls = src_reader.read_file(self.__fname)

        xmlfile = src_reader.create_xml_file(self.__fname)
        print(xmlfile)
        try:
            conf_t = parser.file_configuration_t
            fconfig = conf_t(
                data=xmlfile,
                start_with_declarations=None,
                content_type=conf_t.CONTENT_TYPE.GCCXML_GENERATED_FILE)

            prj_reader = parser.project_reader_t(self.config)
            prj_decls = prj_reader.read_files(
                [fconfig],
                compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE)

            declarations.dump_declarations(
                src_decls,
                os.path.join(
                    autoconfig.build_directory,
                    'xmlfile_reader.src.txt'))
            declarations.dump_declarations(
                prj_decls,
                os.path.join(
                    autoconfig.build_directory,
                    'xmlfile_reader.prj.txt'))

            if src_decls != prj_decls:
                self.fail(
                    "There is a difference between declarations in file %s." %
                    self.__fname)
        finally:
            pass  # utils.remove_file_no_raise( xmlfile )
 def __test_correctness_impl(self, file_name):
     prj_reader = parser.project_reader_t(self.config)
     prj_decls = prj_reader.read_files(
         [file_name] * 2,
         compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE)
     src_reader = parser.source_reader_t(self.config)
     src_decls = src_reader.read_file(file_name)
     if src_decls != prj_decls:
         s = src_decls[0]
         p = prj_decls[0]
         sr = open(
             os.path.join(
                 autoconfig.build_directory, file_name + '.sr.txt'), 'w+')
         pr = open(
             os.path.join(
                 autoconfig.build_directory, file_name + '.pr.txt'), 'w+')
         declarations.print_declarations(
             s, writer=lambda l: sr.write(l + os.linesep))
         declarations.print_declarations(
             p, writer=lambda l: pr.write(l + os.linesep))
         sr.close()
         pr.close()
         self.fail(
             "There is a difference between declarations in file %s." %
             file_name)
def gen_xml(params, q_result, q_error):
    '''
    Generate XML code
    @param params: List of parameters [gccxml,incPath,macros]
    @param q_result: python queue to put result in
    @param q_error: python queue to put error in
    @return None (isn't evaluated)
    '''
    try:
        config = parser.config_t( gccxml_path=params[0]
                                  , include_paths=params[1]
                                  , define_symbols=params[2])
    
        header_file = params[3]
        config.include_paths.append( os.path.split( header_file )[0] )
        config.working_directory = os.path.split( header_file )[0]
        reader = parser.source_reader_t( config=config )
        xml_file = reader.create_xml_file( header_file )
        
        xml_file_obj = file( xml_file )
        q_result.put( xml_file_obj.read() )
        xml_file_obj.close()
        os.remove( xml_file )
        #self._statistics.set_parse_time( parsed_time )
        #self._statistics.set_code_generation_time( 0 )
    except Exception, error:
        q_result.put(str( error ))
        q_error.put(str( error ))
Exemplo n.º 8
0
 def test2(self):
     code = 'int* aaaa[2][3][4][5];'
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     aaaa_type = global_ns.variable('aaaa').type
     self.assertTrue('int *[2][3][4][5]' == aaaa_type.decl_string,
                     aaaa_type.decl_string)
Exemplo n.º 9
0
 def test2(self):
     code = 'int* aaaa[2][3][4][5];'
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     aaaa_type = global_ns.var('aaaa').type
     self.failUnless(
         'int *[2][3][4][5]' == aaaa_type.decl_string,
         aaaa_type.decl_string)
Exemplo n.º 10
0
 def test3(self):
     code = 'int aaaa[2];'
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     aaaa_type = global_ns.variable('aaaa').type
     self.assertTrue(
         'int[2]' == aaaa_type.decl_string,
         aaaa_type.decl_string)
    def setUp( self ):
        self.original_get_architecture = utils.get_architecture
        utils.get_architecture = lambda: 64

        if not tester_64_t.global_ns:
            reader = parser.source_reader_t( self.config )
            tester_64_t.global_ns = reader.read_xml_file( 
                        os.path.join( autoconfig.data_directory, 'patcher_tester_64bit.xml' ) )[0].top_parent
        self.global_ns = tester_64_t.global_ns
Exemplo n.º 12
0
 def test4(self):
     code = 'struct xyz{}; xyz aaaa[2][3];'
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     aaaa_type = global_ns.variable('aaaa').type
     self.assertTrue(
         '::xyz[2][3]' == aaaa_type.decl_string,
         aaaa_type.decl_string)
Exemplo n.º 13
0
 def setUp(self):
     if not tester_32_t.global_ns:
         reader = parser.source_reader_t(self.config)
         tester_32_t.global_ns = reader.read_file(
             "patcher.hpp")[0].top_parent
         tester_32_t.xml_generator_from_xml_file = \
             reader.xml_generator_from_xml_file
     self.global_ns = tester_32_t.global_ns
     self.xml_generator_from_xml_file = \
         tester_32_t.xml_generator_from_xml_file
Exemplo n.º 14
0
    def setUp(self):
        self.original_get_architecture = utils.get_architecture
        utils.get_architecture = lambda: 64

        if not tester_64_t.global_ns:
            reader = parser.source_reader_t(self.config)
            tester_64_t.global_ns = reader.read_xml_file(
                os.path.join(autoconfig.data_directory,
                             'patcher_tester_64bit.xml'))[0].top_parent
        self.global_ns = tester_64_t.global_ns
Exemplo n.º 15
0
 def setUp(self):
     if not tester_32_t.global_ns:
         reader = parser.source_reader_t(self.config)
         tester_32_t.global_ns = reader.read_file(
             "patcher.hpp")[0].top_parent
         tester_32_t.xml_generator_from_xml_file = \
             reader.xml_generator_from_xml_file
     self.global_ns = tester_32_t.global_ns
     self.xml_generator_from_xml_file = \
         tester_32_t.xml_generator_from_xml_file
Exemplo n.º 16
0
 def setUp( self ):
     reader = parser.source_reader_t( self.config )
     if 32 == self.architecture:
         self.__decls = reader.read_file( 'patcher.hpp' )
     else:
         original_get_architecture = utils.get_architecture
         utils.get_architecture = lambda: 64
         self.__decls = reader.read_xml_file( 
                 os.path.join( autoconfig.data_directory, 'patcher_tester_64bit.xml' ) )
         utils.get_architecture = original_get_architecture
 def test_recursive_derived(self):
     src_reader = parser.source_reader_t( self.config )
     decls = declarations.make_flatten( src_reader.read_string( self.__code ) )
     classes = filter( lambda inst: isinstance( inst, declarations.class_t ), decls )
     for class_ in classes:
         self.failUnless( self.__recursive_derived.has_key( class_.name  ) )
         all_derived = class_.recursive_derived
         control_derived = self.__recursive_derived[ class_.name ]
         self.failUnless( len(control_derived) == len( all_derived ) )
         all_derived_names = map( lambda hi: hi.related_class.name, all_derived )
         self.failUnless( set( all_derived_names ) == control_derived )
Exemplo n.º 18
0
 def test_recursive_bases(self):
     src_reader = parser.source_reader_t(self.config)
     decls = declarations.make_flatten(src_reader.read_string(self.__code))
     classes = filter(lambda inst: isinstance(inst, declarations.class_t),
                      decls)
     for class_ in classes:
         self.failUnless(self.__recursive_bases.has_key(class_.name))
         all_bases = class_.recursive_bases
         control_bases = self.__recursive_bases[class_.name]
         self.failUnless(len(control_bases) == len(all_bases))
         all_bases_names = map(lambda hi: hi.related_class.name, all_bases)
         self.failUnless(set(all_bases_names) == control_bases)
Exemplo n.º 19
0
 def test_recursive_bases(self):
     src_reader = parser.source_reader_t(self.config)
     decls = declarations.make_flatten(src_reader.read_string(self.__code))
     classes = [
         inst for inst in decls if isinstance(inst, declarations.class_t)]
     for class_ in classes:
         self.assertTrue(class_.name in self.__recursive_bases)
         all_bases = class_.recursive_bases
         control_bases = self.__recursive_bases[class_.name]
         self.assertTrue(len(control_bases) == len(all_bases))
         all_bases_names = [hi.related_class.name for hi in all_bases]
         self.assertTrue(set(all_bases_names) == control_bases)
Exemplo n.º 20
0
def test_source_on_include_std_dot_hpp():
    include_std_header = os.path.join(autoconfig.data_directory,
                                      'include_std.hpp')
    clock_prev = time.perf_counter()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path), dcache)
    reader.read_file(include_std_header)
    dcache.flush()
    clock_now = time.perf_counter()
    print(('without cache: %f seconds' % (clock_now - clock_prev)))

    clock_prev = time.perf_counter()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path), dcache)
    reader.read_file(include_std_header)
    clock_now = time.perf_counter()
    print(('with cache   : %f seconds' % (clock_now - clock_prev)))
Exemplo n.º 21
0
def test_on_windows_dot_h():
    he = r"2003\Vc7\PlatformSDK\Include\windows.h"
    windows_header = r"D:\Program Files\Microsoft Visual Studio .NET " + he
    clock_prev = time.perf_counter()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path), dcache)
    reader.read_file(windows_header)
    dcache.flush()
    clock_now = time.perf_counter()
    print(('without cache: %f seconds' % (clock_now - clock_prev)))

    clock_prev = time.perf_counter()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path), dcache)
    reader.read_file(windows_header)
    clock_now = time.perf_counter()
    print(('with cache   : %f seconds' % (clock_now - clock_prev)))
Exemplo n.º 22
0
    def test(self):
        src_reader = parser.source_reader_t(self.config)
        global_ns = declarations.get_global_namespace(
            src_reader.read_string(code))

        # TODO: demangled attribute does not existe for castxml
        # and will not be added. Remove this test once gccxml
        # support is dropped.
        if 'GCCXML' in utils.xml_generator:
            global_ns.decl('A<int>')
            f = global_ns.free_fun('f')
            self.assertTrue(f.demangled == 'void f<int>(A<int> const&)')
Exemplo n.º 23
0
 def setUp(self):
     reader = parser.source_reader_t( self.config )
     decls = None
     if 32 == self.architecture:
         decls = reader.read_file( self.header )
     else:
         original_get_architecture = utils.get_architecture
         utils.get_architecture = lambda: 64
         decls = reader.read_xml_file( 
                 os.path.join( autoconfig.data_directory, 'demangled_tester_64bit.xml' ) )
         utils.get_architecture = original_get_architecture
     self.global_ns = declarations.get_global_namespace( decls )
Exemplo n.º 24
0
    def test_keep_va_list_tag(self):

        if "gccxml" in self.config.xml_generator or \
                platform.system() == 'Windows':
            return True

        self.config.flags = ["f1"]
        src_reader = parser.source_reader_t(self.config)
        decls = declarations.make_flatten(src_reader.read_string(self.__code))

        classes = [
            i for i in decls if isinstance(i, declarations.class_t)]

        typedefs = [
            i for i in decls if isinstance(i, declarations.typedef_t)]

        variables = [
            i for i in decls if isinstance(i, declarations.variable_t)]

        tag = "__va_list_tag"

        self.assertTrue(tag in [class_.name for class_ in classes])
        self.assertTrue("a" in [class_.name for class_ in classes])
        if len(classes) == 2:
            for c in self.known_classes:
                self.assertTrue(c in [cl.name for cl in classes])
        elif len(classes) == 3:
            for c in self.known_classes_llvm39:
                # This is for llvm 3.9
                self.assertTrue(c in [cl.name for cl in classes])

        self.assertTrue(len(typedefs) == 4 or len(typedefs) == 5)
        if len(typedefs) == 5:
            # This is for llvm 3.9. The class __va_list_tag struct is still
            # there but the typedef is gone
            for t in self.known_typedefs_llvm39:
                self.assertTrue(t in [ty.name for ty in typedefs])
            self.assertTrue(
                "__NSConstantString_tag" in
                [class_.name for class_ in classes])
            self.assertTrue(
                "__NSConstantString" in [ty.name for ty in typedefs])
        else:
            for t in self.known_typedefs:
                self.assertTrue(t in [ty.name for ty in typedefs])

        self.assertTrue(
            tag in [var.decl_string.split("::")[1] for var in variables])

        # 4 variables in __va_list_tag, and 4 more in __NSConstantString_tag
        # for llvm 3.9
        self.assertTrue(len(variables) == 4 or len(variables) == 8)
Exemplo n.º 25
0
 def setUp(self):
     reader = parser.source_reader_t(self.config)
     decls = None
     if 32 == self.architecture:
         decls = reader.read_file(self.header)
     else:
         original_get_architecture = utils.get_architecture
         utils.get_architecture = lambda: 64
         decls = reader.read_xml_file(
             os.path.join(autoconfig.data_directory,
                          'demangled_tester_64bit.xml'))
         utils.get_architecture = original_get_architecture
     self.global_ns = declarations.get_global_namespace(decls)
Exemplo n.º 26
0
    def test_keep_va_list_tag(self):

        if "gccxml" in self.config.xml_generator:
            return True

        self.config.flags = ["f1"]
        src_reader = parser.source_reader_t(self.config)
        decls = declarations.make_flatten(src_reader.read_string(self.__code))

        classes = [
            i for i in decls if isinstance(i, declarations.class_t)]

        typedefs = [
            i for i in decls if isinstance(i, declarations.typedef_t)]

        variables = [
            i for i in decls if isinstance(i, declarations.variable_t)]

        tag = "__va_list_tag"

        self.assertTrue(tag in [class_.name for class_ in classes])
        self.assertTrue("a" in [class_.name for class_ in classes])
        if len(classes) == 2:
            for c in self.known_classes:
                self.assertTrue(c in [cl.name for cl in classes])
        elif len(classes) == 3:
            for c in self.known_classes_llvm39:
                # This is for llvm 3.9
                self.assertTrue(c in [cl.name for cl in classes])

        self.assertTrue(len(typedefs) == 4 or len(typedefs) == 5)
        if len(typedefs) == 5:
            # This is for llvm 3.9. The class __va_list_tag struct is still
            # there but the typedef is gone
            for t in self.known_typedefs_llvm39:
                self.assertTrue(t in [ty.name for ty in typedefs])
            self.assertTrue(
                "__NSConstantString_tag" in
                [class_.name for class_ in classes])
            self.assertTrue(
                "__NSConstantString" in [ty.name for ty in typedefs])
        else:
            for t in self.known_typedefs:
                self.assertTrue(t in [ty.name for ty in typedefs])

        self.assertTrue(
            tag in [var.decl_string.split("::")[1] for var in variables])

        # 4 variables in __va_list_tag, and 4 more in __NSConstantString_tag
        # for llvm 3.9
        self.assertTrue(len(variables) == 4 or len(variables) == 8)
Exemplo n.º 27
0
def test_on_windows_dot_h():
    he = r"2003\Vc7\PlatformSDK\Include\windows.h"
    windows_header = r"D:\Program Files\Microsoft Visual Studio .NET " + he
    clock_prev = time.clock()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path),
        dcache)
    reader.read_file(windows_header)
    dcache.flush()
    clock_now = time.clock()
    print('without cache: %f seconds' % (clock_now - clock_prev))

    clock_prev = time.clock()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path),
        dcache)
    reader.read_file(windows_header)
    clock_now = time.clock()
    print('with cache   : %f seconds' % (clock_now - clock_prev))
Exemplo n.º 28
0
 def test6(self):
     code = 'char volatile arr[4] = {};'
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     arr_type = global_ns.variable('arr').decl_type
     if self.config.xml_generator == "gccxml":
         self.assertTrue('char [4] volatile' == arr_type.decl_string,
                         arr_type.decl_string)
     else:
         self.assertTrue('char volatile [4]' == arr_type.decl_string,
                         arr_type.decl_string)
     self.assertTrue(declarations.is_array(arr_type))
     self.assertTrue(declarations.is_volatile(arr_type))
Exemplo n.º 29
0
    def setUp(self):
        self.original_get_architecture = utils.get_architecture
        utils.get_architecture = lambda: 64

        if not tester_64_t.global_ns:
            reader = parser.source_reader_t(self.config)
            if "castxml" not in self.config.xml_generator:
                tester_64_t.global_ns = reader.read_xml_file(
                    os.path.join(autoconfig.data_directory,
                                 "patcher_tester_64bit.xml"))[0].top_parent
            else:
                tester_64_t.global_ns = reader.read_file(
                    "patcher.hpp")[0].top_parent
        self.global_ns = tester_64_t.global_ns
    def test(self):
        prj_reader = parser.project_reader_t( self.config )
        prj_decls = prj_reader.read_files( self.__files
                                           , compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE )
        src_reader = parser.source_reader_t( self.config )
        src_decls = src_reader.read_file( 'separate_compilation/all.h' )
        
        declarations.dump_declarations( src_decls
                                        , os.path.join( autoconfig.build_directory, 'separate_compilation.sr.txt' ) )

        declarations.dump_declarations( prj_decls
                                        , os.path.join( autoconfig.build_directory, 'separate_compilation.pr.txt' ) )

        self.failUnless( src_decls == prj_decls, "There is a difference between declarations" )
Exemplo n.º 31
0
 def test_recursive_derived(self):
     src_reader = parser.source_reader_t(self.config)
     decls = declarations.make_flatten(src_reader.read_string(self.__code))
     classes = [
         inst for inst in decls if isinstance(
             inst,
             declarations.class_t)]
     for class_ in classes:
         self.failUnless(class_.name in self.__recursive_derived)
         all_derived = class_.recursive_derived
         control_derived = self.__recursive_derived[class_.name]
         self.failUnless(len(control_derived) == len(all_derived))
         all_derived_names = [hi.related_class.name for hi in all_derived]
         self.failUnless(set(all_derived_names) == control_derived)
Exemplo n.º 32
0
 def test_by_location(self):
     reader = parser.source_reader_t( self.config )
     decls = reader.read_file( self.__fname )
     decls_count = len( declarations.make_flatten( decls ) )
     filtered = declarations.filtering.by_location( decls, [autoconfig.data_directory] )
     flatten_filtered = declarations.make_flatten( filtered )
     self.failUnless( len( flatten_filtered  ) != decls_count )
     for decl in flatten_filtered:
         if decl.location:
             self.failUnless( declarations.filtering.normalize_path( decl.location.file_name )
                              , self.__fpath )
     self.failUnless( declarations.find_declaration( filtered
                                                     , name='color'
                                                     , type=declarations.enumeration_t
                                                     , recursive=False) )
Exemplo n.º 33
0
    def _create_xml_file(self):
        # On windows I have some problems to compile boost.date_time
        # library, so I use xml files generated on linux
        config = parser.config_t(
            gccxml_path=date_time_settings.gccxml.executable,
            include_paths=[date_time_settings.boost.include],
            define_symbols=date_time_settings.defined_symbols,
            undefine_symbols=date_time_settings.undefined_symbols,
        )

        reader = parser.source_reader_t(config)
        destination = os.path.join(date_time_settings.date_time_pypp_include, "date_time.pypp.xml")
        if sys.platform == "linux2":
            reader.create_xml_file(self.__file, destination)
        return destination
Exemplo n.º 34
0
    def setUp(self):
        self.original_get_architecture = utils.get_architecture
        utils.get_architecture = lambda: 64

        if not tester_64_t.global_ns:
            reader = parser.source_reader_t(self.config)
            if "castxml" not in self.config.xml_generator:
                tester_64_t.global_ns = reader.read_xml_file(
                    os.path.join(
                        autoconfig.data_directory,
                        "patcher_tester_64bit.xml"))[0].top_parent
            else:
                tester_64_t.global_ns = reader.read_file(
                    "patcher.hpp")[0].top_parent
        self.global_ns = tester_64_t.global_ns
Exemplo n.º 35
0
    def _create_xml_file(self):
        #On windows I have some problems to compile boost.date_time
        #library, so I use xml files generated on linux
        config = parser.config_t(
            gccxml_path=date_time_settings.gccxml.executable,
            include_paths=[date_time_settings.boost.include],
            define_symbols=date_time_settings.defined_symbols,
            undefine_symbols=date_time_settings.undefined_symbols)

        reader = parser.source_reader_t(config)
        destination = os.path.join(date_time_settings.date_time_pypp_include,
                                   'date_time.pypp.xml')
        if sys.platform == 'linux2':
            reader.create_xml_file(self.__file, destination)
        return destination
Exemplo n.º 36
0
def test_source_on_include_std_dot_hpp():
    include_std_header = os.path.join(
        autoconfig.data_directory,
        'include_std.hpp')
    clock_prev = time.clock()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path),
        dcache)
    reader.read_file(include_std_header)
    dcache.flush()
    clock_now = time.clock()
    print('without cache: %f seconds' % (clock_now - clock_prev))

    clock_prev = time.clock()
    dcache = parser.file_cache_t(dcache_file_name)
    reader = parser.source_reader_t(
        parser.xml_generator_configuration_t(
            xml_generator_path=autoconfig.generator_path),
        dcache)
    reader.read_file(include_std_header)
    clock_now = time.clock()
    print('with cache   : %f seconds' % (clock_now - clock_prev))
Exemplo n.º 37
0
 def test_recursive_bases(self):
     src_reader = parser.source_reader_t(self.config)
     decls = declarations.make_flatten(src_reader.read_string(self.__code))
     classes = [
         inst for inst in decls if isinstance(inst, declarations.class_t)]
     for class_ in classes:
         if "CastXML" in utils.xml_generator and \
                 class_.name == "__va_list_tag":
             # With CastXML; there is a __va_list_tag which is generated by
             # clang. Do not run the tests for it.
             continue
         self.failUnless(class_.name in self.__recursive_bases)
         all_bases = class_.recursive_bases
         control_bases = self.__recursive_bases[class_.name]
         self.failUnless(len(control_bases) == len(all_bases))
         all_bases_names = [hi.related_class.name for hi in all_bases]
         self.failUnless(set(all_bases_names) == control_bases)
Exemplo n.º 38
0
 def test6(self):
     code = 'char volatile arr[4] = {};'
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     arr_type = global_ns.variable('arr').decl_type
     if self.config.xml_generator == "gccxml":
         self.assertTrue(
             'char [4] volatile' == arr_type.decl_string,
             arr_type.decl_string)
     else:
         self.assertTrue(
             'char volatile [4]' == arr_type.decl_string,
             arr_type.decl_string)
     self.assertTrue(
         declarations.is_array(arr_type))
     self.assertTrue(
         declarations.is_volatile(arr_type))
    def test(self):
        src_reader = parser.source_reader_t( self.config )
        src_decls = src_reader.read_file( self.__fname )        

        xmlfile = src_reader.create_xml_file( self.__fname )
        try:
            fconfig = parser.file_configuration_t( data=xmlfile
                                                   , start_with_declarations=None
                                                   , content_type=parser.file_configuration_t.CONTENT_TYPE.GCCXML_GENERATED_FILE )
            
            prj_reader = parser.project_reader_t( self.config )
            prj_decls = prj_reader.read_files( [fconfig]
                                               , compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE )
            
            self.failUnless( src_decls == prj_decls
                             , "There is a difference between declarations in file %s." % self.__fname )
        finally:
            utils.remove_file_no_raise( xmlfile )
Exemplo n.º 40
0
    def test(self):
        src_reader = parser.source_reader_t( self.config )
        src_decls = src_reader.read_file( self.__fname )        

        xmlfile = src_reader.create_xml_file( self.__fname )
        try:
            fconfig = parser.file_configuration_t( data=xmlfile
                                                   , start_with_declarations=None
                                                   , content_type=parser.file_configuration_t.CONTENT_TYPE.GCCXML_GENERATED_FILE )
            
            prj_reader = parser.project_reader_t( self.config )
            prj_decls = prj_reader.read_files( [fconfig]
                                               , compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE )
            
            self.failUnless( src_decls == prj_decls
                             , "There is a difference between declarations in file %s." % self.__fname )
        finally:
            utils.remove_file_no_raise( xmlfile )
Exemplo n.º 41
0
    def test_remove_va_list_tag(self):

        if "gccxml" in self.config.xml_generator or \
                platform.system() == 'Windows':
            return True

        self.config.flags = []
        src_reader = parser.source_reader_t(self.config)
        decls = declarations.make_flatten(src_reader.read_string(self.__code))

        classes = [
            i for i in decls if isinstance(i, declarations.class_t)]

        typedefs = [
            i for i in decls if isinstance(i, declarations.typedef_t)]

        variables = [
            i for i in decls if isinstance(i, declarations.variable_t)]

        tag = "__va_list_tag"

        self.assertFalse(tag in [class_.name for class_ in classes])
        self.assertTrue("a" in [class_.name for class_ in classes])
        self.assertTrue(len(classes) == 1)

        self.assertFalse(tag in [ty.name for ty in typedefs])
        self.assertTrue(len(typedefs) == 3 or len(typedefs) == 4)
        if len(typedefs) == 4:
            # This is for llvm 3.9
            for t in self.known_typedefs_llvm39:
                self.assertTrue(t in [ty.name for ty in typedefs])
            self.assertFalse(
                "__NSConstantString_tag"
                in [class_.name for class_ in classes])
            self.assertFalse(
                "__NSConstantString" in [ty.name for ty in typedefs])
        else:
            for t in self.known_typedefs:
                self.assertTrue(t in [ty.name for ty in typedefs])

        self.assertFalse(
            tag in [var.decl_string.split("::")[1] for var in variables])
        self.assertTrue(len(variables) == 0)
Exemplo n.º 42
0
    def setUp(self):
        if not self.global_ns:

            # Extract the xml file from the bz2 archive
            bz2_path = os.path.join(autoconfig.data_directory,
                                    'ogre.1.7.xml.bz2')
            self.xml_path = os.path.join(autoconfig.data_directory,
                                         'ogre.1.7.xml')
            with open(self.xml_path, 'wb') as new_file:
                # bz2.BZ2File can not be used in a with statement in python 2.6
                bz2_file = bz2.BZ2File(bz2_path, 'rb')
                for data in iter(lambda: bz2_file.read(100 * 1024), b''):
                    new_file.write(data)
                bz2_file.close()

            reader = parser.source_reader_t(autoconfig.cxx_parsers_cfg.gccxml)
            self.global_ns = declarations.get_global_namespace(
                reader.read_xml_file(self.xml_path))
            self.global_ns.init_optimizer()
Exemplo n.º 43
0
    def test_remove_va_list_tag(self):

        if "gccxml" in self.config.xml_generator:
            return True

        self.config.flags = []
        src_reader = parser.source_reader_t(self.config)
        decls = declarations.make_flatten(src_reader.read_string(self.__code))

        classes = [
            i for i in decls if isinstance(i, declarations.class_t)]

        typedefs = [
            i for i in decls if isinstance(i, declarations.typedef_t)]

        variables = [
            i for i in decls if isinstance(i, declarations.variable_t)]

        tag = "__va_list_tag"

        self.assertFalse(tag in [class_.name for class_ in classes])
        self.assertTrue("a" in [class_.name for class_ in classes])
        self.assertTrue(len(classes) == 1)

        self.assertFalse(tag in [ty.name for ty in typedefs])
        self.assertTrue(len(typedefs) == 3 or len(typedefs) == 4)
        if len(typedefs) == 4:
            # This is for llvm 3.9
            for t in self.known_typedefs_llvm39:
                self.assertTrue(t in [ty.name for ty in typedefs])
            self.assertFalse(
                "__NSConstantString_tag"
                in [class_.name for class_ in classes])
            self.assertFalse(
                "__NSConstantString" in [ty.name for ty in typedefs])
        else:
            for t in self.known_typedefs:
                self.assertTrue(t in [ty.name for ty in typedefs])

        self.assertFalse(
            tag in [var.decl_string.split("::")[1] for var in variables])
        self.assertTrue(len(variables) == 0)
    def test(self):
        prj_reader = parser.project_reader_t(self.config)
        prj_decls = prj_reader.read_files(
            self.__files,
            compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE)
        src_reader = parser.source_reader_t(self.config)
        src_decls = src_reader.read_file('separate_compilation/all.h')

        declarations.dump_declarations(
            src_decls,
            os.path.join(autoconfig.build_directory,
                         'separate_compilation.sr.txt'))

        declarations.dump_declarations(
            prj_decls,
            os.path.join(autoconfig.build_directory,
                         'separate_compilation.pr.txt'))

        self.assertTrue(src_decls == prj_decls,
                        "There is a difference between declarations")
Exemplo n.º 45
0
 def _create_xml(self):
     try:
         start_time = time.clock()
         config = self._parser_configurator.parser_configuration()
         header_file = self._header_file_configurator.header_file()
         config.include_paths.append(os.path.split(header_file)[0])
         config.working_directory = os.path.split(header_file)[0]
         reader = parser.source_reader_t(config=config)
         xml_file = reader.create_xml_file(header_file)
         parsed_time = time.clock() - start_time
         xml_file_obj = file(xml_file)
         self._generated_code.set_generated_code(xml_file_obj.read())
         xml_file_obj.close()
         os.remove(xml_file)
         self._statistics.set_parse_time(parsed_time)
         self._statistics.set_code_generation_time(0)
     except Exception, error:
         user_msg = ['Error occured during code generation process!']
         user_msg.append('Error:')
         user_msg.append(str(error))
         self._generated_code.set_generated_code('\n'.join(user_msg))
Exemplo n.º 46
0
 def _create_xml( self ):
     try:
         start_time = time.clock()        
         config = self._parser_configurator.parser_configuration()
         header_file = self._header_file_configurator.header_file()
         config.include_paths.append( os.path.split( header_file )[0] )
         config.working_directory = os.path.split( header_file )[0]
         reader = parser.source_reader_t( config=config )
         xml_file = reader.create_xml_file( header_file )
         parsed_time = time.clock() - start_time
         xml_file_obj = file( xml_file )
         self._generated_code.set_generated_code( xml_file_obj.read() )
         xml_file_obj.close()
         os.remove( xml_file )
         self._statistics.set_parse_time( parsed_time )
         self._statistics.set_code_generation_time( 0 )
     except Exception, error:
         user_msg = [ 'Error occured during code generation process!' ]
         user_msg.append( 'Error:' )
         user_msg.append( str( error ) )
         self._generated_code.set_generated_code( '\n'.join( user_msg ) )
    def __test_correctness_impl(self, file_name):
        prj_reader = parser.project_reader_t(self.config)
        prj_decls = prj_reader.read_files(
            [file_name] * 2,
            compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE)
        src_reader = parser.source_reader_t(self.config)
        src_decls = src_reader.read_file(file_name)
        if src_decls != prj_decls:
            s = src_decls[0]
            p = prj_decls[0]
            bdir = autoconfig.build_directory
            with open(os.path.join(bdir, file_name + '.sr.txt'), 'w+') as sr:
                with open(os.path.join(bdir, file_name + '.pr.txt'),
                          'w+') as pr:

                    declarations.print_declarations(
                        s, writer=lambda l: sr.write(l + os.linesep))
                    declarations.print_declarations(
                        p, writer=lambda l: pr.write(l + os.linesep))

            self.fail(
                "There is a difference between declarations in file %s." %
                file_name)
Exemplo n.º 48
0
    def test(self):
        """
        The purpose of this test was to check if changes to GCCXML
        would lead to changes in the outputted xml file (Meaning
        the bug was fixed).

        GCCXML wrongly outputted partial template specialization.
        CastXML does not have this bug. In this case we check if
        the template specialization can not be found; which is the
        expected/wanted behaviour.

        https://github.com/CastXML/CastXML/issues/20

        """

        src_reader = parser.source_reader_t(self.config)
        global_ns = declarations.get_global_namespace(
            src_reader.read_string(code))
        if 'GCCXML' in utils.xml_generator:
            a = global_ns.class_('A<const char [N]>')
            a.mem_fun('size')
        elif 'CastXML' in utils.xml_generator:
            self.assertRaises(global_ns.declaration_not_found_t,
                              lambda: global_ns.class_('A<const char [N]>'))
Exemplo n.º 49
0
 def setUp(self):
     if not tester_32_t.global_ns:
         reader = parser.source_reader_t(self.config)
         tester_32_t.global_ns = reader.read_file(
             'patcher.hpp')[0].top_parent
     self.global_ns = tester_32_t.global_ns
Exemplo n.º 50
0
 def setUp(self):
     reader = parser.source_reader_t(self.config)
     decls = reader.read_file(self.header)
     self.global_ns = declarations.get_global_namespace(decls)
Exemplo n.º 51
0
 def test(self):
     src_reader = parser.source_reader_t(self.config)
     global_ns = declarations.get_global_namespace(
         src_reader.read_string(code))
     self.assertTrue(global_ns.variable('a').bits == 1)
     self.assertTrue(global_ns.variable('unused').bits == 31)
Exemplo n.º 52
0
 def setUp(self):
     if not self.global_ns:
         xml_file = os.path.join( autoconfig.data_directory, 'ogre.1.7.xml' )
         reader = parser.source_reader_t( autoconfig.cxx_parsers_cfg.gccxml )            
         self.global_ns = declarations.get_global_namespace( reader.read_xml_file(xml_file) )
         self.global_ns.init_optimizer()