mihai chira <> in flex-sdk

FLEX-35375 CAUSE: DataGrids didn't dispatch a VALUE_COMMIT event when a new dataProvider cleared the selection, thus allowing the selectedItem, selectedIndex, selectedItems, selectedIndexes to become null without a notification. Which also means that if there was any binding set up for any of those variables, it won't be triggered. SOLUTION: we now dispatch a VALUE_COMMIT event when a new dataProvider ends up clearing the selection. NOTE: also added a unit test for this bug, which fails without the fix and passes with the above fix.

FLEX-35362 CAUSE: the DropDownController signals that the DropDownListBase is open immediately, even before the latter has actually made that change on stage. Since the opening takes one or two frames, it leaves a few milliseconds in which code which relies on that open/closed state erroneously assumes that it can use elements that should be on stage or initialized. In this case it's the layout property, which, due to the skin of the DropDownList, is only initialized once the drop down is actually open.

SOLUTION: we check whether the layout is not-null, and if it is, we select items in the list as if it were closed.


-also edited some comments, simplified Array instantiation, and removed an empty constructor.

-now the unit test will pass.

FLEX-35362 Added unit test to reproduce the bug. As expected, it currently fails.

FLEX-35321 CAUSE: if the object isn't on stage when we'd normally set its initialized flag to true, we correctly skip this step, but we also need to set its updateCompletePendingFlag back to false, so that in case it's added to stage again it can work correctly, and have its initialized flag set to true as expected. This second step was skipped in the previous commit. This could be noticed, for example, in DataGrid, which would not show the renderers which it initially used in GridViewLayout.updateTypicalCellSizes(). SOLUTION: set the updateCompletePendingFlag to false even if the object isn't on stage anymore. NOTES: also removed unused imports and an unused local variable.

FLEX-18746 CAUSE: HierarchicalCollectionView.updateLength() was ignoring nodes without children, as it should. However, the function it called for the nodes with children, getChildren() unfortunately had a necessary side-effect (which is a poor design choice, to be sure), which was to add an event listener to the children collection. So the empty collections of nodes were not listened to, which meant that once the node was open any children that were added to that node were not counted towards the length of the collection. And one way this inconsistency surfaced was through the expandItem() fatal.

SOLUTION: The best - and most time-consuming - solution to this is to find a way to extract the side-effect of getChildren() into a separate function and call it when needed. However, for the moment I have opted to simply allow getChildren() to be called even for empty nodes, which in turn adds the event listeners.

NOTES: all unit tests now pass.

    • -1
    • +1
FLEX-18746 Adding another unit test which goes to the heart of the bug - the length calculation in HierarchicalCollectionView. (Currently the test function test_opening_closing_with_Jill_having_no_children_to_begin_with() fails, as expected.)

FLEX-18746 Added the same test, but without using opening animation. (This way the bug cannot be reproduced, which is a good clue.)

FLEX-35351 FLEX-18746 Now unit tests can be run for the mx project, and they're also included in the entire frameworks suite

FLEX-18746 Renamed the main test function and increased the timeout a bit.

FLEX-18746 Added unit test (current fails).

Merge remote-tracking branch 'origin/develop' into develop

Merge remote-tracking branch 'origin/develop' into develop

FLEX-35321 CAUSE: If a component is removed from stage during a validation cycle, the LayoutManager nevertheless sets its initialized flag to true, even if it's not on stage anymore. That's because it doesn't check at the end whether the component is still on stage.

SOLUTION: Now the LayoutManager verifies that the component is still on stage before initializing it.

