Skip to content

Commit

Permalink
Check if message type is empty after merging
Browse files Browse the repository at this point in the history
Ref. #410
  • Loading branch information
Alexander Senier authored and senier committed Aug 25, 2020
1 parent 39e3109 commit bf52e03
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
10 changes: 9 additions & 1 deletion rflx/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

from rflx.common import flat_name, generic_repr, indent, indent_next
from rflx.contract import ensure, invariant
from rflx.error import Location, RecordFluxError, Severity, Subsystem
from rflx.error import Location, RecordFluxError, Severity, Subsystem, fail
from rflx.expression import (
TRUE,
UNDEFINED,
Expand Down Expand Up @@ -1925,6 +1925,14 @@ def prune_dangling_states(
}

structure, types = prune_dangling_states(structure, types)
if not structure or not types:
fail(
f'empty message type when merging field "{field.identifier}"',
Subsystem.MODEL,
Severity.ERROR,
field.identifier.location,
)

message = message.copy(structure=structure, types=types)

return message
Expand Down
32 changes: 32 additions & 0 deletions tests/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -1368,6 +1368,38 @@ def test_merge_message_constrained() -> None:
assert merged == expected


def test_merge_message_constrained_empty() -> None:
m1 = UnprovenMessage(
"P.M1",
[
Link(INITIAL, Field("F1")),
Link(Field("F1"), Field("F2"), Equal(Variable("F1"), Variable("True"))),
Link(Field("F1"), FINAL, Equal(Variable("F1"), Variable("False"))),
Link(Field("F2"), FINAL, Equal(Variable("F2"), Variable("True"))),
],
{Field("F1"): BOOLEAN, Field("F2"): BOOLEAN},
)
m2 = UnprovenMessage(
"P.M2",
[
Link(INITIAL, Field("F3")),
Link(
Field("F3"),
FINAL,
And(
Equal(Variable("F3_F1"), Variable("True")),
Equal(Variable("F3_F2"), Variable("False")),
),
),
],
{Field("F3"): m1},
)
with pytest.raises(
RecordFluxError, match=r'^model: error: empty message type when merging field "F3"$',
):
m2.merged()


def test_merge_message_error_name_conflict() -> None:
m2_f2 = Field(ID("F2", Location((10, 5))))

Expand Down

0 comments on commit bf52e03

Please sign in to comment.