From 029c62fd5d73df88b2a40216af7553d094ed5a9a Mon Sep 17 00:00:00 2001 From: Tassio Virginio Date: Mon, 18 Dec 2023 09:24:07 -0300 Subject: [PATCH 1/3] =?UTF-8?q?criacao=20automatica=20da=20pasta=20report?= =?UTF-8?q?=20se=20n=C3=A3o=20houver=20na=20inicializa=C3=A7=C3=A3o=20da?= =?UTF-8?q?=20aplica=C3=A7=C3=A3o,=20corrigindo=20um=20erro=20que=20sempre?= =?UTF-8?q?=20d=C3=A1=20quando=20roda=20o=20sistema.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 387a511..d93c2d7 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,7 @@ from tkinter import ttk import tkinter.filedialog from tkinter import messagebox +from pathlib import Path def get_selected_test_file(lista): if not lista.curselection(): @@ -256,7 +257,11 @@ def set_github_url(): except Exception as e: tkinter.messagebox.showinfo(title=None, message='Project not found. Please check GitHub URL and try again.') - + +p = Path("./report/") +if p.exists() == False: + os.mkdir("./report/") + root = tk.Tk() root.resizable(width=False, height=False) root.wm_title("TS Automatic Detector for Python") From 09ad3349ea7af774fd04c2799b0f75c947eb3e64 Mon Sep 17 00:00:00 2001 From: Tassio Virginio Date: Mon, 18 Dec 2023 13:08:22 -0300 Subject: [PATCH 2/3] =?UTF-8?q?melhoria=20do=20c=C3=B3digo,=20criando=20o?= =?UTF-8?q?=20m=C3=A9todo=20'report=5Fgenerator'=20para=20reduzir=20a=20re?= =?UTF-8?q?peti=C3=A7=C3=A3o=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 61 ++++++++++++++++++--------------------------------------- 1 file changed, 19 insertions(+), 42 deletions(-) diff --git a/main.py b/main.py index d93c2d7..9246045 100644 --- a/main.py +++ b/main.py @@ -40,20 +40,7 @@ def get_selected_test_file(lista): ts_qtd.append( cont_proj ) cont_proj = 0 - report = ReportGenerator() - report.add_header( cont_total, len(all_logs) , projects, ts_qtd) - prev = None - for index in range(len(all_logs)): - report.add_table_header( projects[index], ts_qtd[index] ) - for log in all_logs[index]: - if (log.lines == prev): - pass - else: - report.add_table_body( log.test_smell_type, log.method_name, log.lines ) - prev = log.lines - report.add_table_close(ts_qtd[index]) - report.add_footer() - report.build() + report_generator(cont_total, all_logs, projects, ts_qtd) url = os.path.abspath("./report/log.html") webbrowser.open(url,new=1) @@ -84,20 +71,7 @@ def get_all_test_file(lista): ts_qtd.append( cont_proj ) cont_proj = 0 - report = ReportGenerator() - report.add_header( cont_total, len(all_logs) , projects, ts_qtd) - prev = None - for index in range(len(all_logs)): - report.add_table_header( projects[index], ts_qtd[index] ) - for log in all_logs[index]: - if (log.lines == prev): - pass - else: - report.add_table_body( log.test_smell_type, log.method_name, log.lines ) - prev = log.lines - report.add_table_close(ts_qtd[index]) - report.add_footer() - report.build() + report_generator(cont_total, all_logs, projects, ts_qtd) url = os.path.abspath("./report/log.html") webbrowser.open(url,new=1) @@ -205,20 +179,7 @@ def select_file(): for x in log: cont += 1 - report = ReportGenerator() - report.add_header( cont, len(all_logs) , projects, ts_qtd) - prev = None - for index in range(len(all_logs)): - report.add_table_header( projects[index], ts_qtd[index] ) - for log in all_logs[index]: - if (log.lines == prev): - pass - else: - report.add_table_body( log.test_smell_type, log.method_name, log.lines ) - prev = log.lines - report.add_table_close(ts_qtd[index]) - report.add_footer() - report.build() + report_generator(cont, all_logs, projects, ts_qtd) url = os.path.abspath("./report/log.html") webbrowser.open(url,new=1) @@ -227,6 +188,22 @@ def select_file(): if( not is_test_file(fname) ): tkinter.messagebox.showwarning(title=None, message="The selected file is not a test file.") +def report_generator(cont, all_logs, projects, ts_qtd): + report = ReportGenerator() + report.add_header( cont, len(all_logs) , projects, ts_qtd) + prev = None + for index in range(len(all_logs)): + report.add_table_header( projects[index], ts_qtd[index] ) + for log in all_logs[index]: + if (log.lines == prev): + pass + else: + report.add_table_body( log.test_smell_type, log.method_name, log.lines ) + prev = log.lines + report.add_table_close(ts_qtd[index]) + report.add_footer() + report.build() + def select_directory(): currdir = os.getcwd() tempdir = tk.filedialog.askdirectory(parent=root, initialdir=currdir, title='Select a directory') From f356615011334d9057460d1cd1704106cd9f23f7 Mon Sep 17 00:00:00 2001 From: Tassio Virginio Date: Tue, 19 Dec 2023 16:42:53 -0300 Subject: [PATCH 3/3] adicionando o resultado em arquivo CSV --- assets/report_generator.py | 2 ++ assets/report_generator_csv.py | 61 ++++++++++++++++++++++++++++++++++ main.py | 34 ++++++++++++++----- 3 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 assets/report_generator_csv.py diff --git a/assets/report_generator.py b/assets/report_generator.py index fa127c4..0c13943 100644 --- a/assets/report_generator.py +++ b/assets/report_generator.py @@ -29,6 +29,8 @@ def add_header(self, total_ts, qtd_ts_in_projects, projects, ts_qtd): # step 1 + +Download CSV

