Search in sources :

Example 1 with Node

use of org.kohsuke.graphviz.Node in project evosuite by EvoSuite.

the class LCSAJGraph method generate.

/**
 * <p>
 * generate
 * </p>
 *
 * @param file
 *            a {@link java.io.File} object.
 */
public void generate(File file) {
    if (fitnessGraph)
        System.out.println("Generating Graph for uncoverd LCSAJ No: " + lcsaj.getID() + " in " + lcsaj.getClassName() + "/" + lcsaj.getMethodName());
    else
        System.out.println("Generating Graph for LCSAJ No: " + lcsaj.getID() + " in " + lcsaj.getClassName() + "/" + lcsaj.getMethodName());
    Graph lcsaj_graph = new Graph();
    ArrayList<Node> allNodes = new ArrayList<Node>();
    for (BytecodeInstruction b : graph.vertexSet()) {
        Node n = new Node().attr("label", b.toString());
        lcsaj_graph = lcsaj_graph.node(n);
        allNodes.add(n);
    }
    for (ControlFlowEdge edge : graph.edgeSet()) for (Node source : allNodes) for (Node target : allNodes) {
        BytecodeInstruction b1 = graph.getEdgeSource(edge);
        BytecodeInstruction b2 = graph.getEdgeTarget(edge);
        if (source.attr("label").equals(b1.toString()) && target.attr("label").equals(b2.toString())) {
            if (b1.isBranch()) {
                Edge newEdge = new Edge(source, target).attr("label", edge.toString());
                lcsaj_graph.edge(newEdge);
            } else
                lcsaj_graph.edge(source, target);
        }
    }
    BytecodeInstruction l1 = lcsaj.getStartBranch().getInstruction();
    BytecodeInstruction l2 = lcsaj.getLastBranch().getInstruction();
    if (fitnessGraph)
        l2 = lcsaj.getBranch(lcsaj.getdPositionReached()).getInstruction();
    for (Node source : allNodes) for (Node target : allNodes) {
        if (source.attr("label").equals(l1.toString()) && target.attr("label").equals(l2.toString())) {
            if (!fitnessGraph || lcsaj.getdPositionReached() == lcsaj.length() - 1) {
                Edge newEdge = new Edge(source, target).attr("color", "green").attr("label", "LCSAJ No." + lcsaj.getID());
                lcsaj_graph.edge(newEdge);
            } else {
                Edge newEdge = new Edge(source, target).attr("color", "red").attr("label", " LCSAJ No." + lcsaj.getID() + ". Covered till:");
                lcsaj_graph.edge(newEdge);
            }
        }
    }
    ArrayList<String> commandos = new ArrayList<String>();
    commandos.add("dot");
    try {
        lcsaj_graph.generateTo(commandos, file);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Also used : Graph(org.kohsuke.graphviz.Graph) RawControlFlowGraph(org.evosuite.graphs.cfg.RawControlFlowGraph) ControlFlowEdge(org.evosuite.graphs.cfg.ControlFlowEdge) Node(org.kohsuke.graphviz.Node) ArrayList(java.util.ArrayList) BytecodeInstruction(org.evosuite.graphs.cfg.BytecodeInstruction) IOException(java.io.IOException) Edge(org.kohsuke.graphviz.Edge) ControlFlowEdge(org.evosuite.graphs.cfg.ControlFlowEdge)

Aggregations

IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 BytecodeInstruction (org.evosuite.graphs.cfg.BytecodeInstruction)1 ControlFlowEdge (org.evosuite.graphs.cfg.ControlFlowEdge)1 RawControlFlowGraph (org.evosuite.graphs.cfg.RawControlFlowGraph)1 Edge (org.kohsuke.graphviz.Edge)1 Graph (org.kohsuke.graphviz.Graph)1 Node (org.kohsuke.graphviz.Node)1