Esempio n. 1
0
    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)
Esempio n. 2
0
 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)
     ]
Esempio n. 3
0
 def __init__(self, config):
     self.config = config
     self.parser = gauge_parser()
     self.renderer = GraphRenderer(config)
Esempio n. 4
0
            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)
Esempio n. 5
0
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)