FLEX-35321 Refined tests, including checking for how many validation steps happen for size, properties and display list. Without the fix all those expected to fail fail (the last one is not expected to fail without the fix, because it's there just to make sure no regression is introduced by the fix), while with the fix all of them pass.

FLEX-35321 test_object_removed_from_stage_via_user_action_is_not_initialized() needed one more frame to complete (made sure it fails without the proposed fix, and passes with it). Also made some variable and function renames, plus now we can also test how many times each validation function has been called.

FLEX-35321 LayoutManager.validateNow() doesn't use phased instantiation, so it wasn't the best idea to test it with that, at least the test where we fake a user request for the removal of the component in the next frame. Also added a test that tries to make sure that objects removed from stage and then readded are indeed validated and initialized.

FLEX-35321 Made the unit test more realistic (by having the user's action happen in the next frame), and prevented an error when tearDown() tries to remove a component which is no longer on stage.

FLEX-35321 Adding unit test (currently fails, as expected).

FLEX-35306 Addd unit test. Fails when reverting the fix, passes with the fix.

    • -0
    • +49
FLEX-35306 Reverting the fix for FLEX-19651 because it introduced the FLEX-35306 regression.

CAUSE: Due to the fix for FLEX-19651, when the data provider is reset on a (DropDown)List right after the selected item (from this new data provider) is set, a validation cycle is forced on the list immediately before the new data provider is assigned to it. As a consequence, ListBase.commitProperties() fails when trying to find the selected item in the data provider (because, for now, it's still the old one, which doesn't have the new item), thus clearing the selection. But if the list had requireSelection set to true, then the first item in the old provider will be selected nonetheless. And if there was a two-way binding between the list and the model, then the model will at this point be rewritten, most probably wrongly.

SOLUTION: we're reverting the fix for FLEX-19651, which was a minor bug, and seeing if any mustella or unit tests fail. If so, we'll find other ways to fix FLEX-19651.

NOTES: FLEX-19651 doesn't have enough data to reproduce it, so I can't know for sure if it's still there or not. But after playing a bit with multiple selection and data provider changes, as the ticket suggests, there doesn't appear to be any major difference.

FLEX-35260 When calling localToGlobal() on gridColumnHeaderGroup, the result does not reflect its horizontal scroll position, which means that we need to include it manually (in GridHeaderViewLayout.getHeaderIndexAt()). However, the 'x' function argument is assumed to include it, so we're not adding it anymore when calling GridDimensionsView.getColumnIndexAt().

FLEX-35280 FLEX-35260 Recent changes to FLEX-35267 made it so that the y value in GridHeaderViewLayout.getHeaderIndexAt() started to be considered, when before it was simply ignored. But one caller of this function, GridColumnHeaderGroup.eventToHeaderLocations(), simply used '0' for that argument, instead of the real value, knowing that (before these changes) it wasn't being considered. Now the real value is used.

FLEX-35267 Updated unit test to support horizontal scrolling and two new grid profiles. Currently tests fail, but for perplexing reasons (seems like a failure to validate, despite the unit test calling validateNow() way too many times...).

FLEX-35267 Updated unit test - made it easier to read, and now we're also testing GridColumnHeaderGroup.containsGlobalCoordinates(). For the test to pass I've improved the logic in GridHeaderViewLayout.getHeaderIndexAt() which, in turn, made a few functions redundant in GridColumnHeaderGroup. All tests currently pass.

FLEX-35267 Updated unit test - made it easier to read, and now we're also testing GridColumnHeaderGroup.containsGlobalCoordinates(). For the test to pass I've improved the logic in GridHeaderViewLayout.getHeaderIndexAt() which, in turn, made a few functions redundant in GridColumnHeaderGroup. All tests currently pass.

FLEX-35260 Now we are taking into account paddingTop and paddingBottom in getHeaderIndexAt(). Unit test updated as well (and passes, including a second data grid configuration).

Merge remote-tracking branch 'origin/develop' into develop

FLEX-35260 Now the unit test passes, having been updated to check the column header view boundaries. Other changes: -Now we're ignoring the grid header's right padding, because it doesn't make a visual difference (except in the edge case where, together with the left and right padding, the column widths are wider than the grid's width, in which case the grid header expands beyond the grid limits), but we are starting to take into account bottom and top padding. -Renamed some variables and functions for clarity in GridColumnHeaderView and GridDimensions. -Improved error messages in the unit test

FLEX-35260 Now in the unit test we're also verifying areCoordinatesOverAHeaderView(). Currently fails (for point "b").

FLEX-35260 GridHeaderViewLayout.getHeaderIndexAt() (which calls GridDimensions.getColumnIndexAt()) used to return a valid headerIndex (when it was expected to return -1) for an y < 0. Fixed.