/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/cordova-testbed@0.8.0/lib/paramedic.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
const cp=require("child_process"),shell=require("shelljs"),Server=require("./LocalServer"),path=require("path"),Q=require("q"),fs=require("fs"),{logger:logger,exec:exec,execPromise:execPromise,utilities:utilities}=require("./utils"),Reporters=require("./Reporters"),ParamedicKill=require("./ParamedicKill"),AppiumRunner=require("./appium/AppiumRunner"),ParamedicLogCollector=require("./ParamedicLogCollector"),ParamediciOSPermissions=require("./ParamediciOSPermissions"),ParamedicTargetChooser=require("./ParamedicTargetChooser"),ParamedicAppUninstall=require("./ParamedicAppUninstall"),ParamedicApp=require("./ParamedicApp"),ParamedicSauceLabs=require("./ParamedicSauceLabs");require("./appium/helpers/wdHelper");const INITIAL_CONNECTION_TIMEOUT=54e4;Q.longStackSupport=!0;class ParamedicRunner{constructor(e){this.tempFolder=null,this.config=e,this.targetObj=void 0,this.paramedicSauceLabs=null,exec.setVerboseLevel(e.isVerbose())}run(){let e=!1;return this.checkConfig(),Q().then((()=>{const e=new ParamedicApp(this.config,this.storedCWD,this);return this.tempFolder=e.createTempProject(),shell.pushd(this.tempFolder.name),e.prepareProjectToRunTests()})).then((()=>{if(this.config.runMainTests()){const e=this.config.getPlatformId()===utilities.BROWSER&&this.config.shouldUseSauce();return Server.startServer(this.config.getPorts(),this.config.getExternalServerUrl(),this.config.getUseTunnel(),e)}})).then((e=>{if(this.config.runMainTests()){this.server=e,this.injectReporters(),this.subcribeForEvents();const t=this.server.getConnectionUrl(this.config.getPlatformId());this.writeMedicJson(t),logger.normal("Start running tests at "+(new Date).toLocaleTimeString())}return this.runTests()})).timeout(this.config.getTimeout(),"Timed out after waiting for "+this.config.getTimeout()+" ms.").catch((e=>{throw logger.error(e),console.log(e.stack),new Error(e)})).fin((t=>(e=t,logger.normal("Completed tests at "+(new Date).toLocaleTimeString()),this.config.shouldUseSauce()?this.paramedicSauceLabs.displaySauceDetails.apply(this.paramedicSauceLabs,[this.sauceBuildName]):"build"!==this.config.getAction()?(this.collectDeviceLogs(),this.uninstallApp().fail((()=>{})).fin((()=>{this.killEmulatorProcess()}))):Q.resolve()))).fin((()=>{this.cleanUpProject()}))}checkConfig(){if(this.config.shouldUseSauce()&&(this.paramedicSauceLabs=new ParamedicSauceLabs(this.config,this),this.paramedicSauceLabs.checkSauceRequirements.apply(this.paramedicSauceLabs)),!this.config.runMainTests()&&!this.config.runAppiumTests())throw new Error("No tests to run: both --skipAppiumTests and --skipMainTests are used");if(!["cordova","phonegap"].includes(this.config.getCli())&&!path.isAbsolute(this.config.getCli())){const e=path.resolve(this.config.getCli());this.config.setCli(e)}logger.info("cordova-paramedic: Will use the following cli: "+this.config.getCli())}setPermissions(){const e=["kTCCServiceAddressBook"];if(this.config.getPlatformId()===utilities.IOS){logger.info("cordova-paramedic: Setting required permissions.");const t=this.config.getTccDb();if(t){const i=utilities.PARAMEDIC_DEFAULT_APP_NAME;new ParamediciOSPermissions(i,t,this.targetObj).updatePermissions(e)}}}injectReporters(){const e=Reporters.getReporters(this.config.getOutputDir());["jasmineStarted","specStarted","specDone","suiteStarted","suiteDone","jasmineDone"].forEach((t=>{e.forEach((e=>{e[t]instanceof Function&&this.server.on(t,e[t].bind(e))}))}))}subcribeForEvents(){this.server.on("deviceLog",(e=>{logger.verbose("device|console."+e.type+": "+e.msg[0])})),this.server.on("deviceInfo",(e=>{logger.normal("cordova-paramedic: Device info: "+JSON.stringify(e))}))}writeMedicJson(e){logger.normal("cordova-paramedic: writing medic log url to project "+e),fs.writeFileSync(path.join("www","medic.json"),JSON.stringify({logurl:e}))}maybeRunFileTransferServer(){return Q().then((()=>{const e=this.config.getPlugins();for(let t=0;t<e.length;t++)if(e[t].indexOf("cordova-plugin-file-transfer")>=0&&!this.config.getFileTransferServer()&&!this.config.isCI())return this.server.startFileTransferServer(this.tempFolder.name)}))}runLocalTests(){let e=null;return this.config.runMainTests()||this.config.getPlatformId()===utilities.ANDROID?(logger.info("cordova-paramedic: running tests locally"),Q().then((()=>this.maybeRunFileTransferServer())).then((()=>this.getCommandForStartingTests())).then((t=>{if(this.setPermissions(),logger.normal("cordova-paramedic: running command "+t),this.config.getPlatformId()!==utilities.BROWSER)return execPromise(t);console.log("$ "+t),e=cp.exec(t,(()=>{e=null}))})).then((()=>this.config.runMainTests()?this.shouldWaitForTestResult()?Q.promise(((e,t)=>{this.waitForConnection().catch(t),this.waitForTests().then(e)})):utilities.TEST_PASSED:(logger.normal("Skipping main tests..."),utilities.TEST_PASSED))).fin((t=>e?Q.Promise((i=>{utilities.killProcess(e.pid,(()=>{i(t)}))})):t))):(logger.normal("Skipping main tests..."),Q(utilities.TEST_PASSED))}runAppiumTests(e){const t=this.config.getPlatformId();if(logger.normal("Start running Appium tests..."),"build"===this.config.getAction())return logger.normal("Skipping Appium tests: action = build ..."),Q(utilities.TEST_PASSED);if(!this.config.runAppiumTests())return logger.normal("Skipping Appium tests: not configured to run ..."),Q(utilities.TEST_PASSED);if(t!==utilities.ANDROID&&t!==utilities.IOS)return logger.warn("Unsupported platform for Appium test run: "+t),Q(utilities.TEST_PASSED);if(!(e||this.targetObj&&this.targetObj.target))throw new Error("Cannot determine local device name for Appium");logger.normal("Running Appium tests "+(e?"on Sauce Labs":"locally"));let i={platform:t,appPath:this.tempFolder.name,pluginRepos:this.config.getPlugins().map((e=>path.join(this.tempFolder.name,"plugins",path.basename(e)))),appiumDeviceName:this.targetObj&&this.targetObj.target,appiumPlatformVersion:null,screenshotPath:path.join(process.cwd(),"appium_screenshots"),output:this.config.getOutputDir(),verbose:this.config.isVerbose(),sauce:e,cli:this.config.getCli()};e&&(i.sauceAppPath="sauce-storage:"+this.paramedicSauceLabs.getAppName.apply(this.paramedicSauceLabs),i.sauceUser=this.config.getSauceUser(),i.sauceKey=this.config.getSauceKey(),i.sauceCaps=this.paramedicSauceLabs.getSauceCaps.apply(this.paramedicSauceLabs),i.sauceCaps.name+="_Appium");const s=new AppiumRunner(i);return s.options.testPaths&&0===s.options.testPaths.length?(logger.warn("Couldn't find Appium tests, skipping..."),Q(utilities.TEST_PASSED)):Q().then((()=>s.prepareApp())).then((()=>{if(e)return this.paramedicSauceLabs.packageApp.apply(this.paramedicSauceLabs).then((()=>this.paramedicSauceLabs.uploadApp.apply(this.paramedicSauceLabs)))})).then((()=>s.runTests(e)))}runTests(){let e=!1;return this.config.shouldUseSauce()?this.paramedicSauceLabs.runSauceTests.apply(this.paramedicSauceLabs).then((t=>{e=t})).then((()=>this.runAppiumTests(!0))).then((t=>e===utilities.TEST_PASSED&&t===utilities.TEST_PASSED)):this.runLocalTests().then((t=>{e=t})).then((()=>this.runAppiumTests())).then((t=>e===utilities.TEST_PASSED&&t===utilities.TEST_PASSED))}waitForTests(){return logger.info("cordova-paramedic: waiting for test results"),Q.promise(((e,t)=>{setTimeout((()=>{this.server.isDeviceConnected()||t(new Error("waitForTests: Seems like device not connected to local server in 540 secs"))}),54e4),this.server.on("jasmineDone",(t=>{logger.info("cordova-paramedic: tests have been completed"),e(0===t.specResults.specFailed)})),this.server.on("disconnect",(()=>{t(new Error("Device is disconnected before passing the tests"))}))}))}getCommandForStartingTests(){let e=this.config.getCli()+" "+this.config.getAction()+" "+this.config.getPlatformId()+utilities.PARAMEDIC_COMMON_CLI_ARGS;const t=e=>(this.config.getArgs()&&(e+=" "+this.config.getArgs()),e);if(this.config.getPlatformId()===utilities.BROWSER)return t(e);const i=new ParamedicTargetChooser(this.tempFolder.name,this.config);return"build"===this.config.getAction()||this.config.getPlatformId()===utilities.WINDOWS&&this.config.getArgs().indexOf("appx=8.1-phone")<0?Q(t(e)):Q().then((()=>i.chooseTarget(!0,this.config.getTarget()))).then((i=>(this.targetObj=i,e+=` --target "${this.targetObj.target}"`,this.config.getPlatformId()===utilities.IOS&&(e+=" --emulator"),t(e))))}shouldWaitForTestResult(){const e=this.config.getAction();return 0===e.indexOf("run")||0===e.indexOf("emulate")}waitForConnection(){return Q.promise(((e,t)=>{setTimeout((()=>{this.server.isDeviceConnected()?e():t(new Error("waitForConnection: Seems like device not connected to local server in 540 secs"))}),54e4)}))}cleanUpProject(){this.server&&this.server.cleanUp(),this.config.shouldCleanUpAfterRun()&&(logger.info("cordova-paramedic: Deleting the application: "+this.tempFolder.name),shell.popd(),shell.rm("-rf",this.tempFolder.name))}killEmulatorProcess(){if(this.config.shouldCleanUpAfterRun()){logger.info("cordova-paramedic: Killing the emulator process.");new ParamedicKill(this.config.getPlatformId()).kill()}}collectDeviceLogs(){logger.info("Collecting logs for the devices.");const e=this.config.getOutputDir()?this.config.getOutputDir():this.tempFolder.name,t=this.config.getLogMins()?this.config.getLogMins():utilities.DEFAULT_LOG_TIME;new ParamedicLogCollector(this.config.getPlatformId(),this.tempFolder.name,e,this.targetObj).collectLogs(t)}uninstallApp(){logger.info("Uninstalling the app.");return new ParamedicAppUninstall(this.tempFolder.name,this.config.getPlatformId()).uninstallApp(this.targetObj,utilities.PARAMEDIC_DEFAULT_APP_NAME)}}let storedCWD=null;exports.run=function(e){storedCWD=storedCWD||process.cwd();const t=new ParamedicRunner(e,null);return t.storedCWD=storedCWD,t.run()};
//# sourceMappingURL=/sm/dd6e351fdb25fb56270679ffe3a83b0fdff752c7b618c66d79f15e2e15acfa34.map