@openui5/sap.ui.core
Version:
OpenUI5 Core Library sap.ui.core
58 lines (50 loc) • 1.7 kB
JavaScript
/*!
* OpenUI5
* (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
*/
sap.ui.define([
"sap/base/Log",
"sap/ui/test/matchers/_Visitor"
], function (Log, _Visitor) {
"use strict";
var oLogger = Log.getLogger("sap.ui.test.matchers.Ancestor");
var oVisitor = new _Visitor();
/**
* @class
* Checks if a control has a defined ancestor.
*
* As of version 1.72, it is available as a declarative matcher with the following syntax:
* <code><pre>{
* ancestor: "object" // where "object" is a declarative matcher for the ancestor
* }
* </code></pre>
*
* @param {object|string} vAncestor the ancestor control to check, if undefined, validates every control to true. Can be a control or a control ID
* @param {boolean} [bDirect] specifies if the ancestor should be a direct ancestor (parent)
* @public
* @name sap.ui.test.matchers.Ancestor
* @author SAP SE
* @since 1.27
*/
return function (vAncestor, bDirect) {
return function (oControl) {
if (!vAncestor) {
oLogger.debug("No ancestor was defined so no controls will be filtered.");
return true;
}
var bResult = oVisitor.isMatching(oControl, function (oControlAncestor) {
if (oControlAncestor === oControl) {
return false;
}
if (typeof vAncestor === "string") {
return oControlAncestor && oControlAncestor.getId() === vAncestor;
}
return oControlAncestor === vAncestor;
}, bDirect);
oLogger.debug("Control '" + oControl + (bResult ? "' has " : "' does not have ") +
(bDirect ? "direct " : "") + "ancestor '" + vAncestor);
return bResult;
};
};
}, /* bExport= */ true);