def test_readFile(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     self.assertEqual(326, len(log_contents) )
     # check first few lines
     self.assertEqual('9/22 12:40:00.941  SPELL_CAST_START,Player-113-05CD0880,"Cellifalas-Draka",0x511,0x0,0000000000000000,nil,0x80000000,0x80000000,8936,"Regrowth",0x8', log_contents[0] )
     self.assertEqual('9/22 12:40:02.261  SPELL_HEAL,Player-113-05CD0880,"Cellifalas-Draka",0x511,0x0,Player-113-05CD0880,"Cellifalas-Draka",0x511,0x0,8936,"Regrowth",0x8,0000000000000000,0000000000000000,0,0,0,0,0,0,0,0,0.00,0.00,0,138287,138287,0,1', log_contents[1] )
     self.assertEqual('9/22 12:40:02.261  SPELL_AURA_APPLIED,Player-113-05CD0880,"Cellifalas-Draka",0x511,0x0,Player-113-05CD0880,"Cellifalas-Draka",0x511,0x0,8936,"Regrowth",0x8,BUFF', log_contents[2] )
     # check last line.
     self.assertEqual('9/22 12:46:22.416  SPELL_AURA_REMOVED,Player-113-05CD0880,"Cellifalas-Draka",0x511,0x0,Player-113-05CD0880,"Cellifalas-Draka",0x511,0x0,22812,"Barkskin",0x8,BUFF', log_contents[326-1] )
 def test_parse_Rejuvenation_1(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[67-1:76] )
     self.assertEqual(1, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Rejuvenation"))
     self.assertEqual(0    ,parsed_log["Rejuvenation"]["directHealCount"] )
     self.assertEqual(0    ,parsed_log["Rejuvenation"]["directHealAmount"] )
     self.assertEqual(7    ,parsed_log["Rejuvenation"]["tickHealCount"] )
     self.assertEqual(171810,parsed_log["Rejuvenation"]["tickHealAmount"] )
     self.assertEqual(1    ,parsed_log["Rejuvenation"]["castCount"] )
 def test_parse_Lifebloom_plus_stray_2(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[198-1:268] )
     self.assertEqual(1, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Lifebloom"))
     self.assertEqual(1    ,parsed_log["Lifebloom"]["directHealCount"] )
     self.assertEqual(267011/2,parsed_log["Lifebloom"]["directHealAmount"] )
     self.assertEqual(18    ,parsed_log["Lifebloom"]["tickHealCount"] )
     self.assertEqual(159064,parsed_log["Lifebloom"]["tickHealAmount"] )
     self.assertEqual(1    ,parsed_log["Lifebloom"]["castCount"] )
 def test_parse_Efflorescence_plus_stray_1(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[269-1:295] )
     self.assertEqual(1, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Efflorescence"))
     self.assertEqual(18   ,parsed_log["Efflorescence"]["directHealCount"] )
     self.assertEqual(374389,parsed_log["Efflorescence"]["directHealAmount"] )
     self.assertEqual(0    ,parsed_log["Efflorescence"]["tickHealCount"] )
     self.assertEqual(0    ,parsed_log["Efflorescence"]["tickHealAmount"] )
     self.assertEqual(1    ,parsed_log["Efflorescence"]["castCount"] )
 def test_parse_Swiftmend_1(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[146-1:151] )
     self.assertEqual(1, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Swiftmend"))
     self.assertEqual(2    ,parsed_log["Swiftmend"]["directHealCount"] )
     self.assertEqual(563278,parsed_log["Swiftmend"]["directHealAmount"] )
     self.assertEqual(0    ,parsed_log["Swiftmend"]["tickHealCount"] )
     self.assertEqual(0    ,parsed_log["Swiftmend"]["tickHealAmount"] )
     self.assertEqual(2    ,parsed_log["Swiftmend"]["castCount"] )
 def test_parse_Healing_Touch_1_to_3(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[107-1:117] )
     self.assertEqual(1, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Healing Touch"))
     self.assertEqual(3    ,parsed_log["Healing Touch"]["directHealCount"] )
     self.assertEqual(371394,parsed_log["Healing Touch"]["directHealAmount"] )
     self.assertEqual(0    ,parsed_log["Healing Touch"]["tickHealCount"] )
     self.assertEqual(0    ,parsed_log["Healing Touch"]["tickHealAmount"] )
     self.assertEqual(3    ,parsed_log["Healing Touch"]["castCount"] )
 def test_parse_full_log_extra_time(self):
     log_contents = readFile("test/WoWCombatLog_long.txt")
     parsed_log = parse_log( log_contents )
     outputText = dump_summary(parsed_log)
     self.assertEqual(8, len(outputText))
     self.assertEqual("Efflorescence,378907,0",outputText[0] )
     self.assertEqual("Healing Touch,122424,0",outputText[1] )
     self.assertEqual("Lifebloom,133673,163001",outputText[2] )
     self.assertEqual("Regrowth,68376,23736",outputText[3] )
     self.assertEqual("Rejuvenation,0,175461",outputText[4] )
     self.assertEqual("Swiftmend,278514,0",outputText[5] )
     self.assertEqual("Wild Growth,0,100331",outputText[6] )
     self.assertEqual("Tranquility,572941,0",outputText[7] )
 def test_parseRegrowth_3_and_4(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[34-1:66] )
     self.assertEqual(2, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Regrowth"))
     self.assertEqual(True ,parsed_log.has_key( "Ysera's Gift"))
     self.assertEqual(5    ,parsed_log["Ysera's Gift"]["directHealCount"] )
     self.assertEqual(2    ,parsed_log["Regrowth"]["directHealCount"] )
     self.assertEqual(250678,parsed_log["Ysera's Gift"]["directHealAmount"] )
     self.assertEqual(138286,parsed_log["Regrowth"]["directHealAmount"] )
     self.assertEqual(0    ,parsed_log["Ysera's Gift"]["tickHealCount"] )
     self.assertEqual(14   ,parsed_log["Regrowth"]["tickHealCount"] )
     self.assertEqual(0    ,parsed_log["Ysera's Gift"]["tickHealAmount"] )
     self.assertEqual(46326,parsed_log["Regrowth"]["tickHealAmount"] )
     self.assertEqual(2    ,parsed_log["Regrowth"]["castCount"] )
 def test_parse_Rejuvenation_and_Germination_1(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[87-1:106] )
     self.assertEqual(2, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Rejuvenation"))
     self.assertEqual(True ,parsed_log.has_key( "Rejuvenation (Germination)"))
     self.assertEqual(0    ,parsed_log["Rejuvenation"]["directHealCount"] )
     self.assertEqual(0    ,parsed_log["Rejuvenation"]["directHealAmount"] )
     self.assertEqual(7    ,parsed_log["Rejuvenation"]["tickHealCount"] )
     self.assertEqual(190925,parsed_log["Rejuvenation"]["tickHealAmount"] )  # note that the amount is slightly bigger due to multi-dot buff
     self.assertEqual(0    ,parsed_log["Rejuvenation (Germination)"]["directHealCount"] )
     self.assertEqual(0    ,parsed_log["Rejuvenation (Germination)"]["directHealAmount"] )
     self.assertEqual(7    ,parsed_log["Rejuvenation (Germination)"]["tickHealCount"] )
     self.assertEqual(191856,parsed_log["Rejuvenation (Germination)"]["tickHealAmount"] )
     self.assertEqual(2    ,parsed_log["Rejuvenation"]["castCount"] )  # germination is triggered by rejuv
 def test_parseRegrowth_1(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[1-1:17] )
     self.assertEqual(2, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Regrowth"))
     self.assertEqual(True ,parsed_log.has_key( "Ysera's Gift"))
     self.assertEqual(1    ,parsed_log["Ysera's Gift"]["directHealCount"] )
     self.assertEqual(50136,parsed_log["Ysera's Gift"]["directHealAmount"] )
     self.assertEqual(0    ,parsed_log["Ysera's Gift"]["tickHealCount"] )
     self.assertEqual(0    ,parsed_log["Ysera's Gift"]["tickHealAmount"] )
     self.assertEqual(0    ,parsed_log["Ysera's Gift"]["castCount"] )
     self.assertEqual(1    ,parsed_log["Regrowth"]["directHealCount"] )
     self.assertEqual(69143,parsed_log["Regrowth"]["directHealAmount"] )
     self.assertEqual(7    ,parsed_log["Regrowth"]["tickHealCount"] )
     self.assertEqual(23162,parsed_log["Regrowth"]["tickHealAmount"] )
     self.assertEqual(1    ,parsed_log["Regrowth"]["castCount"] )
 def test_parse_Wild_Growth_2(self):
     log_contents = readFile("test/WoWCombatLog.txt")
     parsed_log = parse_log( log_contents[132-1:145] )
     self.assertEqual(2, len(parsed_log))
     self.assertEqual(True ,parsed_log.has_key( "Wild Growth"))
     self.assertEqual(0    ,parsed_log["Wild Growth"]["directHealCount"] )
     self.assertEqual(0    ,parsed_log["Wild Growth"]["directHealAmount"] )
     self.assertEqual(9    ,parsed_log["Wild Growth"]["tickHealCount"] )
     self.assertEqual(97778,parsed_log["Wild Growth"]["tickHealAmount"] )
     self.assertEqual(1    ,parsed_log["Wild Growth"]["castCount"] )
     self.assertEqual(True ,parsed_log.has_key( "Nature's Essence"))
     self.assertEqual(1    ,parsed_log["Nature's Essence"]["directHealCount"] )
     self.assertEqual(30949,parsed_log["Nature's Essence"]["directHealAmount"] )
     self.assertEqual(0    ,parsed_log["Nature's Essence"]["tickHealCount"] )
     self.assertEqual(0    ,parsed_log["Nature's Essence"]["tickHealAmount"] )
     self.assertEqual(0    ,parsed_log["Nature's Essence"]["castCount"] )
    def test_parse_full_log(self):
        log_contents = readFile("test/WoWCombatLog.txt")
        parsed_log = parse_log( log_contents )
#        for spell in parsed_log: print(spell);
        self.assertEqual(12, len(parsed_log))
        currentSpell = "Efflorescence"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(18   ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(374389,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(1    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Healing Touch"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(3    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(371394,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(3    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Lifebloom"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(2    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(267010,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(36   ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(318128,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(2    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Nature's Essence"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(2    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(61898,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Regrowth"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(4    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(276572,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(28   ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(92651,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(4    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Rejuvenation (Germination)"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(0    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(7    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(191856,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Rejuvenation"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(0    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(0 ,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(21   ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(534547,parsed_log[currentSpell]["tickHealAmount"] )
#        self.assertEqual(3    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Swiftmend"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(2    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(563278,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(2    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Wild Growth"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(0    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(18   ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(195550,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(2    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Ysera's Gift"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(9    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(451220,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Tranquility"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(5    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(579372,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(1    ,parsed_log[currentSpell]["castCount"] )
        currentSpell = "Barkskin"
        self.assertEqual(True ,parsed_log.has_key( currentSpell))
        self.assertEqual(0    ,parsed_log[currentSpell]["directHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["directHealAmount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealCount"] )
        self.assertEqual(0    ,parsed_log[currentSpell]["tickHealAmount"] )
        self.assertEqual(1    ,parsed_log[currentSpell]["castCount"] )
    def test_parse_Stray_heals_1(self):
#        setDebugState(1);
        log_contents = readFile("test/WoWCombatLog.txt")
        parsed_log = parse_log( log_contents[152-1:154] )
        self.assertEqual(0, len(parsed_log))