UNPKG

@openui5/sap.ui.core

Version:

OpenUI5 Core Library sap.ui.core

112 lines (95 loc) 3.42 kB
/*! * OpenUI5 * (c) Copyright 2026 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ /* global QUnit */ sap.ui.define(["sap/ui/core/Lib"], function(Library) { "use strict"; /** * @namespace * @private * @ui5-restricted SAPUI5 Distribution Layer Libraries */ var _EnforceSemanticRendering = { /** * @param {object} mLibInfo Info object containing the library name and an array with excludes * @param {string} mLibInfo.library The library name in dot notation, e.g. "sap.ui.core" * @param {string[]} mLibInfo.exlcudes An array of control names in dot notation, which are NOT migrated and should be excluded from the test * @returns {Promise<undefined>} Returns resovled Promise after all tests are executed * * @private * @ui5-restricted SAPUI5 Distribution Layer Libraries */ run : function(mLibInfo) { var sLib = mLibInfo.library; var aExcludes = mLibInfo.excludes || []; return new Promise(function(res, rej) { Library.load(sLib).then(function(library) { var aControls = (library && library.controls) || []; var aPromises = []; aControls.forEach(function(sClass) { // Generate QUnit test for all controls aPromises.push(new Promise(function(res, rej) { var oInfo = { control: sClass }; var sControlClass = sClass.replace(/\./g, "/"); sap.ui.require([sControlClass], function(ControlClass) { try { var oRenderer = ControlClass.getMetadata().getRenderer(); if (oRenderer) { oInfo.version = Object.hasOwn(oRenderer, "apiVersion") ? oRenderer.apiVersion : 1; if (aExcludes.includes(sClass)) { if (oInfo.version == 1) { oInfo.skip = true; } else { oInfo.wrongExclude = true; oInfo.description = "defined in the excludes"; } } } else { oInfo.description = "No Renderer Class available"; oInfo.skip = true; } } catch (e) { oInfo.description = "No Renderer Class available"; oInfo.skip = true; } res(oInfo); }, function() { oInfo.description = "Control Class could not be loaded"; if (aExcludes.includes(sClass)) { oInfo.skip = true; } // else don't skip if control class is not maintained in excludes res(oInfo); }); })); }); res(aPromises); }); }).then(function(aPromises) { // Add tests return new Promise(function(res, rej) { Promise.all(aPromises).then(function(aInfo) { QUnit.module("EnforceSemanticRendering Tests: " + mLibInfo.library); QUnit.test("library controls loaded", function(assert) { assert.ok(aInfo, aInfo.length + " controls loaded"); }); aInfo.forEach(function(oInfo) { QUnit[oInfo.skip ? "skip" : "test"](oInfo.control + " " + (oInfo.description || ""), function(assert) { if (oInfo.wrongExclude) { assert.ok(false, "The control '" + oInfo.control + "' is maintained in the exclude configuration, but its renderer is configured with apiVersion 2."); } else { assert.notEqual(oInfo.version, 1, "Semantic Rendering enabled."); } }); }); res(); }); }); }); } }; return _EnforceSemanticRendering; });