def parse_cooking_time(line, lineno=None): m = re.match(COOKING_TIME_PATTERN, line) if not is_cooking_time(line): raise syntax_errors.InvalidCookingTimeError(lineno) time, unit = m.groups() validate_cooking_time(time, unit, lineno) cooking_time = int(time) return cooking_time, unit
def test_nonmatching_unit(self, time, unit): with pytest.raises(syntax_errors.NonMatchingUnitError) as e: validate_cooking_time(time, unit) assert e.value.number == int(time) assert e.value.unit == unit
def test_zero_cooking_time(self): with pytest.raises(syntax_errors.NotAllowedTimeError) as e: validate_cooking_time('0', 'minutes') assert e.value.time == 0
def test_invalid_time_with_lineno(self): with pytest.raises(syntax_errors.InvalidCookingTimeError) as e: validate_cooking_time('meh', 'hours', 42) assert e.value.lineno == 42
def test_invalid_time_without_lineno(self): with pytest.raises(syntax_errors.InvalidCookingTimeError) as e: validate_cooking_time('eek', 'minutes') assert e.value.lineno is None