Ejemplo n.º 1
0
    def test_z_compare_parsers( self ):
        if 'nt' != os.name:
            return
        dsymbols, dparser = binary_parsers.merge_information( self.global_ns, self.dll_file, runs_under_unittest=True )
        msymbols, mparser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True )

        self.failUnless( len( dparser.loaded_symbols ) == len( mparser.loaded_symbols ) )

        was_error = False
        for blob, decl in dsymbols.iteritems():
            if blob not in msymbols:
                was_error = True
                print '\n%s could not be found in .map file' % binary_parsers.undecorate_blob( blob )
                #~ self.failUnless( blob in msymbols, binary_parsers.undecorate_blob( blob ) )
            else:
                mdecl = msymbols[ blob ]
                self.failUnless( mdecl is decl )
        self.failUnless( was_error == False )
Ejemplo n.º 2
0
    def __tester_impl(self, fname, expected_symbols):
        symbols, parser = binary_parsers.merge_information(
            self.global_ns, fname, runs_under_unittest=True)
        # this doesn't work reliably
        # self.assertTrue(
        #    len(symbols) == expected_symbols,
        # "The expected symbols number(%d),
        # is different from the actual one(%d)"
        # % ( expected_symbols, len(symbols) ) )
        self.assertTrue('identity' in symbols)

        msg = []
        blob_names = set()
        for blob in parser.loaded_symbols:
            if isinstance(blob, tuple):
                blob = blob[0]
            if 'nt' == os.name:
                # TODO: find out where undecorate function is exposed on linux
                undname = binary_parsers.undecorate_blob(blob)
                if "`" in undname:
                    continue
            blob_names.add(blob)

        decl_blob_names = set(symbols.keys())

        issuperset = decl_blob_names.issuperset(blob_names)
        if not issuperset:
            common = decl_blob_names.intersection(blob_names)

            decl_blob_names.difference_update(common)
            blob_names.difference_update(common)
            if not self.known_issues.issubset(blob_names):
                blob_names.difference_update(self.known_issues)
                if sys.version_info[0] == 2 and sys.version_info[1] == 5:
                    if 0 == len(decl_blob_names) and 0 == len(blob_names):
                        return
                msg.append("decl_blob_names :")
                for i in decl_blob_names:
                    msg.append('\t==>%s<==' % i)
                msg.append("blob_names :")
                for i in blob_names:
                    msg.append('\t==>%s<==' % i)

                self.fail(os.linesep.join(msg))
Ejemplo n.º 3
0
    def __tester_impl(self, fname, expected_symbols):
        symbols, parser = binary_parsers.merge_information(
            self.global_ns, fname, runs_under_unittest=True)
        # this doesn't work reliably
        # self.assertTrue(
        #    len(symbols) == expected_symbols,
        # "The expected symbols number(%d),
        # is different from the actual one(%d)"
        # % ( expected_symbols, len(symbols) ) )
        self.assertTrue('identity' in symbols)

        msg = []
        blob_names = set()
        for blob in parser.loaded_symbols:
            if isinstance(blob, tuple):
                blob = blob[0]
            if 'nt' == os.name:
                # TODO: find out where undecorate function is exposed on linux
                undname = binary_parsers.undecorate_blob(blob)
                if "`" in undname:
                    continue
            blob_names.add(blob)

        decl_blob_names = set(symbols.keys())

        issuperset = decl_blob_names.issuperset(blob_names)
        if not issuperset:
            common = decl_blob_names.intersection(blob_names)

            decl_blob_names.difference_update(common)
            blob_names.difference_update(common)
            if not self.known_issues.issubset(blob_names):
                blob_names.difference_update(self.known_issues)
                if sys.version_info[0] == 2 and sys.version_info[1] == 5:
                    if 0 == len(decl_blob_names) and 0 == len(blob_names):
                        return
                msg.append("decl_blob_names :")
                for i in decl_blob_names:
                    msg.append('\t==>%s<==' % i)
                msg.append("blob_names :")
                for i in blob_names:
                    msg.append('\t==>%s<==' % i)

                self.fail(os.linesep.join(msg))
Ejemplo n.º 4
0
    def test_z_compare_parsers(self):
        if 'nt' != os.name:
            return
        dsymbols, dparser = binary_parsers.merge_information(
            self.global_ns, self.dll_file, runs_under_unittest=True)
        msymbols, mparser = binary_parsers.merge_information(
            self.global_ns, self.map_file, runs_under_unittest=True)

        self.assertTrue(
            len(dparser.loaded_symbols) == len(mparser.loaded_symbols))

        was_error = False
        for blob, decl in dsymbols.items():
            if blob not in msymbols:
                was_error = True
                print('\n%s could not be found in .map file' %
                      binary_parsers.undecorate_blob(blob))
                # self.assertTrue( blob in msymbols,
                # binary_parsers.undecorate_blob( blob ) )
            else:
                mdecl = msymbols[blob]
                self.assertTrue(mdecl is decl)
        self.assertTrue(was_error is False)