X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tests%2Fcoverage_dungeon.py;h=50697feedb7b5fbd701f65a6e37a012e020d5046;hb=99595f6a2a68a0c309b9955c56c2a8d297ecac76;hp=d7f46c8a9128e9105e6610c7edddbf2f252e478b;hpb=39cc166979588a4b3c435aaea6abafa238dfc076;p=open-adventure.git diff --git a/tests/coverage_dungeon.py b/tests/coverage_dungeon.py index d7f46c8..50697fe 100755 --- a/tests/coverage_dungeon.py +++ b/tests/coverage_dungeon.py @@ -11,7 +11,6 @@ import os import yaml import re -import pprint test_dir = "." yaml_name = "../adventure.yaml" @@ -45,6 +44,8 @@ def search(needle, haystack): # replacing %s, %d, etc. with regex wildcards, so the variable messages # within the dungeon definition will actually match needle = re.escape(needle) \ + .replace("\\n", "\n") \ + .replace("\\t", "\t") \ .replace("\%S", ".*") \ .replace("\%s", ".*") \ .replace("\%d", ".*") \ @@ -87,7 +88,6 @@ def obj_coverage(objects, text): obj["descriptions"][j] = True objects[i] = (obj_name, obj) - def hint_coverage(hints, text): for name, hint in hints: if hint["question"] != True: @@ -96,7 +96,14 @@ def hint_coverage(hints, text): if hint["hint"] != True: if search(hint["hint"], text): hint["hint"] = True - continue + +def special_coverage(specials, text): + for name, special in specials: + if special["message"] == None: + special["message"] = True + if special["message"] != True: + if search(special["message"], text): + special["message"] = True def threshold_coverage(classes, text): for i, msg in enumerate(classes): @@ -106,6 +113,22 @@ def threshold_coverage(classes, text): if search(msg["message"], text): msg["message"] = True +def obit_coverage(obituaries, text): + for i, obit in enumerate(obituaries): + if obit["query"] != True: + if search(obit["query"], text): + obit["query"] = True + if obit["yes_response"] != True: + if search(obit["yes_response"], text): + obit["yes_response"] = True + +def actions_coverage(actions, text): + for name, action in actions: + if action["message"] == None or action["message"] == "NO_MESSAGE": + action["message"] = True + if action["message"] != True: + if search(action["message"], text): + action["message"] = True if __name__ == "__main__": with open(yaml_name, "r") as f: @@ -114,12 +137,16 @@ if __name__ == "__main__": with open(html_template_path, "r") as f: html_template = f.read() + motions = db["motions"] locations = db["locations"] arb_msgs = db["arbitrary_messages"] objects = db["objects"] hintsraw = db["hints"] classes = db["classes"] turn_thresholds = db["turn_thresholds"] + obituaries = db["obituaries"] + actions = db["actions"] + specials = db["specials"] hints = [] for hint in hintsraw: @@ -136,6 +163,9 @@ if __name__ == "__main__": hint_coverage(hints, text) threshold_coverage(classes, text) threshold_coverage(turn_thresholds, text) + obit_coverage(obituaries, text) + actions_coverage(actions, text) + special_coverage(specials, text) location_html = "" location_total = len(locations) * 2 @@ -230,6 +260,48 @@ if __name__ == "__main__": turn_html += arb_msg_row.format(msg["threshold"], success) turn_percent = round((turn_covered / float(turn_total)) * 100, 1) + obituaries_html = ""; + obituaries_total = len(obituaries) * 2 + obituaries_covered = 0 + for i, obit in enumerate(obituaries): + if obit["query"] != True: + query_success = "uncovered" + else: + query_success = "covered" + obituaries_covered += 1 + if obit["yes_response"] != True: + obit_success = "uncovered" + else: + obit_success = "covered" + obituaries_covered += 1 + obituaries_html += location_row.format(i, query_success, obit_success) + obituaries_percent = round((obituaries_covered / float(obituaries_total)) * 100, 1) + + actions.sort() + actions_html = ""; + actions_total = len(actions) + actions_covered = 0 + for name, action in actions: + if action["message"] != True: + success = "uncovered" + else: + success = "covered" + actions_covered += 1 + actions_html += arb_msg_row.format(name, success) + actions_percent = round((actions_covered / float(actions_total)) * 100, 1) + + special_html = "" + special_total = len(specials) + special_covered = 0 + for name, special in specials: + if special["message"] != True: + success = "uncovered" + else: + success = "covered" + special_covered += 1 + special_html += arb_msg_row.format(name, success) + special_percent = round((special_covered / float(special_total)) * 100, 1) + # output some quick report stats print("\nadventure.yaml coverage rate:") print(" locations..........: {}% covered ({} of {})".format(location_percent, location_covered, location_total)) @@ -238,6 +310,9 @@ if __name__ == "__main__": print(" hints..............: {}% covered ({} of {})".format(hints_percent, hints_covered, hints_total)) print(" classes............: {}% covered ({} of {})".format(class_percent, class_covered, class_total)) print(" turn_thresholds....: {}% covered ({} of {})".format(turn_percent, turn_covered, turn_total)) + print(" obituaries.........: {}% covered ({} of {})".format(obituaries_percent, obituaries_covered, obituaries_total)) + print(" actions............: {}% covered ({} of {})".format(actions_percent, actions_covered, actions_total)) + print(" specials...........: {}% covered ({} of {})".format(special_percent, special_covered, special_total)) # render HTML report with open(html_output_path, "w") as f: @@ -248,5 +323,9 @@ if __name__ == "__main__": hints_total, hints_covered, hints_percent, class_total, class_covered, class_percent, turn_total, turn_covered, turn_percent, - location_html, arb_msg_html, object_html, hints_html, class_html, turn_html + obituaries_total, obituaries_covered, obituaries_percent, + actions_total, actions_covered, actions_percent, + special_total, special_covered, special_percent, + location_html, arb_msg_html, object_html, hints_html, + class_html, turn_html, obituaries_html, actions_html, special_html ))