from GUI import Window, Button, application
from GUI.Exceptions import ApplicationError
from testing import say

class ShrubberyError(Exception):
    pass

def raise_application_error():
    raise ApplicationError("Your underpants are on fire.",
        "Please notify the fire service and proceed in an orderly manner to the nearest exit.")

def raise_exception():
    raise ShrubberyError("The shrubbery is too small.")

def test():
    win = Window(title = "Exceptions", size = (200, 100))
    but1 = Button("ApplicationError", action = raise_application_error)
    but2 = Button("Exception", action = raise_exception)
    win.place_column([but1, but2], left = 20, top = 20)
    win.shrink_wrap(padding = (20, 20))
    win.show()
    application().run()

instructions = """
Pressing the ApplicationError button will raise an ApplicationError.
An alert box should appear displaying message and detail strings.

Pressing the Exception button will raise an exception. A dialog box
should appear containing a description of the exception and options
Continue, Traceback and Abort. Continue should continue the application
with no further action. Traceback should print a traceback to the
console and then continue. Abort should print a traceback and exit
the application.
"""

say(instructions)
test()
