From 374d5a5d1d84115e8107403ab9a0f8ad7dd66363 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 6 Apr 2020 16:55:36 +1000 Subject: [PATCH] New optional GUI for BIMTester for user friendly testing --- src/ifcbimtester/bimtester.py | 77 +++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 8 deletions(-) diff --git a/src/ifcbimtester/bimtester.py b/src/ifcbimtester/bimtester.py index 3ac4bd1650..807acdfd0a 100644 --- a/src/ifcbimtester/bimtester.py +++ b/src/ifcbimtester/bimtester.py @@ -15,6 +15,7 @@ import argparse import csv import re import shutil +import webbrowser from pathlib import Path @@ -33,7 +34,8 @@ def get_resource_path(relative_path): def run_tests(args): if not get_features(args): - sys.exit('No requirements could be found to check.') + print('No requirements could be found to check.') + return False behave_args = [get_resource_path('features')] if args.advanced_arguments: behave_args.extend(args.advanced_arguments.split()) @@ -41,6 +43,7 @@ def run_tests(args): behave_args.extend(['--junit', '--junit-directory', args.junit_directory]) behave_main(behave_args) print('# All tests are finished.') + return True def get_features(args): @@ -150,6 +153,11 @@ parser.add_argument( '--purge', action='store_true', help='Purge tests of deleted elements') +parser.add_argument( + '-c', + '--cli', + action='store_true', + help='Run without a GUI, just as a CLI') parser.add_argument( '-r', '--report', @@ -175,11 +183,64 @@ parser.add_argument( default='') args = parser.parse_args() -if args.purge: - TestPurger().purge() -elif args.report: - generate_report(args) -else: - run_tests(args) +if args.cli: + if args.purge: + TestPurger().purge() + elif args.report: + generate_report(args) + else: + run_tests(args) + print('# All tasks are complete :-)') + sys.exit() -print('# All tasks are complete :-)') +import tkinter +import tkinter.filedialog +import tkinter.messagebox + +class Application(tkinter.Frame): + def __init__(self, master=None): + super().__init__(master) + self.master = master + self.master.title('BIMTester') + self.pack() + self.create_widgets() + self.directory = None + + def create_widgets(self): + self.top_frame = tkinter.Frame(self, padx=5, pady=5) + self.top_frame.pack(side='top') + self.bottom_frame = tkinter.Frame(self, padx=5, pady=5) + self.bottom_frame.pack(side='bottom') + + self.description = tkinter.Label(self.top_frame) + self.description['text'] = 'BIMTester' + self.description.pack(side='top') + + self.browse = tkinter.Button(self.bottom_frame) + self.browse['text'] = 'Load Directory' + self.browse['command'] = self.load_file + self.browse.pack(side='left') + + self.execute = tkinter.Button(self.bottom_frame) + self.execute['text'] = 'Check Requirements' + self.execute['command'] = self.check_requirements + self.execute.pack(side='right') + + def load_file(self): + self.directory = tkinter.filedialog.askdirectory(parent=root, title='Choose a directory') + if self.directory: + os.chdir(self.directory) + + def check_requirements(self): + if not self.directory: + tkinter.messagebox.showerror(message='Please select a directory first.') + return + if run_tests(args): + generate_report(args) + webbrowser.open(os.path.join(self.directory, 'report/')) + else: + tkinter.messagebox.showerror(message='No requirements were found or they were not able to be checked.') + +root = tkinter.Tk() +app = Application(master=root) +app.mainloop()