init commit

This commit is contained in:
iFlip721
2025-04-16 09:55:57 -04:00
commit a03209dc9e
935 changed files with 177492 additions and 0 deletions

View File

@@ -0,0 +1,159 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/*
This is code that handles communicating with the published app. Half of this code should live within the published app.
*/
var testEnginePluginName = "TestEnginePlugin";
var isPluginRegistered = false;
var callbackDictionary = {};
class TestEnginePlugin {
contructor() {
}
processResult(commandInfo) {
if (commandInfo.args[1].successful) {
callbackDictionary[commandInfo.args[0]].complete(commandInfo.args[1].message);
} else {
callbackDictionary[commandInfo.args[0]].error(commandInfo.args[1].message);
}
delete callbackDictionary[commandInfo.args[0]];
}
}
function executePublishedAppScript(scriptToExecute) {
var callbackId = Core.Utility.generate128BitUUID();
var completeablePromise = Core.Promise.createCompletablePromise();
callbackDictionary[callbackId] = completeablePromise;
AppMagic.Runtime.WebPlayerRuntime._appHostManager._apiHandler.invokeScriptAsync(`
try {
var result = ${scriptToExecute};
Cordova.exec(function() {}, function() {}, '${testEnginePluginName}', 'processResult', ['${callbackId}', {successful: true, message: result}])
}
catch(err) {
Cordova.exec(function() {}, function() {}, '${testEnginePluginName}', 'processResult', ['${callbackId}', {successful: false, message: err}])
}`)
return completeablePromise.promise;
}
function getOngoingActionsInPublishedApp() {
return executePublishedAppScript("AppMagic.AuthoringTool.Runtime.existsOngoingAsync()");
}
function getControlObjectModel () {
return executePublishedAppScript("buildControlObjectModel()");
}
function getPropertyValueFromPublishedApp(itemPath) {
var script = `getPropertyValueFromControl(${JSON.stringify(itemPath)})`;
return executePublishedAppScript(script);
}
function selectControl(itemPath) {
var script = `selectControl(${JSON.stringify(itemPath)})`;
return executePublishedAppScript(script);
}
function interactWithControl(itemPath, value) {
var script = "";
if (isArray(Object.values(value))) {
var valuesJsonArr = [];
var values = Object.values(value);
for (var index in values) {
valuesJsonArr[`${index}`] = `${JSON.stringify(values[index])}`;
}
var valueJson = `{"${itemPath.propertyName}":${valuesJsonArr}}`;
script = `interactWithControl(${JSON.stringify(itemPath)}, ${valueJson})`;
} else {
var valueJson = `{"${itemPath.propertyName}":${value}}`;
script = `interactWithControl(${JSON.stringify(itemPath)}, ${valueJson})`;
}
return executePublishedAppScript(script);
}
function setPropertyValueForControl(itemPath, value) {
if (typeof value == "object") {
return interactWithControl(itemPath, value);
} else if (typeof value == "string") {
value = JSON.stringify(value);
}
var script = `setPropertyValueForControl(${JSON.stringify(itemPath)}, ${value})`;
return executePublishedAppScript(script);
}
function fetchArrayItemCount(itemPath) {
var script = `fetchArrayItemCount(${JSON.stringify(itemPath)})`;
return executePublishedAppScript(script);
}
function isArray(obj) {
return obj.constructor === Array;
}
/*
These are the functions that will be called by the Test Engine
*/
var PowerAppsTestEngine = {
getAppStatus: function () {
if (typeof AppMagic === "undefined" || typeof AppMagic.Runtime === "undefined"
|| typeof AppMagic.Runtime.WebPlayerRuntime === "undefined" || typeof AppMagic.Runtime.WebPlayerRuntime._appHostManager === "undefined") {
return "Loading";
}
if (AppMagic.Runtime.WebPlayerRuntime._appHostManager._appIsLoading) {
return "Loading";
}
else {
// Determine interaction required and error states
// App is loaded, register plugin
// When this is ported into PowerApps, need to do the proper plugin registration
if (!isPluginRegistered) {
AppMagic.Runtime.WebPlayerRuntime._appHostManager._apiHandler.registerHandler(testEnginePluginName, new TestEnginePlugin());
}
return getOngoingActionsInPublishedApp().then((ongoingAppActionRunning) => {
if (ongoingAppActionRunning) {
return "Busy";
} else {
return "Idle";
}
});
}
},
buildObjectModel: function () {
return getControlObjectModel().then((controlObjectModel) => {
return {
controls: controlObjectModel
};
})
},
getPropertyValue: function (itemPath) {
return getPropertyValueFromPublishedApp(itemPath)
},
select: function (itemPath) {
return selectControl(itemPath)
},
setPropertyValue: function (itemPath, value) {
return setPropertyValueForControl(itemPath, value);
},
getItemCount: function (itemPath) {
return fetchArrayItemCount(itemPath);
},
debugInfo: {
appId: Core.Telemetry?.Log?.getAppId(),
appVersion: Core.Telemetry?.Log?.getAppVersion(),
environmentId: Core.Telemetry?.Log?.getEnvironmentId(),
sessionId: Core.Telemetry?.Log?._sessionId,
}
}