def setUp(self) -> None: self.config = Config(OUTPUT_DIR=OUTPUT_DIR, show_src_file=False, edge_labels=False) self.renderer = GraphRenderer(config=self.config) self.generator = Graph_generator(config=self.config) self.smell = LongTestSmell(renderer=self.renderer) if not os.path.isdir(OUTPUT_DIR): os.mkdir(OUTPUT_DIR)
def __init__(self, output_dir): self.config = Config(output_dir, show_src_file=False, font_size=16, edge_labels=False, level_separation=1000, node_spacing=150) self.renderer = GraphRenderer(self.config) self.smells = [ LongTestSmell(self.renderer), UnusedCptSmell(self.renderer), SelfReferencingCptSmell(self.renderer), LongStepName(self.renderer) ]
def __init__(self, config): self.config = config self.parser = gauge_parser() self.renderer = GraphRenderer(config)
nx.set_node_attributes(smell_graph, False, "smell") nx.set_node_attributes(smell_graph, list(), "smell_names") self.renderer.render_graph(smell_graph, f"long-test-smell-{i}.html") output_files.append(f"./long-test-smell-{i}.html") return output_files # To test the smell sub-graph function run this file then inspect generated graph. if __name__ == "__main__": config = Config(OUTPUT_DIR=os.path.join(os.path.dirname(__file__), "..", "..", "output"), show_src_file=False, edge_labels=False) renderer = GraphRenderer(config) smell = LongTestSmell(renderer) generator = Graph_generator(config) # data/test_smells/long_test_smell.spec graph_filename = generator.generate_spec_graph( os.path.join(os.path.dirname(__file__), "..", "..", "data", "test_smells", "long_test_smell.spec")) test_graph = nx.read_yaml( os.path.join(config.OUTPUT_DIR, f"{graph_filename}.yaml")) smell.update_graph(test_graph) renderer.render_graph(test_graph)
class Graph_generator: def __init__(self, config): self.config = config self.parser = gauge_parser() self.renderer = GraphRenderer(config) def generate_spec_graph(self, input_file): filename = ntpath.basename(input_file) output = self.config.OUTPUT_DIR scenarios = self.parser.parse_spec(input_file) graph = nx.MultiDiGraph() for scenario in scenarios: graph.add_node(f"Scenario:{scenario.name}", source_file=scenario.source_file, smell=False, smell_names=list()) for i, step in enumerate(scenario.steps): graph.add_node(f"Step:{step}", smell=False, smell_names=list()) graph.add_edge(f"Scenario:{scenario.name}", f"Step:{step}", label=i + 1) nx.write_yaml(graph, f"{output}/{filename}.yaml") return filename def generate_cpt_graph(self, inputfile): output = self.config.OUTPUT_DIR concepts = self.parser.parse_cpt(inputfile) name = ntpath.basename(inputfile) graph = nx.MultiDiGraph() for concept in concepts: graph.add_node(f"Step:{concept.name}", smell=False, smell_names=list()) for i, step in enumerate(concept.steps): graph.add_node(f"Step:{step}", smell=False, smell_names=list()) graph.add_edge(f"Step:{concept.name}", f"Step:{step}", label=i + 1) nx.write_yaml(graph, f"{output}/{name}.yaml") return name def parse_folder(self, filepath): filenames = [] for subdir, dirs, files in os.walk(filepath): for file in files: try: path = subdir + os.sep + file if path.endswith(".spec"): filenames.append(self.generate_spec_graph(path)) elif path.endswith(".cpt"): filenames.append(self.generate_cpt_graph(path)) except Exception as ex: print(f"Error Processing file {path}") print(f"Exception was {ex}") return filenames def combine_graphs(self, filenames): output = self.config.OUTPUT_DIR graphs = [] for filename in filenames: g = nx.read_yaml(f"{output}/{filename}.yaml") graphs.append(g) combined = nx.compose_all(graphs) return combined def render_graph(self, comnined): self.renderer.render_graph(comnined)