Пример #1
0
    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]);
    }
Пример #2
0
 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);
     }
 }