package com.sandwich.koan.result; import java.util.Collections; import java.util.List; import com.sandwich.koan.KoanMethod; import com.sandwich.util.Builder; public class KoanSuiteResult { private final KoanResultModel state; static class KoanResultModel { String level; int numberPassing = -1; int totalNumberOfKoanMethods = -1; List<String> passingCases; List<String> remainingCases; KoanMethodResult methodResult = KoanMethodResult.PASSED; @Override public String toString() { return "KoanResult [level=" + level + ", numberPassing=" + numberPassing + ", totalNumberOfKoanMethods=" + totalNumberOfKoanMethods + ", passingCases=" + passingCases + ", remainingCases=" + remainingCases + ", failingMethod=" + methodResult.getFailingMethod() + ", message=" + methodResult.getMessage() + ", lineNumber=" + methodResult.getLineNumber() + "]"; } } KoanSuiteResult(KoanResultModel state) { this.state = state; } public static class KoanResultBuilder implements Builder<KoanSuiteResult>{ private final KoanResultModel state = new KoanResultModel(); public KoanResultBuilder level(String level){ state.level = level; return this; } public KoanResultBuilder numberPassing(int numberPassing){ state.numberPassing = numberPassing; return this; } public KoanResultBuilder totalNumberOfKoanMethods(int totalNumberOfKoanMethods){ state.totalNumberOfKoanMethods = totalNumberOfKoanMethods; return this; } @SuppressWarnings("unchecked") // immutable and empty - its safe public KoanResultBuilder passingCases(List<String> passingCases){ state.passingCases = passingCases == null ? Collections.EMPTY_LIST : passingCases; return this; } @SuppressWarnings("unchecked") // immutable and empty - its safe public KoanResultBuilder remainingCases(List<String> remainingCases){ state.remainingCases = remainingCases == null ? Collections.EMPTY_LIST : remainingCases; return this; } public KoanResultBuilder methodResult(KoanMethodResult methodResult){ state.methodResult = methodResult == null ? KoanMethodResult.PASSED : methodResult; return this; } public KoanSuiteResult build() { return new KoanSuiteResult(state); } } public int getNumberPassing() { return state.numberPassing; } public int getTotalNumberOfKoans(){ return state.totalNumberOfKoanMethods; } public String getFailingCase() { return state.remainingCases.isEmpty() ? null : state.remainingCases.get(0); } public KoanMethod getFailingMethod() { return state.methodResult.getFailingMethod(); } public String getMessage() { return state.methodResult.getMessage(); } public List<String> getPassingSuites() { return state.passingCases; } public List<String> getRemainingSuites() { return state.remainingCases; } public String getLineNumber(){ return state.methodResult.getLineNumber(); } public boolean isAllKoansSuccessful() { return state.methodResult == KoanMethodResult.PASSED; } public String getLevel() { return state.level; } @Override public String toString() { return state.toString(); } public boolean displayIncompleteException() { return getFailingMethod() == null || getFailingMethod().displayIncompleteException(); } }