Fix line ending and cache some reflection operations (#4709)

This commit is contained in:
Dongbo Wang
2025-04-17 12:06:56 -07:00
committed by GitHub
parent b1f8c8979f
commit 7b840fdef0
+18 -13
View File
@@ -538,6 +538,8 @@ namespace Test
private TestConsole _console;
private MockedMethods _mockedMethods;
private bool _oneTimeInitCompleted;
private object _psrlInstance;
private FieldInfo _psrlConsole, _psrlMockableMethods;
private static string MakeCombinedColor(ConsoleColor fg, ConsoleColor bg)
=> VTColorUtils.AsEscapeSequence(fg) + VTColorUtils.AsEscapeSequence(bg, isBackground: true);
@@ -554,14 +556,17 @@ namespace Test
_console = console ?? new TestConsole(_);
_mockedMethods = new MockedMethods();
var instance = (PSConsoleReadLine)typeof(PSConsoleReadLine)
.GetField("_singleton", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
typeof(PSConsoleReadLine)
.GetField("_mockableMethods", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(instance, _mockedMethods);
typeof(PSConsoleReadLine)
.GetField("_console", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(instance, _console);
if (_psrlInstance is null)
{
Type psrlType = typeof(PSConsoleReadLine);
_psrlInstance = psrlType.GetField("_singleton", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
_psrlConsole = psrlType.GetField("_console", BindingFlags.Instance | BindingFlags.NonPublic);
_psrlMockableMethods = psrlType.GetField("_mockableMethods", BindingFlags.Instance | BindingFlags.NonPublic);
}
_psrlConsole.SetValue(_psrlInstance, _console);
_psrlMockableMethods.SetValue(_psrlInstance, _mockedMethods);
_emptyLine ??= new string(' ', _console.BufferWidth);
@@ -628,11 +633,11 @@ namespace Test
var colorOptions = new SetPSReadLineOption {Colors = colors};
PSConsoleReadLine.SetOptions(colorOptions);
if (!_oneTimeInitCompleted)
{
typeof(PSConsoleReadLine).GetMethod("Initialize", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(instance, new object[] { /* Runspace */ null, /* EngineIntrinsics */ null, });
_oneTimeInitCompleted = true;
if (!_oneTimeInitCompleted)
{
typeof(PSConsoleReadLine).GetMethod("Initialize", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(_psrlInstance, new object[] { /* Runspace */ null, /* EngineIntrinsics */ null, });
_oneTimeInitCompleted = true;
}
}
}