function checkTable(sTitle, assert, oTable, aExpectedPaths, aExpectedContent, iExpectedLength) {
		var oListBinding = oTable.getBinding("items") || oTable.getBinding("rows"),
			aRows = oTable.getItems ? oTable.getItems() : oTable.getRows();

		if (aExpectedPaths) {
			assert.strictEqual(oListBinding.isLengthFinal(), true, "length is final");
			assert.strictEqual(oListBinding.getLength(), iExpectedLength || aExpectedPaths.length,
				sTitle);
			const aAllExistingContexts = oListBinding._getAllExistingContexts();
			aExpectedPaths.forEach((vExpectedPath, i) => {
				if (typeof vExpectedPath !== "string") {
					if (vExpectedPath !== aAllExistingContexts[i]) {
						assert.ok(false, `${sTitle}: Context not same @${i}: ${vExpectedPath}`);
					}
					aExpectedPaths[i] = vExpectedPath.getPath();
				}
			});
			assert.deepEqual(aAllExistingContexts.map(getNormalizedPath), aExpectedPaths);
		} else if (arguments.length > 5) {
			throw new Error("Unexpected iExpectedLength");
		}

		if (aExpectedContent) {
			aExpectedContent = aExpectedContent.map(function (aTexts) {
				return aTexts.map(function (vText) {
					return vText !== undefined ? String(vText) : "";
				});
			});
			while (aExpectedContent.length < aRows.length) { // pad with "empty" rows
				aExpectedContent.push(aExpectedContent[0].slice().fill(""));
			}
			assert.deepEqual(aRows.map(function (oRow) {
				return oRow.getCells().map(function (oCell) {
					return oCell.getText ? oCell.getText() : oCell.getValue();
				});
			}), aExpectedContent, sTitle);
		}

		checkSelectionCount(assert, oListBinding);

		const oAggregation = oListBinding.getAggregation();
		if (oAggregation) {
			if (oAggregation.hierarchyQualifier) {
				checkAggregationCache4Hierarchy(sTitle, assert, oListBinding);
			} else {
				checkAggregationCache4NonHierarchy(sTitle, assert, oListBinding);
			}
		}
	}
Checks that the given table has the expected state w.r.t. contexts and content.

@param {string} sTitle - A test title
@param {object} assert - The QUnit assert object
@param {sap.m.Table|sap.ui.table.Table} oTable - A table
@param {string[]|sap.ui.model.odata.v4.Context[]|undefined} aExpectedPaths
  List of all expected (normalized) current context paths or the corresponding contexts;
  <code>undefined</code> means to ignore the list binding
@param {any[][]} [aExpectedContent] - "Table" of expected cell contents
@param {number} [iExpectedLength=aExpectedPaths.length] - Expected length
@throws {Error} If <code>iExpectedLength</code> is given but not <code>aExpectedPaths</code>