Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package Leitura; import java.io.*; import static java.lang.Math.abs; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.apache.commons.lang3.StringUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /** * * @author Karini */ public class Ecobertura { private String classe; private String metodo = null; // metodo do cdigo chamado private ArrayList<String> metodoTeste = new ArrayList<String>(); // metodo de teste chamado private ArrayList<Integer> linhasCod = new ArrayList<Integer>(); private ArrayList<Integer> excluiLinhas = new ArrayList<Integer>(); private ArrayList<Informacoes> inf = new ArrayList<>(); private int qtdeLinhas = 0; private int falharam = 0; private int passaram = 0; private int totFalharam = 0; private int totPassaram = 0; private Document document; Informacoes informacoes; private boolean linhaControl = false; public ArrayList<Informacoes> getInf() { return inf; } public boolean isLinhaControl() { return linhaControl; } public int getQtdeLinhas() { return qtdeLinhas; } public int getFalharam() { return falharam; } public double getPassaram() { return passaram; } public Ecobertura(Document document) { this.document = document; } public String getClasse() { return classe; } public int getTotFalharam() { return totFalharam; } public int getTotPassaram() { return totPassaram; } public boolean cobertura() { Elements elements = document.getElementsByAttribute("align"); for (Element perc : elements) { if (!perc.text().equals("0%") && !perc.text().equals("N/A")) { return true; } } return false; } public void escreveTxt() throws IOException { //mtodo para pegar os nomes dos mtodos declarados String auxLinha = null; char aux[] = null; StringBuffer sbClasse = new StringBuffer(); StringBuffer sbLinha = new StringBuffer(); StringBuffer sbMetodo = new StringBuffer(); String metodoTemp; boolean controleClasse = false; // Pega somente os elementos com tag "tr" Elements elements = document.getElementsByTag("tr"); for (Element children : elements) { if (StringUtils.isBlank(children.text())) { continue; } children.getElementsByClass("comment").remove(); // System.out.println(children.text()); //----------------- Dispensa Comentrios ----------------- //auxLinha = children.getElementsByTag("span").eq(0).text(); /*if (auxLinha.contains("/*")) { comentario = true; } else if(auxLinha.contains("//")){ comentario = true; controle = true; // controla comentrio com // } if (auxLinha.contains("*//*")) { comentario = false; }else if(auxLinha.contains("\n") && controle == true){ comentario = false; controle = false; }*/ //------------------ Fim dispensa comentrios -------------- // if (comentario == false) { //--------------------- verifica as linhas do cdigo ------------------- if (StringUtils.isNotBlank(children.getElementsByClass("numLine").text())) { aux = children.getElementsByClass("numLine").text().toCharArray(); for (int i = 0; i < aux.length; i++) { //System.out.println("["+aux[i]+"]"); if (aux[i] >= 48 && aux[i] <= 57) { // pega o nmero da linha sbLinha.append(aux[i]); } } auxLinha = sbLinha.toString(); if (StringUtils.isNotBlank(auxLinha)) { // transforma a linha para inteiro qtdeLinhas = Integer.parseInt(auxLinha); } sbLinha.delete(0, sbLinha.length()); } // ------------------- Fim linhas --------------------------------- Elements pre = children.getElementsByTag("pre"); for (Element element : pre) { String tagMetodo = element.getElementsByTag("span").eq(0).text(); //------------------------- Verifica classe ------------------------- if (element.getElementsByTag("span").text().contains("class")) { element.select("span.keyword").remove(); if (controleClasse == false) { classe = element.text().trim(); aux = classe.toCharArray(); for (int j = 0; j < aux.length; j++) { if ((65 <= aux[j]) && (aux[j] <= 90) || (aux[j] >= 97) && (aux[j] <= 122) || (aux[j] == 95)) { sbClasse.append(aux[j]); //System.out.println(j + ", " + sbClasse); if (j < aux.length - 1) { // System.out.println("size: "+aux.length+" j: "+j); if ((aux[j + 1] == ' ') || (aux[j + 1] == '{') || (aux[j + 1] == '<')) { // System.out.println("entrei"); if ((j + 1) < aux.length - 1) { for (int k = j++; k < aux.length; k++) { aux[k] = ' '; } } } } } } excluiLinhas.add(qtdeLinhas); classe = sbClasse.toString().replaceAll("\r", "").replaceAll("\t", "").replaceAll("\n", ""); controleClasse = true; } // System.out.println("Classe: " + classe); } //------------------------------- Fim verifica classe------------------------------ //------------------------------ Verifica mtodo ---------------------------------- //else if (tagMetodo.equals("privtate") || tagMetodo.equals("public") || tagMetodo.equals("protected")) { else if (element.getElementsByTag("span").text().contains("privtate") || element.getElementsByTag("span").text().contains("public") || element.getElementsByTag("span").text().contains("protected") || element.getElementsByTag("span").text().contains("static") || element.getElementsByTag("span").text().contains("final") || element.getElementsByTag("span").text().contains("native") || element.getElementsByTag("span").text().contains("synchronized") || element.getElementsByTag("span").text().contains("abstract") || element.getElementsByTag("span").text().contains("threadsafe") || element.getElementsByTag("span").text().contains("transient")) { element.select("span.keyword").remove(); if (!element.text().contains("=") && !element.text().contains(".") && !element.text().contains("@")) { String[] s = element.text().split(" "); for (int i = 0; i < s.length; i++) { if (s[i].contains("(")) { aux = s[i].toCharArray(); for (int j = 0; j < aux.length; j++) { if (aux[j] == '(') { for (int k = j; k < aux.length; k++) { aux[k] = ' '; } break; } sbMetodo.append(aux[j]); } metodoTemp = sbMetodo.toString(); if (!metodoTemp.isEmpty()) { metodo = metodoTemp.replaceAll("\r", "").replaceAll("\t", "").replaceAll("\n", ""); sbMetodo.delete(0, aux.length); informacoes = new Informacoes(classe, metodo, Integer.parseInt(auxLinha)); inf.add(informacoes); } } } } } // --------------------------- Fim Verifica Mtodo ------------------------------------ } // } } /* for(int i=0; i<inf.size(); i++){ System.out.println("Classe:"+inf.get(i).getClasse()+" Metodo:"+inf.get(i).getMetodo()+" Linha: "+inf.get(i).getLinha()); } // /* for(Map.Entry<String,Informacoes> entry : inf.entrySet()) { String key = entry.getKey(); int value = entry.getValue().getLinha(); String metodov = entry.getValue().getMetodo(); String classev = entry.getValue().getClasse(); System.out.println(key + " => " + classev+ " => " +metodov+ " => " +value); }*/ } public void falharam(String classeMetodo, int linha, ArrayList<Informacoes> linhaMetodo, ArrayList<DadosTeste> dadosTeste, Junit junit, Map<String, Testes> totais) { // System.out.println(classeMetodo); passaram = 0; falharam = 0; totPassaram = 0; totFalharam = 0; String metodoCodigo = null; List<Integer> arrayLinhas = new ArrayList<>(); HashMap<Integer, Informacoes> informacoes = new HashMap<>(); /* ordenar as linhas onde os metodos comeam e pegar somente as linhas da classe */ for (int i = 0; i < linhaMetodo.size(); i++) { if (linhaMetodo.get(i).getClasse().equals(classeMetodo)) { arrayLinhas.add(linhaMetodo.get(i).getLinha()); informacoes.put(linhaMetodo.get(i).getLinha(), linhaMetodo.get(i)); } } // System.out.println("Classe: "+ classeMetodo+arrayLinhas); for (int i = 0; i < arrayLinhas.size(); i++) { int j = i + 1; if (j < arrayLinhas.size()) { if (linha > arrayLinhas.get(i) && linha < arrayLinhas.get(j)) { metodoCodigo = informacoes.get(arrayLinhas.get(i)).getMetodo(); //System.out.println(linha + " "+informacoes.get(arrayLinhas.get(i)).getMetodo()); verificaMetodo(classeMetodo, metodoCodigo, dadosTeste, totais); //System.out.println("linha: " + linha + " metodo: " + metodoCodigo+" classe: "+classeMetodo); } //else if ((linha > arrayLinhas.get(i)) && (linha < qtdeLinhas)) { // metodoCodigo = informacoes.get(arrayLinhas.get(i)).getMetodo(); // } } else if (linha > arrayLinhas.get(arrayLinhas.size() - 1)) { metodoCodigo = informacoes.get(arrayLinhas.get(i)).getMetodo(); //System.out.println(linha + " "+informacoes.get(arrayLinhas.get(i)).getMetodo()); verificaMetodo(classeMetodo, metodoCodigo, dadosTeste, totais); // System.out.println("linha: " + linha + " metodo: " + metodoCodigo+" classe: "+classeMetodo); } } // System.out.println("Classe: "+classe+arrayLinhas); //.out.println("Classe:"+classeMetodo+" linha: " + linha + " metodo: " + metodoTeste); /* verifica se o teste passou ou falhou */ if (metodoTeste.isEmpty()) { linhaControl = true; } else { for (int i = 0; i < metodoTeste.size(); i++) { //System.out.println(junit.getTestesFalhos() + "->" + metodoTeste.get(i)); if (junit.getTestesFalhos().contains(metodoTeste.get(i))) { falharam++; } } passaram = abs(metodoTeste.size() - falharam); /* System.out.println("Classe: ["+classe+"]"+"linha: [" +linha +"]" + " Metodo: [" + metodo + "]" + " metodo de teste[" + metodoTeste + "]" + " Falharam: [" + falharam + "]" + " Passaram: [" + passaram + "]");*/ metodoTeste.clear(); } linhaControl = false; } public void verificaMetodo(String classeMetodo, String metodoCodigo, ArrayList<DadosTeste> dadosTeste, Map<String, Testes> totais) { /* Verificar quais mtodos de teste chamam o mtodo do cdigo */ ArrayList<String> mChamado = new ArrayList<>(); //pega todos os metodos de cdigo for (int i = 0; i < dadosTeste.size(); i++) { // System.out.println(dadosTeste.get(i).getClasse() +"->"+classeMetodo); if (dadosTeste.get(i).getClasse().equals(classeMetodo)) { mChamado = dadosTeste.get(i).getmChamado(); for (int j = 0; j < mChamado.size(); j++) { // System.out.println("Metodo chamado: "+mChamado.get(j)+" Metodo Codigo: "+metodoCodigo); if (mChamado.get(j).equals(metodoCodigo)) { metodoTeste.add(dadosTeste.get(i).getMetodoTeste()); if (totais.containsKey(dadosTeste.get(i).getClasseTeste())) { totFalharam = totFalharam + totais.get(dadosTeste.get(i).getClasseTeste()).getTotalFalha(); totPassaram = totPassaram + totais.get(dadosTeste.get(i).getClasseTeste()).getTotalSucesso(); } break; } } } } // System.out.println("FINAL -----> Classe metodo:"+classeMetodo+" Metodo teste:"+metodoTeste); } //----------------------------- Retorna as linhas cobertas pelos testes ---------------------------------------- public ArrayList<Integer> qtdeLinhasCod() { char[] aux; StringBuffer sbLinha = new StringBuffer(); Elements elements = document.getElementsByTag("tr"); for (Element children : elements) { if (StringUtils.isNotBlank(children.getElementsByClass("numLineCover").text())) { aux = children.getElementsByClass("numLineCover").text().toCharArray(); for (int i = 0; i < aux.length; i++) { //System.out.println("["+aux[i]+"]"); if (aux[i] >= 48 && aux[i] <= 57) { sbLinha.append(aux[i]); // exclui espaos na string } } if (StringUtils.isNotBlank(sbLinha.toString())) { linhasCod.add(Integer.parseInt(sbLinha.toString())); sbLinha.delete(0, sbLinha.length()); } } } return linhasCod; } }