public async Task ReadLineAsync_TypesCJKTextInNarrowWindow_Wraps() { // prompt takes up 2 characters, with 3 full-width characters: 2 + 2*3 = 8 var console = ConsoleStub.NewConsole(width: 8); // final character should wrap to next line. console.StubInput($"书桌上有{Enter}"); var prompt = new Prompt(console: console); var result = await prompt.ReadLineAsync(); var output = console.GetAllOutput(); Assert.Equal("书桌上有", result.Text); Assert.Equal("> ", output[1]); Assert.Equal("书", output[2]); Assert.Equal("桌", output[3]); Assert.Equal("上\n" + AnsiEscapeCodes.MoveCursorLeft(5), output[4]); Assert.Equal("有", output[5]); }
public static void Write(this IConsole console, FormattedString value) { if (!PromptConfiguration.HasUserOptedOutFromColor && value.FormatSpans.Count > 0) { var lastFormatting = ConsoleFormat.None; console.Write(AnsiEscapeCodes.Reset); foreach (var(element, formatting) in value.EnumerateTextElements()) { if (lastFormatting != formatting) { console.Write(AnsiEscapeCodes.Reset); console.Write(AnsiEscapeCodes.ToAnsiEscapeSequence(formatting)); lastFormatting = formatting; } console.Write(element); } console.Write(AnsiEscapeCodes.Reset); } else { console.Write(value.Text); } }