UNPKG

@openui5/sap.ui.core

Version:

OpenUI5 Core Library sap.ui.core

91 lines (82 loc) 2.94 kB
/*! * 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/base/strings/capitalize", "sap/ui/thirdparty/jquery" ], function (Log, capitalize, jQueryDOM) { "use strict"; var oLogger = Log.getLogger("sap.ui.test.matchers.Properties"); /** * @class * Checks if a control's properties have the provided values - all properties have to match their values. * * As of version 1.72, it is available as a declarative matcher with the following syntax: * <code><pre>{ * properties: { * propertyName: "propertyValue" * } * } * </pre></code> * As of version 1.74, you can use regular expressions in declarative syntax: * <code><pre>{ * properties: { * propertyName: { * regex: { * source: "propertyValue$", * flags: "ig" * } * } * } * } * </pre></code> * @param {object} oProperties the object with the properties to be checked. Example: * <pre> * // Would filter for an enabled control with the text "Accept". * new Properties({ * // The property text has the exact value "Accept" * text: "Accept", * // The property enabled also has to be true * enabled: true * }) * </pre> * If the value is a RegExp, it tests the RegExp with the value. RegExp only works with string properties. * @public * @name sap.ui.test.matchers.Properties * @author SAP SE * @since 1.27 */ return function (oProperties) { return function (oControl) { var bIsMatching = true; jQueryDOM.each(oProperties, function (sPropertyName, oPropertyValue) { var fnProperty = oControl["get" + capitalize(sPropertyName, 0)]; if (!fnProperty) { bIsMatching = false; oLogger.error("Control '" + oControl + "' does not have a property '" + sPropertyName + "'"); return false; } var vCurrentPropertyValue = fnProperty.call(oControl); // propertyValue is set in parent frame (on matcher instantiation), so match it against the parent's RegExp constructor if (oPropertyValue instanceof RegExp) { bIsMatching = oPropertyValue.test(vCurrentPropertyValue); } else if (jQueryDOM.isPlainObject(oPropertyValue) && oPropertyValue.regex && oPropertyValue.regex.source) { // declarative syntax var oRegExp = new RegExp(oPropertyValue.regex.source, oPropertyValue.regex.flags); bIsMatching = oRegExp.test(vCurrentPropertyValue); } else { bIsMatching = vCurrentPropertyValue === oPropertyValue; } if (!bIsMatching) { oLogger.debug("Control '" + oControl + "' property '" + sPropertyName + "' has value '" + vCurrentPropertyValue + "' but should have value '" + oPropertyValue + "'"); return false; } }); return bIsMatching; }; }; }, /* bExport= */ true);