test: cover compatibility method return types
This commit is contained in:
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
### Validate compatibility method return types
|
||||||
|
|
||||||
|
- Added focused coverage proving that the older `TEACH ... TAKES ... RETURNS TYPE` / `LEARNED` method syntax receives the same learner-facing return-type diagnostic as modern methods.
|
||||||
|
- Added the compatibility method fixture to the complete typecheck diagnostics validator.
|
||||||
|
|
||||||
### Validate compatibility function return types
|
### Validate compatibility function return types
|
||||||
|
|
||||||
- Added focused coverage proving that the older `TEACH ... TAKES ... RETURNS TYPE` / `LEARNED` syntax receives the same learner-facing return-type diagnostic as modern functions.
|
- Added focused coverage proving that the older `TEACH ... TAKES ... RETURNS TYPE` / `LEARNED` syntax receives the same learner-facing return-type diagnostic as modern functions.
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ END
|
|||||||
|
|
||||||
The same focused check applies to methods such as `Player.score RETURNS NUMBER`; a wrong return reports the full method name, for example: `Type mismatch for return from Player.score: expected NUMBER, but this value looks like TEXT.`
|
The same focused check applies to methods such as `Player.score RETURNS NUMBER`; a wrong return reports the full method name, for example: `Type mismatch for return from Player.score: expected NUMBER, but this value looks like TEXT.`
|
||||||
|
|
||||||
The older compatibility spelling keeps the same return check. For example, `TEACH square TAKES amount RETURNS NUMBER` with `LEARNED` and `CALL square WITH 4` is checked before it runs, so older lessons get the same type-safety feedback.
|
The older compatibility spelling keeps the same return check for functions and methods. For example, `TEACH square TAKES amount RETURNS NUMBER` with `LEARNED` and `CALL square WITH 4` is checked before it runs, so older lessons get the same type-safety feedback. A compatibility method such as `TEACH score TAKES amount RETURNS NUMBER` inside a class is checked the same way.
|
||||||
|
|
||||||
If a function or method declares `RETURNS TYPE` but uses `RETURN` without a value, the checker points out the missing expression:
|
If a function or method declares `RETURNS TYPE` but uses `RETURN` without a value, the checker points out the missing expression:
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
CLASS Player
|
||||||
|
TEACH score TAKES amount RETURNS NUMBER
|
||||||
|
CHECK TYPE amount IS NUMBER
|
||||||
|
RETURN "oops"
|
||||||
|
LEARNED
|
||||||
|
ENDCLASS
|
||||||
|
|
||||||
|
NEW Player player
|
||||||
|
CALL player.score WITH 4
|
||||||
@@ -37,6 +37,9 @@ EXPECTED = {
|
|||||||
"tests/typecheck_method_return_bad.claro": [
|
"tests/typecheck_method_return_bad.claro": [
|
||||||
"tests/typecheck_method_return_bad.claro:3: Type mismatch for return from Player.score: expected NUMBER, but this value looks like TEXT.",
|
"tests/typecheck_method_return_bad.claro:3: Type mismatch for return from Player.score: expected NUMBER, but this value looks like TEXT.",
|
||||||
],
|
],
|
||||||
|
"tests/typecheck_method_compat_return_bad.claro": [
|
||||||
|
"tests/typecheck_method_compat_return_bad.claro:4: Type mismatch for return from Player.score: expected NUMBER, but this value looks like TEXT.",
|
||||||
|
],
|
||||||
"tests/typecheck_method_return_expression_bad.claro": [
|
"tests/typecheck_method_return_expression_bad.claro": [
|
||||||
"tests/typecheck_method_return_expression_bad.claro:4: Type mismatch for return from Player.label: expected TEXT, but this value looks like NUMBER.",
|
"tests/typecheck_method_return_expression_bad.claro:4: Type mismatch for return from Player.label: expected TEXT, but this value looks like NUMBER.",
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user