public static string GenerateScriptMethodTest(DeviceConfig deviceConfigAndroid, DeviceConfig deviceConfigIOS, TpLocatorEstrategy locatorEstrategy, XPathSelector.XPathType individualExpressionType, bool staticMethod, string appiumDriverName, out string functionCall, out string appiumConfig)
        {
            functionCall = "";
            appiumConfig = "";

            #region validation
            string msg = "";

            if (!Support.MyNode.CheckDeviceConfigCompatibility(deviceConfigAndroid, deviceConfigIOS, out msg))
            {
                return(msg);
            }

            #endregion


            StringBuilder scriptCallFunction = new StringBuilder();
            List <string> functionList       = new List <string>();
            List <string> scriptList         = new List <string>();
            StringBuilder appiumConfigList   = new StringBuilder();

            string elementName = "e";

            int qtdEvents = deviceConfigAndroid.Events.Count;
            for (int i = 0; i < qtdEvents; i++)
            {
                MyNode nAndroid = deviceConfigAndroid.Events[i];
                MyNode nIOS     = deviceConfigIOS.Events[i];


                string scriptFunction = GenerateScriptMethodTest(nAndroid, nIOS, locatorEstrategy, individualExpressionType, staticMethod, elementName, appiumDriverName, out functionCall);

                if (!functionList.Contains(functionCall))
                {
                    functionList.Add(functionCall);
                    scriptList.Add(scriptFunction);
                    scriptCallFunction.AppendLine(_tab3 + functionCall);
                }
            }


            #region appium config


            appiumConfigList.AppendLine();

            if (!EnabledEvaluation)
            {
                appiumConfigList.AppendLine(_tab3 + "_locator = new LocatorStrategy(_driver, null);");
                appiumConfigList.AppendLine();
            }
            else
            {
                #region Evaluation

                string strategy = locatorEstrategy.ToString();
                if (locatorEstrategy == TpLocatorEstrategy.IndividualExpression)
                {
                    strategy += individualExpressionType.ToString();
                }

                appiumConfigList.AppendLine(_tab3 + "Exec.Create(\"" + deviceConfigAndroid.AppName + "\", ProjectConfig.OutputDeviceID, \"" + deviceConfigAndroid.TestCaseName + "\", " + deviceConfigAndroid.Events.Count + ",\"" + strategy + "\", ProjectConfig.OutputPath);");
                appiumConfigList.AppendLine(_tab3 + "Exec.Instance.Start();");
                #endregion
                appiumConfigList.AppendLine();
                appiumConfigList.AppendLine(_tab3 + "_locator = new LocatorStrategy(_driver, Exec.Instance);");
                appiumConfigList.AppendLine();
            }

            #endregion

            scriptCallFunction.AppendLine();
            scriptCallFunction.AppendLine(_tab3 + "Exec.Instance.EndSuccefull();");


            functionCall = scriptCallFunction.ToString();
            appiumConfig = appiumConfigList.ToString();

            return(string.Join("\n", scriptList.ToArray()));
        }
        public static string GenerateVisualStudioProjectTest(DeviceConfig deviceConfigAndroid, DeviceConfig deviceConfigIOS, TpLocatorEstrategy locatorEstrategy, XPathSelector.XPathType individualExpressionType)
        {
            string dirProjectTemplate = Path.GetDirectoryName(Application.ExecutablePath) + @"\Resources\UnitTestProjectTemplate";

            string dirOutPut = Path.GetDirectoryName(Application.ExecutablePath) + @"\output";

            if (!Directory.Exists(dirOutPut))
            {
                Directory.CreateDirectory(dirOutPut);
            }

            string output = dirOutPut + @"\UnitTestProject-" + DateTime.Now.ToString("yyyy-MM-dd HHmmss");

            if (_onlyTestClass)
            {
                output += "-TestClass";
            }

            string appTestName = deviceConfigAndroid.TestCaseName.Replace(".", "").Replace("-", "").Replace(" ", "");

            string appTest = "";

            StringBuilder script = new StringBuilder();
            string        nl     = Environment.NewLine;
            string        functionCall;
            string        appiumConfig;

            string nameSpace = appTestName;
            string className = appTestName + locatorEstrategy.ToString();

            if (locatorEstrategy == TpLocatorEstrategy.IndividualExpression)
            {
                className += individualExpressionType.ToString();
            }

            if (!_onlyTestClass)
            {
                Utils.DirectoryCopy(dirProjectTemplate, output);

                File.Move(output + @"\Properties\AssemblyInfo.txt", output + @"\Properties\AssemblyInfo.cs");
                appTest = File.ReadAllText(output + @"\AppTest.txt");
                string unitProjectTest = File.ReadAllText(output + @"\UnitTestProject.csproj");
                string projectConfig   = File.ReadAllText(output + @"\ProjectConfig.txt");
                string locatorStrategy = File.ReadAllText(output + @"\LocatorStrategy.txt");

                unitProjectTest = unitProjectTest.Replace("@AppTest", className + ".cs");

                File.WriteAllText(output + @"\ProjectConfig.cs", projectConfig);
                File.Delete(output + @"\ProjectConfig.txt");

                unitProjectTest = unitProjectTest.Replace("AppTest", appTestName);

                File.WriteAllText(output + @"\UnitTestProject.csproj", unitProjectTest);

                File.WriteAllText(output + @"\LocatorStrategy.cs", locatorStrategy);
                File.Delete(output + @"\LocatorStrategy.txt");
            }
            else
            {
                appTest = File.ReadAllText(dirProjectTemplate + @"\AppTest.txt");

                Directory.CreateDirectory(output);
            }

            script.AppendLine(ScriptGenerate.GenerateScriptMethodTest(deviceConfigAndroid, deviceConfigIOS, locatorEstrategy, individualExpressionType, false, "_driver", out functionCall, out appiumConfig));



            appTest = appTest.Replace("@Namespace", nameSpace);
            appTest = appTest.Replace("@ClassName", className);
            appTest = appTest.Replace("/*REPLACE: appium config*/", appiumConfig);
            appTest = appTest.Replace("/*REPLACE: call sequence*/", functionCall);
            appTest = appTest.Replace("/*REPLACE: script*/", script.ToString());

            File.WriteAllText(output + @"\" + className + ".cs", appTest);
            File.Delete(output + @"\AppTest.txt");

            return(output);
        }