// Copyright (c) The Geekeey Authors // SPDX-License-Identifier: EUPL-1.2 using System.Buffers; using System.Text; using Spectre.Console.Cli; namespace Geekeey.Extensions.Process.Tests.Dummy.Commands; internal sealed class GenerateClobCommand : AsyncOutputCommand { private readonly Random _random = new(1234567); private readonly char[] _chars = Enumerable.Range(32, 94).Select(i => (char)i).ToArray(); public sealed class Settings : OutputCommandSettings { [CommandOption("--length")] public int Length { get; init; } = 100_000; [CommandOption("--lines")] public int LinesCount { get; init; } = 1; } public override async Task ExecuteAsync(CommandContext context, Settings settings) { using var tty = Terminal.Connect(); var buffer = new StringBuilder(settings.Length); for (var line = 0; line < settings.LinesCount; line++) { buffer.Clear(); for (var i = 0; i < settings.Length; i++) { buffer.Append(_chars[_random.Next(0, _chars.Length)]); } foreach (var writer in tty.GetWriters(settings.Target)) { await writer.WriteLineAsync(buffer.ToString()); } } return 0; } }