NEW: Add regression test utility for HandsPlayers
This commit is contained in:
		
							parent
							
								
									fbcf987d97
								
							
						
					
					
						commit
						bb6225f80c
					
				
							
								
								
									
										90
									
								
								pyfpdb/TestHandsPlayers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								pyfpdb/TestHandsPlayers.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
import sys
 | 
			
		||||
import os
 | 
			
		||||
import codecs
 | 
			
		||||
import pprint
 | 
			
		||||
import PokerStarsToFpdb
 | 
			
		||||
from Hand import *
 | 
			
		||||
import Configuration
 | 
			
		||||
import Database
 | 
			
		||||
import SQL
 | 
			
		||||
import fpdb_import
 | 
			
		||||
 | 
			
		||||
def error_report( filename, hand, stat, ghash, testhash):
 | 
			
		||||
    print "Regression Test Error:"
 | 
			
		||||
    print "\tFile: %s" % filename
 | 
			
		||||
    print "\tStat: %s" % stat
 | 
			
		||||
 | 
			
		||||
def compare(leaf, importer):
 | 
			
		||||
    filename = leaf
 | 
			
		||||
    #print "DEBUG: fileanme: %s" % filename
 | 
			
		||||
 | 
			
		||||
    # Test if this is a hand history file
 | 
			
		||||
    if filename.endswith('.txt'):
 | 
			
		||||
        # test if there is a .hp version of the file
 | 
			
		||||
        importer.addBulkImportImportFileOrDir(filename, site="PokerStars")
 | 
			
		||||
        (stored, dups, partial, errs, ttime) = importer.runImport()
 | 
			
		||||
        if os.path.isfile(filename + '.hp'):
 | 
			
		||||
            # Compare them
 | 
			
		||||
            hashfilename = filename + '.hp'
 | 
			
		||||
 | 
			
		||||
            in_fh = codecs.open(hashfilename, 'r', 'utf8')
 | 
			
		||||
            whole_file = in_fh.read()
 | 
			
		||||
            in_fh.close()
 | 
			
		||||
 | 
			
		||||
            testhash = eval(whole_file)
 | 
			
		||||
 | 
			
		||||
            hhc = importer.getCachedHHC()
 | 
			
		||||
            handlist = hhc.getProcessedHands()
 | 
			
		||||
            #We _really_ only want to deal with a single hand here.
 | 
			
		||||
            for hand in handlist:
 | 
			
		||||
                ghash = hand.stats.getHandsPlayers()
 | 
			
		||||
                for p in ghash:
 | 
			
		||||
                    pstat = ghash[p]
 | 
			
		||||
                    teststat = testhash[p]
 | 
			
		||||
                    for stat in pstat:
 | 
			
		||||
                        if pstat[stat] == teststat[stat]:
 | 
			
		||||
                            # The stats match - continue
 | 
			
		||||
                            pass
 | 
			
		||||
                        else:
 | 
			
		||||
                            # Stats don't match - Doh!
 | 
			
		||||
                            error_report(filename, hand, stat, ghash, testhash)
 | 
			
		||||
 | 
			
		||||
        importer.clearFileList()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def walk_testfiles(dir, function, importer):
 | 
			
		||||
    """Walks a directory, and executes a callback on each file """
 | 
			
		||||
    dir = os.path.abspath(dir)
 | 
			
		||||
    for file in [file for file in os.listdir(dir) if not file in [".",".."]]:
 | 
			
		||||
        nfile = os.path.join(dir,file)
 | 
			
		||||
        if os.path.isdir(nfile):
 | 
			
		||||
            walk_testfiles(nfile, compare, importer)
 | 
			
		||||
        else:
 | 
			
		||||
            compare(nfile, importer)
 | 
			
		||||
 | 
			
		||||
def main(argv=None):
 | 
			
		||||
    if argv is None:
 | 
			
		||||
        argv = sys.argv[1:]
 | 
			
		||||
 | 
			
		||||
    config = Configuration.Config(file = "HUD_config.test.xml")
 | 
			
		||||
    db = Database.Database(config)
 | 
			
		||||
    sql = SQL.Sql(db_server = 'sqlite')
 | 
			
		||||
    settings = {}
 | 
			
		||||
    settings.update(config.get_db_parameters())
 | 
			
		||||
    settings.update(config.get_tv_parameters())
 | 
			
		||||
    settings.update(config.get_import_parameters())
 | 
			
		||||
    settings.update(config.get_default_paths())
 | 
			
		||||
    db.recreate_tables()
 | 
			
		||||
    importer = fpdb_import.Importer(False, settings, config)
 | 
			
		||||
    importer.setDropIndexes("don't drop")
 | 
			
		||||
    importer.setFailOnError(True)
 | 
			
		||||
    importer.setThreads(-1)
 | 
			
		||||
    importer.setCallHud(False)
 | 
			
		||||
    importer.setFakeCacheHHC(True)
 | 
			
		||||
    
 | 
			
		||||
    walk_testfiles("regression-test-files/cash/Stars/", compare, importer)
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user