Skip to content

Commit

Permalink
pass: error on bad expression
Browse files Browse the repository at this point in the history
  • Loading branch information
moss committed Mar 30, 2013
1 parent 5c5ea9c commit f96eff0
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 7 deletions.
6 changes: 5 additions & 1 deletion src/net/m14m/romannumeralkata/ExpressionParser.java
@@ -1,5 +1,7 @@
package net.m14m.romannumeralkata;

import java.util.regex.*;

public class ExpressionParser {
private final NumeralParser romanNumeralParser;
private final Formatter romanNumeralFormatter;
Expand All @@ -16,7 +18,9 @@ public ExpressionParser(RomanNumeralParser romanNumeralParser,
this.arabicNumeralFormatter = arabicNumeralFormatter;
}

public Expression parse(String input) {
public Expression parse(String input) throws IllegalExpressionError {
Matcher matcher = Pattern.compile("([mdclxviMDCLXVI]+|\\d+)").matcher(input);
if (!matcher.matches()) throw new IllegalExpressionError();
Expression expression;
if (input.matches("[mdclxviMDCLXVI]+")) {
expression = new Numeral(arabicNumeralFormatter, romanNumeralParser, input);
Expand Down
10 changes: 7 additions & 3 deletions src/net/m14m/romannumeralkata/Main.java
Expand Up @@ -21,9 +21,13 @@ public Main(Reader input, Writer output) {
public void execute() throws IOException {
String input;
while ((input = this.input.readLine()) != null) {
Expression expression = expressionParser.parse(input);
String displayValue = expression.getFormatter().format(expression.getValue());
output.println(displayValue);
try {
Expression expression = expressionParser.parse(input);
String displayValue = expression.getFormatter().format(expression.getValue());
output.println(displayValue);
} catch (IllegalExpressionError illegalExpressionError) {
throw new RuntimeException(illegalExpressionError);
}
}
}
}
6 changes: 3 additions & 3 deletions test/net/m14m/romannumeralkata/ExpressionParserTest.java
Expand Up @@ -11,18 +11,18 @@ public class ExpressionParserTest {
new ArabicNumeralParser(), new ArabicNumeralFormatter()
);

@Test public void shouldParseRomanNumeralExpressions() {
@Test public void shouldParseRomanNumeralExpressions() throws IllegalExpressionError {
assertThat(parser.parse("iii").getValue(), is(3));
assertThat(parser.parse("IX").getValue(), is(9));
}

@Test public void shouldParseArabicNumeralExpressions() {
@Test public void shouldParseArabicNumeralExpressions() throws IllegalExpressionError {
assertThat(parser.parse("3").getValue(), is(3));
assertThat(parser.parse("9").getValue(), is(9));
}

@Test(expected = IllegalExpressionError.class)
public void shouldDisallowBadExpressions() {
public void shouldDisallowBadExpressions() throws IllegalExpressionError {
parser.parse("abc");
}
}

0 comments on commit f96eff0

Please sign in to comment.