Test Smells Analysis

diff --git a/assets/report_generator_csv.py b/assets/report_generator_csv.py new file mode 100644 index 0000000..b3a893e --- /dev/null +++ b/assets/report_generator_csv.py @@ -0,0 +1,61 @@ +import sys,re,pathlib,os,git,shutil,subprocess +from components import SourceCode, Method, Classe, Data + + +class ReportGeneratorCSV: + + def __init__(self, tempdir): + self.file = open("./report/log.csv", 'w') + self.content = '' + self.number_of_test_smells = 1 + self.tempdir = tempdir + self.add_csv_head() + + + def add_csv_head(self): + self.content += "".join([ + '#,', + 'Project,', + 'File,', + 'Path,', + 'Test Smell,', + 'Method,', + 'start,end', + '\n' + ]) + + def add_csv_body(self, ts, method, lines, path): + self.content += "".join([ + str(self.number_of_test_smells).lstrip(),',', + str(self.get_project_name(path)).lstrip(),',', + str(self.get_testfile_name(path)).lstrip(),',', + str(self.get_path(path)).lstrip(),',', + ts.lstrip(),',', + method.lstrip(),',', + str(lines)[1:-1], + '\n' + ]) + self.number_of_test_smells += 1 + + + def build(self): # final step (step 7) + self.file.write( self.content ) + self.file.close() + + def get_testfile_name(self, path): + for x in range(len(path)-1, -1, -1): + if (path[x] == '/'): + return path[x+1:] + + def get_path(self, path): + for x in range(len(path)-1, -1, -1): + if (path[x] == '/'): + return path[0:x+1] + + def get_project_name(self, path): + path2 = path.replace(self.tempdir+'/','') + path2 = path2[0:path2.find('/')] + return path2 + + def get_file_name(self): + return self.file.name \ No newline at end of file diff --git a/main.py b/main.py index 9246045..35798db 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,7 @@ from python_parser import * from detector import * from report_generator import * +from report_generator_csv import * import tkinter as tk from tkinter import ttk @@ -12,7 +13,7 @@ from tkinter import messagebox from pathlib import Path -def get_selected_test_file(lista): +def get_selected_test_file(lista, tempdir): if not lista.curselection(): tkinter.messagebox.showwarning(title=None, message="Please select a test file from the list for analysis.") else: @@ -41,12 +42,13 @@ def get_selected_test_file(lista): cont_proj = 0 report_generator(cont_total, all_logs, projects, ts_qtd) + report_generator_csv(all_logs,projects,tempdir) url = os.path.abspath("./report/log.html") webbrowser.open(url,new=1) # sys.exit(0) -def get_all_test_file(lista): +def get_all_test_file(lista, tempdir): if (tkinter.messagebox.askokcancel(title=None, message=str( lista.size() )+" test file(s) selected. Do you wish to continue?")): all_logs, projects = [], [] @@ -72,6 +74,7 @@ def get_all_test_file(lista): cont_proj = 0 report_generator(cont_total, all_logs, projects, ts_qtd) + report_generator_csv(all_logs,projects,tempdir) url = os.path.abspath("./report/log.html") webbrowser.open(url,new=1) @@ -86,7 +89,7 @@ def close_window_confirmation(newWindow): if (tkinter.messagebox.askokcancel(title=None, message="Do you really want to close this window?")): close_window(newWindow) -def test_file_selection_window(nomes,paths): +def test_file_selection_window(nomes,paths,tempdir): newWindow = tk.Tk() newWindow.protocol('WM_DELETE_WINDOW', lambda: close_window_confirmation(newWindow)) newWindow.wm_title("Select a Python test file") @@ -107,20 +110,20 @@ def test_file_selection_window(nomes,paths): for x in range(0,len(nomes)): lista.insert(x, paths[x]+'/'+nomes[x]) - btn1 = tk.Button(newWindow, text='Select', command=lambda: get_selected_test_file(lista)).pack(fill=tk.X) - btn2 = tk.Button(newWindow, text='Select All', command=lambda: get_all_test_file(lista)).pack(fill=tk.X) + btn1 = tk.Button(newWindow, text='Select', command=lambda: get_selected_test_file(lista, tempdir)).pack(fill=tk.X) + btn2 = tk.Button(newWindow, text='Select All', command=lambda: get_all_test_file(lista,tempdir)).pack(fill=tk.X) btn3 = tk.Button(newWindow, text='Cancel', command=lambda: close_window(newWindow)).pack(fill=tk.X) -def generate_test_file_list_log(files,nomes,paths): +def generate_test_file_list_log(files,nomes,paths, tempdir): if (files > 1): tkinter.messagebox.showinfo(title=None, message=str(files) + ' Python test files found.') root.withdraw() # hide home screen - test_file_selection_window(nomes,paths) + test_file_selection_window(nomes,paths,tempdir) elif (files == 1): tkinter.messagebox.showinfo(title=None, message='1 Python test file found.') root.withdraw() # hide home screen - test_file_selection_window(nomes,paths) + test_file_selection_window(nomes,paths,tempdir) else: tkinter.messagebox.showinfo(title=None, message='No Python test file found.') @@ -157,7 +160,7 @@ def search_test_file(tempdir): nomes.append(x) paths.append(dirName) - generate_test_file_list_log(number_of_files,nomes,paths) + generate_test_file_list_log(number_of_files,nomes,paths,tempdir) def select_file(): fname = tk.filedialog.askopenfilename(filetypes=[("Python files", ".py")],title='Choose a test file') @@ -204,6 +207,19 @@ def report_generator(cont, all_logs, projects, ts_qtd): report.add_footer() report.build() +def report_generator_csv(all_logs, projects, tempdir): + report2 = ReportGeneratorCSV(tempdir) + prev2 = None + for index2 in range(len(all_logs)): + for log2 in all_logs[index2]: + if log2.lines == prev2: + pass + else: + report2.add_csv_body(log2.test_smell_type, log2.method_name, log2.lines, projects[index2]) + prev2 = log2.lines + report2.build() + return report2.get_file_name() + def select_directory(): currdir = os.getcwd() tempdir = tk.filedialog.askdirectory(parent=root, initialdir=currdir, title='Select a directory')