Untitled

 avatar
unknown
plain_text
a year ago
17 kB
6
Indexable
function extractRemoteMessage(data, result, index, retryCount) {
	middleware.notifyUser('Fetching screen data');
	let asrLat = "";
	let nmtLat = "";
	return new Promise((resolve, reject) => {
		let rs = "";
		try {
			rs = result
				.split("INTERPRETER :")[1]
				.split("INSTRUMENTATION_STATUS_CODE:")[0]
				.replace("]", "");
		} catch (error) {
			Log.debug(TAG, "Fetch text was empty " + error);
			rs = "";
		}
		let excel_obj = {};
		let nfrDetails = {};
		let tc = index + 1;
		var asr = "";
		var translation = "";
		let wordCount = 0, wordsFailed = 0, wordRecognitionRate = 0, testCaseResult = 0, wordsHighlight = "", remarks = "", triageSummary = "";
		var expectedTranslation = "", autoDetectLanguage = "", autoDetectLanguageScore = "", similarityScore = "";
		if (rs.includes("::")) {
			if (rs.split("::").length > 1) {
				asr = rs.split("::")[1].trim();
				translation = rs.split("::")[0].trim();
			}
			if (rs.split("::").length == 1) {
				translation = rs.split("::")[0].trim();
			}
			if (config.retry == "TRUE" &&
				retryCount <= parseInt(config.retryCount) &&
				(asr == "" ||
					!helper.checkASR(data.conversation, asr))) {
				console.log("RETRY " + retryCount);
				resolve("RETRY");
			} else {
				//for nfr info
				try {
					Log.debug(TAG, 'Getting latency info from this file ');
					logmonitor.stop_log_monitor().then((logfilePath) => {
						Log.debug(TAG, 'Getting latency info from this file ' + logfilePath);
						//ASR
						nfr.calculateLatency(logfilePath, keyStrings.asr_start_log, keyStrings.asr_end_log, "ASR").then((asrLatency) => {
							Log.debug(TAG, "ASR -----------  " + asrLatency);
							asrLat = asrLatency;
							nfr.calculateLatency(logfilePath, keyStrings.int_nmt_start_log, keyStrings.int_nmt_end_log, "NMT").then((lastOccurrence) => {
								Log.debug(TAG, "NMT ----------  " + lastOccurrence);
								nmtLat = lastOccurrence;
								nfr.getMemInfo(data.conversation, config.testDeviceLanguage).then((memObj) => {
									memObj.asr_latency = asrLat;
									memObj.nmt_latency = nmtLat;
									nfrDetails = { ...memObj };
									Log.debug(TAG, "NFRrrrrrrrrrrrrrrrrrrrrrrrrrrr " + JSON.stringify(memObj))
									let data_test = data.conversation + "::" + memObj.native_heap_size + "::" + memObj.native_heap_alloc + "::" + memObj.dalvik_heap_size + "::" + memObj.dalvik_heap_alloc + "::" + asrLat + "::" + nmtLat + "::" + memObj.battery + "::" + memObj.thermal + "\n";
									Log.debug(TAG, "MEMORY INFO==========" + data_test);
									fs1.appendFile(
										path.join(outputPath, memory_report_name),
										data_test
									);

									let input_formated = compare_util.get_formated_data(data.conversation);
									let asr_formated = compare_util.get_formated_data(asr);
									let [insertedCount, deletedCount, replacedCount, insertedArray, deletedArray, replacedArray, wordsHighlight, triageCategories] = compare_util.get_comparison(input_formated, asr_formated, helper.isCharBased(config.testDeviceLanguage));
									wordCount = data.conversation.split(" ").length;
									wordsFailed = deletedCount + replacedCount;
									if (wordsFailed > 0)
										asrFailCases++;
									else
										asrPassCases++;
									wordRecognitionRate = (((wordCount - wordsFailed) / wordCount) * 100).toFixed(2);
									commonVariable.setWrr(wordRecognitionRate);
									testCaseResult = (wordsFailed + insertedCount) === 0 ? 1 : 0;
									commonVariable.setSrr(testCaseResult * 100);
									if (insertedArray.length > 0)
										remarks += "\nInserted -> " + insertedArray.join(" | ");
									if (deletedArray.length > 0)
										remarks += "\nDeleted -> " + deletedArray.join(" | ");
									if (replacedArray.length > 0)
										remarks += "\nReplaced -> " + replacedArray.join(" | ");
									remarks = remarks.trim();
									if (remarks.length == 0)
										remarks = "NA";
									triageSummary = triageCategories.join(" | ");
									translate.detect_language(translation).then((res) => {
										autoDetectLanguage = res.detected_lang;
										autoDetectLanguageScore = res.lang_score;
										let fromLang = config.testDeviceLanguage.substring(0, 2).toLowerCase();
										let toLang = config.supportDeviceLanguage.substring(0, 2).toLowerCase();

										/**
										* This function translates the given ASR text into the specified language using either the Native or Google translation API.
										* @param {string} asr - The ASR text to be translated.
										* @param {string} lang - The language code to translate the ASR text into.
										* @param {string} translationOption - The translation API to use, either "Native" or "Google".
										* @return {Promise} - A promise that resolves when the translation is complete, or rejects if there is an error.
										*/
										const translationPromise = new Promise((resolve, reject) => {
											if (translationOption == "Libre") {
												Log.debug(TAG, "Inside Libre Translate")
												translate.get_translate(asr, toLang).then((res) => {
													Log.debug(TAG, "Expected translation from AI Model : " + res);
													resolve(res);
												}).catch(reject);
											} else if (translationOption == "Google") {
												Log.debug(TAG, "Inside Google Translate");
												let source_language, target_language;
												if(fromLang == "zh") {
													source_language = "zh-CN"
												} else {
													source_language = fromLang;
												}
												if(toLang == "zh"){
													target_language = "zh-CN"
												} else {
													target_language = toLang;
												}
												translate.googleTranslate(asr,source_language,target_language).then((res) => {
													Log.debug(TAG, "Expected translation from AI Model : " + res.data);
													resolve(res.data);
												}).catch(reject);
											} else {
												reject(new Error("Invalid translation option"));
											}
										});

										translationPromise.then((res) => {
											expectedTranslation = res;
											similarCheck.get_similarity(expectedTranslation, translation).then((res) => {
												if (res == "NA") {
													similarityScore = "NA";
												} else {
													similarityScore = (res * 100).toFixed(2);
													if (similarityScore > 90)
														nmtHighCases++;
													else if (similarityScore > 30)
														nmtMidCases++;
													else
														nmtLowCases++;
												}
												excel_obj = {
													tcno: data.TC_NO,
													input: data.conversation,
													wordCount: wordCount,
													asr: asr,
													wordsHighlight: wordsHighlight,
													wordsFailed: wordsFailed,
													wordRecognitionRate: wordRecognitionRate,
													testCaseResult: testCaseResult,
													remarks: remarks,
													triageSummary: triageSummary,
													translation: translation,
													expectedTranslation: expectedTranslation,
													autoDetectLanguage: autoDetectLanguage,
													autoDetectLanguageScore: autoDetectLanguageScore,
													similarityScore: similarityScore,
													...nfrDetails
												};
												let intermediate_result =
													"\n" +
													data.TC_NO +
													"::" +
													data.conversation +
													"::" +
													wordCount +
													"::" +
													asr +
													"::" +
													wordsHighlight +
													"::" +
													wordsFailed +
													"::" +
													wordRecognitionRate +
													"::" +
													remarks +
													"::" +
													triageSummary +
													"::" +
													translation +
													"::" +
													expectedTranslation +
													"::" +
													autoDetectLanguage +
													"::" +
													autoDetectLanguageScore +
													"::" +
													similarityScore;
												Log.debug(TAG, "RESULT>>>>>>>>>>>>>>>>>>>>>>>> " + intermediate_result);
												fs1.appendFile(
													path.join(outputPath, intermediate_report_name),
													intermediate_result
												);

												excel_obj.testType = 'Interpreter';
												result_table.insert_new_row();
												result_table.update_table_results(excel_obj);
												jsonFile.push(excel_obj);
												fs.writeFileSync(path.join(__dirname, '..', 'test_data', 'output', 'out1.json'), JSON.stringify(jsonFile, null, 2));
												// excel_obj.totalCount = totalTestCases;
												front_end_data_updater.update_summary_table_gui(excel_obj, totalTestCases);
												front_end_data_updater.update_execution_count_gui(tc, totalTestCases);
												excelObj.push(excel_obj);
												Log.debug(TAG, "Final excel object is " + JSON.stringify(excelObj));
												Log.debug(TAG, "All details " + JSON.stringify(nfr.getNFRValuesforUI()));
												middleware.updateNfr(nfr.getNFRValuesforUI());
												resolve(excel_obj);
											}).catch((error) => {
												Log.debug(TAG, error);
											});
										}).catch((error) => {
											Log.debug(TAG, error);
										});
									}).catch((error) => {
										Log.debug(TAG, error);
									});
								});
							})
						}).catch(error => {
							Log.debug(TAG, "Error occurred " + error);
						});
					});
				} catch (error) {
					Log.debug(TAG, "Error occurred while Getting latency " + error);
				}
			}
		} else {
			try {
				Log.debug(TAG, 'Getting latency info from this file ');
				logmonitor.stop_log_monitor().then((logfilePath) => {
					Log.debug(TAG, 'Getting latency info from this file ' + logfilePath);
					//ASR
					nfr.calculateLatency(logfilePath, keyStrings.asr_start_log, keyStrings.asr_end_log, "ASR").then((asrLatency) => {
						Log.debug(TAG, "ASR -----------  " + asrLatency);
						asrLat = asrLatency;
						nfr.calculateLatency(logfilePath, keyStrings.int_nmt_start_log, keyStrings.int_nmt_end_log, "NMT").then((lastOccurrence) => {
							Log.debug(TAG, "NMT ----------  " + lastOccurrence);
							nmtLat = lastOccurrence;
							nfr.getMemInfo(asr, config.testDeviceLanguage).then((memObj) => {
								memObj.asr_latency = asrLat;
								memObj.nmt_latency = nmtLat;
								nfrDetails = { ...memObj };
								Log.debug(TAG, "NFRrrrrrrrrrrrrrrrrrrrrrrrrrrr " + JSON.stringify(memObj))
								let data_test = data.conversation + "::" + memObj.native_heap_size + "::" + memObj.native_heap_alloc + "::" + memObj.dalvik_heap_size + "::" + memObj.dalvik_heap_alloc + "::" + asrLat + "::" + nmtLat + "::" + memObj.battery + "::" + memObj.thermal + "\n";
								Log.debug(TAG, "MEMORY INFO==========" + data_test);
								fs1.appendFile(
									path.join(outputPath, memory_report_name),
									data_test
								);

								excel_obj = {
									tcno: data.TC_NO,
									input: data.conversation,
									wordCount: wordCount,
									asr: asr,
									wordsHighlight: wordsHighlight,
									wordsFailed: wordsFailed,
									wordRecognitionRate: wordRecognitionRate,
									testCaseResult: testCaseResult,
									remarks: remarks,
									triageSummary: triageSummary,
									translation: translation,
									expectedTranslation: expectedTranslation,
									autoDetectLanguage: autoDetectLanguage,
									autoDetectLanguageScore: autoDetectLanguageScore,
									similarityScore: similarityScore,
									...nfrDetails
								};
								let intermediate_result =
									"\n" +
									data.TC_NO +
									"::" +
									data.conversation +
									"::" +
									wordCount +
									"::" +
									asr +
									"::" +
									wordsHighlight +
									"::" +
									wordsFailed +
									"::" +
									wordRecognitionRate +
									"::" +
									remarks +
									"::" +
									triageSummary +
									"::" +
									translation +
									"::" +
									expectedTranslation +
									"::" +
									autoDetectLanguage +
									"::" +
									autoDetectLanguageScore +
									"::" +
									similarityScore;
								Log.debug(TAG, "RESULT>>>>>>>>>>>>>>>>>>>>>>>> " + intermediate_result);

								fs1.appendFile(
									path.join(outputPath, intermediate_report_name),
									intermediate_result
								);
								excelObj.push(excel_obj);
								Log.debug(TAG, "Final excel object is " + JSON.stringify(excelObj));
								resolve(excel_obj);
							});
						})
					}).catch(error => {
						Log.debug(TAG, "Error occurred " + error);
					});
				});
			} catch (error) {
				Log.debug(TAG, "Error occurred while Getting latency " + error);
			}
		}
	});
}
function extractAndFetchMsg(data, index, retryCount) {
	if (index >= data.length || execution_util.get_execution_tracker() == 'STOPPED') {
		writeExcel(excelObj);
		execution_util.stop_execution(config);
		middleware.notifyUser('Execution Completed...');
		return Promise.resolve("done");
	}
	return new Promise((resolve, reject) => {
		let text = data[index].conversation;
		helper
			.createAudioFile(text, audioRepo, config.testDeviceLanguage)
			.then((dataObj) => {
				if ("error" in dataObj) {
					Log.debug(TAG, dataObj.error);
					if (dataObj.error.includes("Text given is empty") || dataObj.error.includes("Audio file is corrupted")) {
						extractRemoteMessage(data[index], "", index, retryCount).then((result) => {
							// extractAndFetchMsg(data, index + 1,1).then(resolve);
							if (result == "RETRY") {
								extractAndFetchMsg(
									data,
									index,
									retryCount + 1
								).then(resolve);
							}
							else
								extractAndFetchMsg(
									data,
									index + 1,
									1
								).then(resolve);
						});
					}
				} else {
					let m4aDuration = 2000;
					let mainCmd = `${path.join(ffplayPath, ffplayExecutable)}`;
					if (!playAudioCmd.includes("-autoexit")) {
						mainCmd = "adb";
						m4aDuration = dataObj.duration + 3000;
					}
					helper
						.execute_and_monitor_uiauto_process(
							"adb",
							testOpenInterpreter,
							false
						)
						.then(() => {
							helper
								.execute_and_monitor_uiauto_process(
									"adb",
									["-s", currentDevice, "shell", "input", "keyevent 85"],
									false
								)
								.then(() => {
									helper
										.execute_and_monitor_uiauto_process(
											"adb",
											startNstopRecording,
											false
										)
										.then(() => {
											// middleware.changeAudioImage();
											middleware.notifyUser('Audio started playing');
											middleware.displayGifInPlayer1();
											Log.debug(TAG, "Duration is " + m4aDuration);
											helper
												.execute_and_monitor_uiauto_process(
													mainCmd,
													playAudioCmd,
													false
												)
												.then(() => {
													// middleware.changeAudioImage();
													middleware.notifyUser('Completed playing audio');
													middleware.displayGifInPlayer1();
													helper.sleep(m4aDuration).then(() => {
														helper
															.execute_and_monitor_uiauto_process(
																"adb",
																[
																	"-s",
																	currentDevice,
																	"shell",
																	"input",
																	"keyevent 85",
																],
																false
															)
															.then(() => {
																helper.sleep(2000).then(() => {
																	helper
																		.execute_and_monitor_uiauto_process(
																			"adb",
																			getInterpreterText,
																			true
																		)
																		.then((fetchData) => {
																			extractRemoteMessage(
																				data[index],
																				fetchData,
																				index, retryCount
																			).then((result) => {
																				// console.log(JSON.stringify(result));
																				if (result == "RETRY") {
																					extractAndFetchMsg(
																						data,
																						index,
																						retryCount + 1
																					).then(resolve);
																				}
																				else
																					extractAndFetchMsg(
																						data,
																						index + 1,
																						1
																					).then(resolve);
																			});
																		});
																});
															});
													});
												});
										});
								});
						});
				}
			});
	});
}
Editor is loading...
Leave a Comment