Browse Source

166580, comment #6: harness now allows you to specify if ordering is important in expected output

tags/Root_extensions
aclement 17 years ago
parent
commit
d7222a776d

+ 64
- 15
testing/newsrc/org/aspectj/testing/OutputSpec.java View File

@@ -26,6 +26,14 @@ public class OutputSpec {
}
public void matchAgainst(String output) {
matchAgainst(output, "yes");
}
public void matchAgainst(String output, String ordered) {
if (ordered != null && ordered.equals("no")) {
unorderedMatchAgainst(output);
return;
}
boolean matches = false;
int lineNo = 0;
StringTokenizer strTok = new StringTokenizer(output,"\n");
@@ -43,23 +51,64 @@ public class OutputSpec {
}
} else { lineNo = -1; }
if (!matches) {
StringBuffer failMessage = new StringBuffer();
failMessage.append("\n expecting output:\n");
int l = 0;
for (Iterator iter = expectedOutputLines.iterator(); iter.hasNext();) {
String line = (String) iter.next();
failMessage.append(line);
failMessage.append("\n");
createFailureMessage(output, lineNo, strTok.countTokens());
}
}
public void unorderedMatchAgainst(String output) {
List outputFound = getOutputFound(output);
if(outputFound.size() != expectedOutputLines.size()) {
createFailureMessage(output, -1, outputFound.size());
return;
}
List expected = new ArrayList();
expected.addAll(expectedOutputLines);
List found = new ArrayList();
found.addAll(outputFound);
for (Iterator iterator = outputFound.iterator(); iterator.hasNext();) {
String lineFound = (String) iterator.next();
for (Iterator iterator2 = expectedOutputLines.iterator(); iterator2.hasNext();) {
String lineExpected = (String) iterator2.next();
if (lineFound.indexOf(lineExpected)!= -1) {
found.remove(lineFound);
expected.remove(lineExpected);
continue;
}
}
failMessage.append(" but found output:\n");
failMessage.append(output);
failMessage.append("\n");
if (lineNo==-1)
failMessage.append("Expected "+expectedOutputLines.size()+" lines of output but there are "+strTok.countTokens());
else
failMessage.append("First difference is on line " + lineNo);
}
if (!found.isEmpty() || !expected.isEmpty()) {
createFailureMessage(output,-2,outputFound.size());
}
}
private void createFailureMessage(String output, int lineNo, int sizeFound) {
StringBuffer failMessage = new StringBuffer();
failMessage.append("\n expecting output:\n");
int l = 0;
for (Iterator iter = expectedOutputLines.iterator(); iter.hasNext();) {
String line = (String) iter.next();
failMessage.append(line);
failMessage.append("\n");
AjcTestCase.fail(failMessage.toString());
}
failMessage.append(" but found output:\n");
failMessage.append(output);
failMessage.append("\n");
if (lineNo==-1) {
failMessage.append("Expected "+expectedOutputLines.size()+" lines of output but there are "+sizeFound);
} else if (lineNo >= 0) {
failMessage.append("First difference is on line " + lineNo);
}
failMessage.append("\n");
AjcTestCase.fail(failMessage.toString());
}
private List getOutputFound(String output) {
List found = new ArrayList();
StringTokenizer strTok = new StringTokenizer(output,"\n");
while(strTok.hasMoreTokens()) {
String outputLine = strTok.nextToken().trim();
found.add(outputLine);
}
return found;
}
}

+ 5
- 1
testing/newsrc/org/aspectj/testing/RunSpec.java View File

@@ -35,6 +35,7 @@ public class RunSpec implements ITestStep {
private String baseDir;
private String options;
private String cpath;
private String orderedStderr;
private AjcTest myTest;
private OutputSpec stdErrSpec;
private OutputSpec stdOutSpec;
@@ -61,7 +62,7 @@ public class RunSpec implements ITestStep {
AjcTestCase.RunResult rr = inTestCase.run(getClassToRun(),args,getClasspath(),useLtw);
if (stdErrSpec != null) {
stdErrSpec.matchAgainst(rr.getStdErr());
stdErrSpec.matchAgainst(rr.getStdErr(),orderedStderr);
}
if (stdOutSpec != null) {
stdOutSpec.matchAgainst(rr.getStdOut());
@@ -136,6 +137,9 @@ public class RunSpec implements ITestStep {
public void addStdOutSpec(OutputSpec spec) {
this.stdOutSpec = spec;
}
public void setOrderedStderr(String orderedStderr) {
this.orderedStderr = orderedStderr;
}
/**
* @return Returns the classToRun.
*/

+ 1
- 0
testing/newsrc/org/aspectj/testing/XMLBasedAjcTestCase.java View File

@@ -169,6 +169,7 @@ public abstract class XMLBasedAjcTestCase extends AjcTestCase {
digester.addSetProperties("suite/ajc-test/run","class","classToRun");
digester.addSetProperties("suite/ajc-test/run","ltw","ltwFile");
digester.addSetProperties("suite/ajc-test/run","xlintfile","xlintFile");
digester.addSetProperties("suite/ajc-test/run/stderr","ordered","orderedStderr");
digester.addSetNext("suite/ajc-test/run","addTestStep","org.aspectj.testing.ITestStep");
digester.addObjectCreate("*/message",ExpectedMessageSpec.class);
digester.addSetProperties("*/message");

Loading…
Cancel
Save