FLUID-6428: Failed resolution of IoC reference leaves mouse droppings in options structure

Metadata

Source
FLUID-6428
Type
Bug
Priority
Major
Status
Open
Resolution
N/A
Assignee
Antranig Basman
Reporter
Antranig Basman
Created
2019-11-19T11:49:10.592-0500
Updated
2019-11-20T07:15:07.062-0500
Versions
N/A
Fixed Versions
N/A
Component
  1. IoC System

Description

It looks like this is an issue that only appears in the in-progress branch implementing immutable options for FLUID-6426. The Syllabification enactor tests at https://github.com/fluid-project/infusion/blob/master/tests/framework-tests/preferences/js/SyllabificationEnactorTests.js#L293 contain some blocks which actually fail to resolve at all as a result of escaping issues:

combined: {
                    ".flc-syllabification-injectWhenDisabled": "{that}.options.testOpts.injected.disabled.\.flc-syllabification-injectWhenDisabled",
                    ".flc-syllabification-injectWhenEnabled": "{that}.options.testOpts.injected.disabled.\.flc-syllabification-injectWhenEnabled"
                }

However, whilst they fail to resolve they now leave "mouse droppings" at the site where they are directed during initial observation, and {that}.options.testOptions.injected.disabled ends up with an mouse dropping of

"": undefined

It seems our modifications to the options evaluation workflow have hoisted the widespread ability to leave mouse droppings of "undefined" across the source of blocks into their target.

Comments

  • Antranig Basman commented 2019-11-20T07:14:47.865-0500

    The first variety of this caused a failure during PanelsTests.js "FLUID-5203: support multiple text field sliders in one composite panel". The attempt to invoke

    updateSliderAttributes: {
                    "this": "{that}.container",
                    method: "attr",
                    args: [{
                        "min": "{that}.model.range.min",
                        "max": "{that}.model.range.max",
                        "step": "{that}.model.step",
                        "type": "range",
                        "value": "{that}.model.value",
                        "aria-labelledby": "{that}.options.attrs.aria-labelledby",
                        "aria-label": "{that}.options.attrs.aria-label"
                    }]
                }
    

    via

    "onCreate.initSliderAttributes": "{that}.updateSliderAttributes",
    

    caused a read of "{that}.options.attrs.aria-labelledby" which was undefined. The failure was in fluid.makeExpandStrategy's "deliverer" which attempted to set the undefined value explicitly in the target. We need a system both which freezes values after full observation, but also does not leave mouse dropping tracking in the target, even during observation.