|
22 | 22 | builder, |
23 | 23 | ) |
24 | 24 | from sysml2kit.text import write_model |
| 25 | +from sysml2kit.verify.binding import extract_bindings |
25 | 26 |
|
26 | 27 | pytestmark = pytest.mark.parse |
27 | 28 |
|
@@ -246,3 +247,40 @@ def test_full_traceability_round_trip(): |
246 | 247 | (binding,) = extract_bindings(reparsed) |
247 | 248 | assert binding.engine == "fake" |
248 | 249 | assert binding.config_ref == "c.json" |
| 250 | + |
| 251 | + |
| 252 | +def test_typed_binding_ladder_round_trip(): |
| 253 | + """Named usages typed by 'metadata def verificationBinding' survive text.""" |
| 254 | + model = Model() |
| 255 | + pkg = builder.pkg(model, "Ladder") |
| 256 | + binding_def = builder.metadata_def(model, "verificationBinding", owner=pkg) |
| 257 | + analysis = builder.analysis(model, "study", owner=pkg) |
| 258 | + builder.metadata( |
| 259 | + model, |
| 260 | + analysis, |
| 261 | + {"engine": "a", "fidelity": "analytic", "costSeconds": 0.001}, |
| 262 | + name="analyticBinding", |
| 263 | + definition=binding_def, |
| 264 | + ) |
| 265 | + builder.metadata( |
| 266 | + model, |
| 267 | + analysis, |
| 268 | + {"engine": "b", "fidelity": "pattern", "costSeconds": 1.0}, |
| 269 | + name="patternBinding", |
| 270 | + definition=binding_def, |
| 271 | + ) |
| 272 | + model.assign_stable_ids() # distinct names: no sibling clash |
| 273 | + |
| 274 | + reparsed = backend.parse(write_model(model)) |
| 275 | + bindings = {b.fidelity: b for b in extract_bindings(reparsed)} |
| 276 | + assert set(bindings) == {"analytic", "pattern"} |
| 277 | + assert bindings["analytic"].engine == "a" |
| 278 | + assert bindings["pattern"].cost_s == 1.0 |
| 279 | + |
| 280 | + |
| 281 | +def test_plain_named_metadata_is_not_a_binding(): |
| 282 | + model = Model() |
| 283 | + pkg = builder.pkg(model, "P") |
| 284 | + analysis = builder.analysis(model, "study", owner=pkg) |
| 285 | + builder.metadata(model, analysis, {"engine": "a"}, name="somethingElse") |
| 286 | + assert extract_bindings(model) == [] |
0 commit comments