1 28 29 package com.idaremedia.antx.capture; 30 31 import java.io.BufferedReader ; 32 import java.io.IOException ; 33 import java.io.Reader ; 34 35 import org.apache.tools.ant.BuildException; 36 37 import com.idaremedia.antx.helpers.Tk; 38 39 74 75 public final class EmmaTextResultsInterpreter implements LogInterpreter 76 { 77 private static final String HEADER0= "[class, %]\t[method, %]\t[block, %]\t[line, %]"; 78 79 82 public EmmaTextResultsInterpreter() 83 { 84 super(); 85 } 86 87 88 private int beginning(String s, int end) 89 { 90 int start = end; 91 int i = end; 92 while (i>=0) { 93 if (!Character.isDigit(s.charAt(i))) { 94 break; 95 } 96 start = i; 97 i--; 98 } 99 return start; 100 } 101 102 103 private boolean below75percent(String s, int resultend) 104 { 105 int i = s.lastIndexOf('%',resultend); 106 if (i>0) { 107 int j = i; 108 i = beginning(s,j-1); 109 int percent = Tk.integerFrom(s.substring(i,j),Tk.NO_INT); 110 if (percent!=Tk.NO_INT) { 111 return percent<75; 112 } 113 } 114 return false; 115 } 116 117 118 public String interpret(Reader inputr, InterpretParameters config) 119 throws BuildException 120 { 121 String result = PROBLEM; 122 int nUnderCovered = 0; 123 int nBelow75 = 0; 124 125 try { 126 BufferedReader in = new BufferedReader (inputr,512); 127 String line; 128 while ((line=in.readLine())!=null) { 129 if (line.startsWith(HEADER0)) { 130 String resultsline = in.readLine(); 131 if (resultsline!=null) { 132 result = CLEAN; 133 int i,from=resultsline.length()-1; 134 while(from>0) { 135 i= resultsline.lastIndexOf(')',from); 136 if (i<0) { 137 break; 138 } 139 if (resultsline.charAt(i+1)=='!') { 140 nUnderCovered++; 141 } else if (below75percent(resultsline,i)) { 142 nBelow75++; 143 } 144 from = i-1; 145 i = resultsline.lastIndexOf('(',from); 146 if (i>0) { 147 from = i-1; 148 } 149 } 150 } 151 break; 152 } 153 } 154 in.close(); 155 } catch(IOException ioX) { 156 throw new BuildException(ioX); 157 } 158 159 if (nUnderCovered!=0) { 160 if (nUnderCovered>config.getMaxErrors()) { 161 result = FAILURE; 162 } else { 163 result = PROBLEM; 164 } 165 } 166 else if (nBelow75!=0) { 167 if (nBelow75>config.getMaxWarnings()) { 168 result = FAILURE; 169 } else { 170 result = PROBLEM; 171 } 172 } 173 174 ResultsHelper.set(config,nUnderCovered,nBelow75,result); 175 return result; 176 } 177 } 178 179 | Popular Tags |