### Question:
Evaluator { public static String parseString(String string) { if (string == null) return null; StringBuilder sb = new StringBuilder(); int currentIndex = 0; while (currentIndex < string.length()) { int propertyIndex = string.indexOf("${", currentIndex); int expressionIndex = string.indexOf("#{", currentIndex); int nextIndex = propertyIndex < 0 ? (expressionIndex < 0 ? string.length() : expressionIndex) : (expressionIndex < 0 ? propertyIndex : Math.min(expressionIndex, propertyIndex)); sb.append(string.substring(currentIndex, nextIndex)); currentIndex = nextIndex + 2; if (nextIndex == propertyIndex) { nextIndex = string.indexOf('}', currentIndex); if (nextIndex < 0) { throw new IllegalArgumentException(string); } sb.append(evalProperty(string, currentIndex, nextIndex)); currentIndex = nextIndex + 1; } else if (nextIndex == expressionIndex) { Stack<Operator> operators = new Stack<>(); Stack<Value> operands = new Stack<>(); Tokenizer tokenizer = new Tokenizer(string, Operator.symbols(), true, false, currentIndex); boolean closed = false; boolean lastTokenIsOperator = true; boolean negativeSign = false; while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); Operator op = Operator.from(token); if (op == null) { operands.push(new Value(negativeSign ? "-" + token : token)); lastTokenIsOperator = false; continue; } else if (op.isWhite()) { continue; } else if (op == Operator.OPENVAR) { if (!tokenizer.hasMoreTokens()) throw new IllegalArgumentException(string); StringBuilder var = new StringBuilder(); while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); if ((op = Operator.from(token)) == null || op.isWhite()) { var.append(token); } else { break; } } if (op != Operator.CLOSEVAR) { throw new IllegalArgumentException("Expected '}' but found " + token + " in " + string); } operands.push(evalProperty(var.toString(), 0, var.length())); lastTokenIsOperator = false; continue; } else if (op == Operator.CLOSEVAR) { closed = true; break; } else if (op.isFunction()) { operators.push(op); } else if (op == Operator.OPENPAR) { operators.push(op); } else if (op == Operator.CLOSEPAR) { while ((op = operators.pop()) != Operator.OPENPAR) { op.exec(operands); if (operators.isEmpty()) throw new IllegalStateException("Cannot find matching '('"); } while (!operators.isEmpty() && operators.peek().isFunction()) { op = operators.pop(); op.exec(operands); } } else if (op == Operator.MINUS && lastTokenIsOperator) { negativeSign = true; } else { while (true) { if (operators.isEmpty() || operators.peek() == Operator.OPENPAR || operators.peek().precedence() < op.precedence()) { operators.push(op); break; } operators.pop().exec(operands); } lastTokenIsOperator = true; } } if (!closed) { throw new IllegalArgumentException("Expression is missing closing '}': " + string); } while (!operators.empty()) { operators.pop().exec(operands); } sb.append(operands.pop()); if (!operands.empty()) { throw new IllegalArgumentException(operands.size() + " operands not processed: top=" + operands.pop() + " all=" + operands); } currentIndex = tokenizer.getPosition(); } } return sb.toString(); } private  Evaluator(); static int parseInt(String string); static String parseString(String string);  }### Answer:
@Test(expectedExceptions = IllegalArgumentException.class) public void testFailureOnNonDefault() { Evaluator.parseString("${org.radargun.testFailureOnNonDefault}"); }