test: cover reverse text concatenation
This commit is contained in:
@@ -156,6 +156,14 @@ SET player.name player.name + " Lovelace"
|
||||
|
||||
The focused typecheck validation matrix covers this positive case beside the existing numeric-expression and text-operand checks.
|
||||
|
||||
The same rule works when the literal comes first:
|
||||
|
||||
```claro
|
||||
SET player.name "Ada " + player.name
|
||||
```
|
||||
|
||||
This reverse-order concatenation is also covered by focused validation, so learners can build text from either side without losing the declared `TEXT` field type.
|
||||
|
||||
`CHECK TYPE` also preserves TEXT field metadata through the same chained aliases:
|
||||
|
||||
```claro
|
||||
|
||||
@@ -57,7 +57,7 @@ Ready now:
|
||||
|
||||
Still needed:
|
||||
- Keep the focused typecheck validator's fixture list complete as new positive and negative examples are added.
|
||||
- The expression checker now carries a known TEXT operand through all arithmetic operators so object-field diagnostics do not hide addition, subtraction, multiplication, or division mistakes; focused numeric-subtraction, numeric-division, and numeric-multiplication positives plus text-operand addition, subtraction, multiplication, and division negatives protect this behavior. Text concatenation into a TEXT field also has a focused positive fixture. Each numeric operator names the text operand and explains that it needs NUMBER values.
|
||||
- The expression checker now carries a known TEXT operand through all arithmetic operators so object-field diagnostics do not hide addition, subtraction, multiplication, or division mistakes; focused numeric-subtraction, numeric-division, and numeric-multiplication positives plus text-operand addition, subtraction, multiplication, and division negatives protect this behavior. Text concatenation into a TEXT field has focused positive fixtures for both operand orders. Each numeric operator names the text operand and explains that it needs NUMBER values.
|
||||
- richer typed function signatures and return values
|
||||
- type checking through branches and loops
|
||||
- richer object field type checking beyond simple direct assignments
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ See `CURRENT_STATUS.md` for the detailed feature matrix.
|
||||
3b. Keep package security validation in Forgejo/Gitea CI so unsafe names, exact manifest-version/name/version/checksum mismatches, missing manifests, duplicate project manifest versions and packages, duplicate lock packages, duplicate package manifest names, versions, and checksums, and lockfile errors remain release blockers.
|
||||
4. Add small examples for each foundation feature before adding bigger syntax. The object-field foundation now includes positive and negative validation for field expressions such as `SET player.score player.name`, `SET player.score player.score + 1`, `SET player.name player.score + 1`, explicitly typed field assignments, simple and chained aliases such as `SET alias player`, `SET backup alias`, followed by `SET backup.score ...` or `CHECK TYPE backup.score IS ...`, chained aliases in object-method calls through both modern `DO` and compatibility `CALL ... WITH` forms (including a dedicated positive modern `DO` fixture), and arithmetic/text expression mismatches; typed containers also accept a map with nested type metadata when it is added to a `LIST OF MAP`; broader alias/control-flow checking remains planned.
|
||||
5. Keep the focused typecheck validator complete: every `typecheck_*.claro` fixture, including positive fixtures, must be exercised by release validation.
|
||||
6. Continue narrowing expression diagnostics: known TEXT operands now remain visible through arithmetic, with focused numeric-subtraction, numeric-division, and numeric-multiplication positives plus text-operand addition, subtraction, multiplication, and division coverage. Text concatenation into TEXT fields is also covered as a positive case. Each numeric operator gives specific guidance naming the text operand.
|
||||
6. Continue narrowing expression diagnostics: known TEXT operands now remain visible through arithmetic, with focused numeric-subtraction, numeric-division, and numeric-multiplication positives plus text-operand addition, subtraction, multiplication, and division coverage. Text concatenation into TEXT fields is covered in both operand orders. Each numeric operator gives specific guidance naming the text operand.
|
||||
|
||||
## Complete-platform milestones
|
||||
|
||||
|
||||
@@ -34,6 +34,12 @@ class ValidateTypecheckDiagnosticsTests(unittest.TestCase):
|
||||
MODULE.EXPECTED_OK,
|
||||
)
|
||||
|
||||
def test_includes_reverse_text_concatenation_success_fixture(self):
|
||||
self.assertIn(
|
||||
"tests/typecheck_object_field_text_concat_reverse_good.claro",
|
||||
MODULE.EXPECTED_OK,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
CLASS Player
|
||||
HAS name TEXT
|
||||
END
|
||||
|
||||
NEW Player player
|
||||
SET player.name "Lovelace"
|
||||
SET player.name "Ada " + player.name
|
||||
@@ -182,6 +182,7 @@ EXPECTED_OK = [
|
||||
"tests/typecheck_object_field_multiplication_good.claro",
|
||||
"tests/typecheck_object_field_text_good.claro",
|
||||
"tests/typecheck_object_field_text_concat_good.claro",
|
||||
"tests/typecheck_object_field_text_concat_reverse_good.claro",
|
||||
"tests/typecheck_object_field_yesno_good.claro",
|
||||
"tests/typecheck_object_field_check_type_number_good.claro",
|
||||
"tests/typecheck_object_field_check_type_text_good.claro",
|
||||
|
||||
Reference in New Issue
Block a user