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 )
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))
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))
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)