function observeItemsAggregation(oChange) {
				var aCells,
					aItems, // all items in the table
					oItem = oChange.child; // the table row or item control

				if (that.oView.isDestroyStarted()) {
					return; // view destruction on test end, no need to check values
				}

				aItems = oChange.object.getAggregation(oChange.name);
				if (!aItems) {
					return;
				}
				if (oChange.mutation === "remove") {
					oItem = aItems[oItem.$index]; // successor item of removed item
				}
				aCells = oItem ? oItem.getAggregation("cells") : [];
				aCells.forEach(function (oCurrentCell, iCellIndex) {
					var oCell, i,
						sCellId = extractControlId(oCurrentCell.getId()),
						sCellProperty = oCurrentCell.getBindingInfo("text") ? "text" : "value";

					if (that.oListControlIds.has(sCellId)) {
						for (i = aItems.indexOf(oItem); i < aItems.length; i += 1) {
							aItems[i].$index = i;
							oCell = aItems[i].getAggregation("cells")[iCellIndex];
							that.checkValue(assert, oCell.getProperty(sCellProperty),
								sCellId, getItemIndex(aItems[i]));
						}
						if (oChange.mutation === "insert") {
							that.oObserver.observe(oCurrentCell, {properties : [sCellProperty]});
						}
					}
				});
			}
The managed observer callback for changes to the "items" or "rows" of the table.
On "insert": Checks value or text of the cells of the inserted item and all successor
items (which "move down" by the insert) and attaches observer to each cell of the
inserted item.
On "remove": Unobserves the removed item.

@param {object} oChange The aggregation change object