class TestInterpreterTake(object): def setup_method(self, method): self.interpreter = Interpreter() def test_nonexisting(self): with pytest.raises(UndefinedIngredientError) as e: self.interpreter.take("milk", stdin=StringIO("23\n")) assert e.value.ingredient == "milk" def test_overwriting(self): self.interpreter.global_ingredients["sausage"] = IngredientProperties(42, True, False) self.interpreter.take("sausage", stdin=StringIO("57\n")) sausage = self.interpreter.global_ingredients["sausage"] assert sausage == Ingredient("sausage", IngredientProperties(57, True, False)) def test_invalid_num_without_lineno(self): with pytest.raises(InvalidInputError) as e: self.interpreter.take("sausage", stdin=StringIO("not a number!\n")) assert e.value.value == "not a number!" assert e.value.lineno is None def test_invalid_num_with_lineno(self): with pytest.raises(InvalidInputError) as e: self.interpreter.take("sausage", 7, StringIO("not a number!\n")) assert e.value.value == "not a number!" assert e.value.lineno == 7