From 8c3e3b5795c3e5b5c8842cb76aa4d6ce03089a5b Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 11 Nov 2010 13:59:26 +0800 Subject: [PATCH] New test script: TestSummaryImport Almost a direct copy of THP to assist in regression testing summary import formats --- pyfpdb/TestSummaryImport.py | 226 ++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100755 pyfpdb/TestSummaryImport.py diff --git a/pyfpdb/TestSummaryImport.py b/pyfpdb/TestSummaryImport.py new file mode 100755 index 00000000..cf128841 --- /dev/null +++ b/pyfpdb/TestSummaryImport.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2010, Carl Gherardi +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +######################################################################## + +import sys +import os +import codecs +import pprint +import Configuration +import Database +import SQL +from GuiTourneyImport import SummaryImporter + + +class FpdbError: + def __init__(self, sitename): + self.site = sitename + self.errorcount = 0 + self.histogram = {} + self.statcount = {} + + def error_report(self, filename, hand, stat, ghash, testhash, player): + print "Regression Test Error:" + print "\tFile: %s" % filename + print "\tStat: %s" % stat + print "\tPlayer: %s" % player + if filename in self.histogram: + self.histogram[filename] += 1 + else: + self.histogram[filename] = 1 + + if stat in self.statcount: + self.statcount[stat] += 1 + else: + self.statcount[stat] = 1 + self.errorcount += 1 + + def print_histogram(self): + print "%s:" % self.site + for f in self.histogram: + idx = f.find('regression') + print "(%3d) : %s" %(self.histogram[f], f[idx:]) + +def compare(leaf, importer, errors, site): + filename = leaf + #print "DEBUG: fileanme: %s" % filename + + if filename.endswith('.txt'): + # test if there is a .hp version of the file + importer.addImportFileOrDir(filename, site = site) + (stored, errs) = importer.runImport() + +# if os.path.isfile(filename + '.hp') and errs < 1: +# # 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: +# #print "DEBUG: player: '%s'" % p +# pstat = ghash[p] +# teststat = testhash[p] +# +# for stat in pstat: +# #print "pstat[%s][%s]: %s == %s" % (p, stat, pstat[stat], teststat[stat]) +# try: +# if pstat[stat] == teststat[stat]: +# # The stats match - continue +# pass +# else: +# # Stats don't match - Doh! +# errors.error_report(filename, hand, stat, ghash, testhash, p) +# except KeyError, e: +# errors.error_report(filename, False, "KeyError: '%s'" % stat, False, False, p) + if errs > 0: + errors.error_report(filename, False, "Parse", False, False, False) + + importer.clearFileList() + + + +def walk_testfiles(dir, function, importer, errors, site): + """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, errors, site) + else: + compare(nfile, importer, errors, site) + +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') + db.recreate_tables() + + importer = SummaryImporter(config, sql, None) + + PokerStarsErrors = FpdbError('PokerStars') + #FTPErrors = FpdbError('Full Tilt Poker') + #PartyPokerErrors = FpdbError('Party Poker') + #BetfairErrors = FpdbError('Betfair') + #OnGameErrors = FpdbError('OnGame') + #AbsoluteErrors = FpdbError('Absolute Poker') + #UltimateBetErrors = FpdbError('Ultimate Bet') + #EverleafErrors = FpdbError('Everleaf Poker') + #CarbonErrors = FpdbError('Carbon') + #PKRErrors = FpdbError('PKR') + #iPokerErrors = FpdbError('iPoker') + #WinamaxErrors = FpdbError('Winamax') + + ErrorsList = [ + PokerStarsErrors, + #FTPErrors, PartyPokerErrors, + #BetfairErrors, OnGameErrors, AbsoluteErrors, + #EverleafErrors, CarbonErrors, PKRErrors, + #iPokerErrors, WinamaxErrors, UltimateBetErrors, + ] + + sites = { + 'PokerStars' : True, + #'Full Tilt Poker' : True, + #'PartyPoker' : True, + #'Betfair' : True, + #'OnGame' : True, + #'Absolute' : True, + #'UltimateBet' : True, + #'Everleaf' : True, + #'Carbon' : True, + #'PKR' : False, + #'iPoker' : True, + #'Winamax' : True, + } + + if sites['PokerStars'] == True: + walk_testfiles("regression-test-files/summaries/Stars/", compare, importer, PokerStarsErrors, "PokerStars") + #if sites['Full Tilt Poker'] == True: + # walk_testfiles("regression-test-files/cash/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") + # walk_testfiles("regression-test-files/tour/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") + #if sites['PartyPoker'] == True: + # walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") + # walk_testfiles("regression-test-files/tour/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") + #if sites['Betfair'] == True: + # walk_testfiles("regression-test-files/cash/Betfair/", compare, importer, BetfairErrors, "Betfair") + #if sites['OnGame'] == True: + # walk_testfiles("regression-test-files/cash/OnGame/", compare, importer, OnGameErrors, "OnGame") + #if sites['Absolute'] == True: + # walk_testfiles("regression-test-files/cash/Absolute/", compare, importer, AbsoluteErrors, "Absolute") + #if sites['UltimateBet'] == True: + # walk_testfiles("regression-test-files/cash/UltimateBet/", compare, importer, UltimateBetErrors, "Absolute") + #if sites['Everleaf'] == True: + # walk_testfiles("regression-test-files/cash/Everleaf/", compare, importer, EverleafErrors, "Everleaf") + #if sites['Carbon'] == True: + # walk_testfiles("regression-test-files/cash/Carbon/", compare, importer, CarbonErrors, "Carbon") + #if sites['PKR'] == True: + # walk_testfiles("regression-test-files/cash/PKR/", compare, importer, PKRErrors, "PKR") + #if sites['iPoker'] == True: + # walk_testfiles("regression-test-files/cash/iPoker/", compare, importer, iPokerErrors, "iPoker") + #if sites['Winamax'] == True: + # walk_testfiles("regression-test-files/cash/Winamax/", compare, importer, WinamaxErrors, "Winamax") + + totalerrors = 0 + + for i, site in enumerate(ErrorsList): + totalerrors += ErrorsList[i].errorcount + + print "---------------------" + print "Total Errors: %d" % totalerrors + print "---------------------" + for i, site in enumerate(ErrorsList): + ErrorsList[i].print_histogram() + + # Merge the dicts of stats from the various error objects + statdict = {} + for i, site in enumerate(ErrorsList): + tmp = ErrorsList[i].statcount + for stat in tmp: + if stat in statdict: + statdict[stat] += tmp[stat] + else: + statdict[stat] = tmp[stat] + + print "\n" + print "---------------------" + print "Errors by stat:" + print "---------------------" + #for stat in statdict: + # print "(%3d) : %s" %(statdict[stat], stat) + + sortedstats = sorted([(value,key) for (key,value) in statdict.items()]) + for num, stat in sortedstats: + print "(%3d) : %s" %(num, stat) + + +if __name__ == '__main__': + sys.exit(main()) +