From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001 From: giy <giy@omp-system.ru> Date: Fri, 02 Sep 2022 14:16:56 +0300 Subject: [PATCH] Обновление до версии 2.9.0 --- QtVsTest/Macro.cs | 127 +++++++++++++++++++++++++---------------- 1 files changed, 77 insertions(+), 50 deletions(-) diff --git a/QtVsTest/Macro.cs b/QtVsTest/Macro.cs index 1c1004d..e4477e8 100644 --- a/QtVsTest/Macro.cs +++ b/QtVsTest/Macro.cs @@ -82,7 +82,7 @@ /// <summary> /// Name of reusable macro /// </summary> - public string Name { get; private set; } + private string Name { get; set; } /// <summary> /// True if macro compilation was successful @@ -104,8 +104,9 @@ /// </summary> public bool QuitWhenDone { get; private set; } - AsyncPackage Package { get; set; } - EnvDTE80.DTE2 Dte { get; set; } + AsyncPackage Package { get; } + EnvDTE80.DTE2 Dte { get; } + IntPtr MainWindowHWnd { get; } AutomationElement UiRoot => AutomationElement.RootElement; @@ -115,65 +116,55 @@ get { if (_UiVsRoot == null) -#if VS2022 - _UiVsRoot = AutomationElement.FromHandle(Dte.MainWindow.HWnd); -#else - _UiVsRoot = AutomationElement.FromHandle(new IntPtr(Dte.MainWindow.HWnd)); -#endif + _UiVsRoot = AutomationElement.FromHandle(MainWindowHWnd); return _UiVsRoot; } } - JoinableTaskFactory JoinableTaskFactory { get; set; } - CancellationToken ServerLoop { get; set; } + JoinableTaskFactory JoinableTaskFactory { get; } + CancellationToken ServerLoop { get; } string Message { get; set; } static MacroParser Parser { get; set; } MacroLines MacroLines { get; set; } - List<string> SelectedAssemblies { get { return _SelectedAssemblies; } } - List<string> _SelectedAssemblies = - new List<string> - { - "QtVsTest", - "System.Core", - }; + private List<string> SelectedAssemblies { get; } = new List<string> + { + typeof(Macro).Assembly.FullName, + typeof(EnvDTE.DTE).Assembly.FullName, + typeof(AutomationElement).Assembly.FullName, + "System.Core", + }; IEnumerable<string> RefAssemblies { get; set; } - List<string> Namespaces { get { return _Namespaces; } } - List<string> _Namespaces = - new List<string> - { - "System", - "System.Linq", - "System.Reflection", - "Task = System.Threading.Tasks.Task", - "System.Windows.Automation", - "EnvDTE", - "EnvDTE80", - }; + private List<string> Namespaces { get; } = new List<string> + { + "System", + "System.Linq", + "System.Reflection", + "Task = System.Threading.Tasks.Task", + "System.Windows.Automation", + "EnvDTE", + "EnvDTE80", + }; - Dictionary<string, VSServiceRef> ServiceRefs { get { return _ServiceRefs; } } - Dictionary<string, VSServiceRef> _ServiceRefs = - new Dictionary<string, VSServiceRef> + private Dictionary<string, VSServiceRef> ServiceRefs { get; } = new Dictionary<string, VSServiceRef> + { { - { - "Dte", new VSServiceRef + "Dte", new VSServiceRef { Name = "Dte", Interface = "DTE2", Type = "DTE" } - }, - }; + }, + }; - Dictionary<string, GlobalVar> GlobalVars { get { return _GlobalVars; } } - Dictionary<string, GlobalVar> _GlobalVars = - new Dictionary<string, GlobalVar> + private Dictionary<string, GlobalVar> GlobalVars { get; } = new Dictionary<string, GlobalVar> + { { - { - "Result", new GlobalVar + "Result", new GlobalVar { Type = "string", Name = "Result", InitialValueExpr = "string.Empty" } - }, - }; + }, + }; string CSharpMethodCode { get; set; } string CSharpClassCode { get; set; } @@ -187,10 +178,10 @@ const BindingFlags PUBLIC_STATIC = BindingFlags.Public | BindingFlags.Static; const StringComparison IGNORE_CASE = StringComparison.InvariantCultureIgnoreCase; - static ConcurrentDictionary<string, Macro> Macros + static readonly ConcurrentDictionary<string, Macro> Macros = new ConcurrentDictionary<string, Macro>(); - static ConcurrentDictionary<string, object> Globals + static readonly ConcurrentDictionary<string, object> Globals = new ConcurrentDictionary<string, object>(); /// <summary> @@ -202,6 +193,7 @@ public Macro( AsyncPackage package, EnvDTE80.DTE2 dte, + IntPtr mainWindowHWnd, JoinableTaskFactory joinableTaskFactory, CancellationToken serverLoop) { @@ -209,6 +201,7 @@ JoinableTaskFactory = joinableTaskFactory; ServerLoop = serverLoop; Dte = dte; + MainWindowHWnd = mainWindowHWnd; ErrorMsg("Uninitialized"); } @@ -510,6 +503,8 @@ return false; break; } + + csharp.AppendLine(); return true; } @@ -615,6 +610,38 @@ csharp.AppendFormat(@" await WaitExpr({0}, () => UiContext = {1});", timeout, context); + + } else if (s.Args[0].Equals("find", IGNORE_CASE)) { + //# ui find [all] [_var_name_] [_timeout_] => <_scope_>, <_condition_> + + var args = new Queue<string>(s.Args.Skip(1)); + + bool findAll = false; + if (args.Any() && args.Peek().Equals("all", IGNORE_CASE)) { + findAll = true; + args.Dequeue(); + } + string funcName = findAll ? "FindAll" : "FindFirst"; + string varType = findAll ? "AutomationElementCollection" : "AutomationElement"; + + string varName = null; + if (args.Any() && !char.IsDigit(args.Peek()[0])) + varName = args.Dequeue(); + if (findAll && string.IsNullOrEmpty(varName)) + return ErrorMsg("Invalid #ui statement"); + + int timeout = 3000; + if (args.Any() && char.IsDigit(args.Peek()[0])) + timeout = int.Parse(args.Dequeue()); + + if (varName == null) { + varName = "UiContext"; + } else { + csharp.Append($@" + {varType} {varName} = null;"); + } + csharp.Append($@" + await WaitExpr({timeout}, () => {varName} = UiContext.{funcName}({s.Code}));"); } else if (s.Args[0].Equals("pattern", IGNORE_CASE)) { //# ui pattern <_TypeName_> <_VarName_> [ => _string_ [, _string_, ... ] ] @@ -790,7 +817,9 @@ File.Delete(macroDllPath); return ErrorMsg(string.Join("\r\n", CompilerResults.Errors.Cast<CompilerError>() - .Select(x => x.ErrorText))); + .Select(x => $"{x.Line}: {x.ErrorText}") + .Append(CSharpClassCode) + .Union(RefAssemblies))); } MacroAssembly = AppDomain.CurrentDomain.Load(File.ReadAllBytes(macroDllPath)); @@ -927,8 +956,7 @@ foreach (var globalVar in GlobalVars.Values) { string varName = globalVar.Name; Type varType = globalVar.FieldInfo.FieldType; - object value; - if (Globals.TryGetValue(varName, out value)) { + if (Globals.TryGetValue(varName, out object value)) { Type valueType = value.GetType(); if (!varType.IsAssignableFrom(valueType)) { throw new InvalidCastException(string.Format( @@ -968,8 +996,7 @@ static Macro GetMacro(string name) { - Macro macro; - if (!Macros.TryGetValue(name, out macro)) + if (!Macros.TryGetValue(name, out Macro macro)) return null; return macro; } -- Gitblit v1.9.1