function runManifestLoadingTests(sDescription, fnComponentFactory) {
		QUnit.module("Component Metadata async loading of manifests: " + sDescription, {
			before: function() {
				return new Promise(function(resolve, reject) {
					sap.ui.require([
						"sap/ui/core/mvc/XMLView"
					], function(XMLView) {
						resolve();
					}, reject);
				});
			}
		});

		/**
		 * component.json is the deprecated predecessor to the manifest.json
		 * @deprecated
		 */
		QUnit.test("Async loading of manifests with component.json", function(assert) {
			return fnComponentFactory("./testdata/inherit/manifest.json", "testdata.inherit").then(function(oComponent) {
				assert.ok(oComponent instanceof Component, "Component has been created.");

				assert.equal(
					oComponent.getManifest().name,
					"testdata.inherit.Component",
					"Check name of the the main component"
				);
				assert.equal(
					oComponent.getMetadata().getParent().getName(),
					"testdata.inherit.parent.Component",
					"Check name of the inherited parent component"
				);
				oComponent.destroy();
			});
		});

		QUnit.test("Async loading of manifests", function(assert) {
			return fnComponentFactory("./testdata/inheritAsync/manifest.json", "testdata.inheritAsync").then(function(oComponent) {
				assert.ok(oComponent instanceof Component, "Component has been created.");

				assert.equal(
					oComponent.getManifest().name,
					"testdata.inheritAsync.Component",
					"Check name of the the main component"
				);
				assert.equal(
					oComponent.getMetadata().getParent().getName(),
					"testdata.inheritAsync.parentB.Component",
					"Check name of the inherited parent component B"
				);
				assert.equal(
					oComponent.getMetadata().getParent().getParent().getName(),
					"testdata.inheritAsync.parentA.Component",
					"Check name of the inherited parent component A"
				);
				destroyComponent(oComponent);
			});
		});

		QUnit.test("Async loading of manifests with missing manifest of parent metadata", function(assert) {
			return fnComponentFactory("./testdata/inheritAsyncError/manifest.json", "testdata.inheritAsyncError").then(function(oComponent) {
				assert.ok(oComponent instanceof Component, "Component has been created.");

				var aLogEntries = Log.getLogEntries();
				var result = aLogEntries.filter(function(oEntry){
					return oEntry.message.indexOf(
						"Failed to load component manifest from \"test-resources/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentFAIL/manifest.json\""
					) === 0;
				});
				assert.equal(result.length, 1, "Error: 'Failed to laod component manifest from...' was logged.");

				assert.equal(
					oComponent.getManifest().name,
					"testdata.inheritAsyncError.Component",
					"Check name of the the main component"
				);
				assert.equal(
					oComponent.getMetadata().getParent().getName(),
					"testdata.inheritAsyncError.parentB.Component",
					"Check name of the inherited parent component B"
				);
				assert.equal(
					oComponent.getMetadata().getParent().getParent().getName(),
					"testdata.inheritAsyncError.parentFAIL.Component",
					"Check name of the inherited parent component A"
				);
				destroyComponent(oComponent);
			});
		});
	}
@deprecated As of version 1.111 Deprecated APIs are being tested