Merge pull request 'Interactive console test runner for EpsonTest' (#1) from feature/PRI-9-interactive-console-test-runner into master

Reviewed-on: admin/inspectron_print_server#1
This commit is contained in:
2026-04-10 06:36:09 +00:00
3 changed files with 235 additions and 182 deletions

View File

@@ -1,212 +1,237 @@
using EpsonTest; using EpsonTest;
using Inspectron.Epson; using Inspectron.Epson.PrintServer.Printers.Utils.BarReceipt;
using Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe;
using Inspectron.Epson.PrintServer.Printers.Utils.FinalReceipt; using Inspectron.Epson.PrintServer.Printers.Utils.FinalReceipt;
using Inspectron.Epson.PrintServer.Printers.Utils.InvoiceReceipt; using Inspectron.Epson.PrintServer.Printers.Utils.InvoiceReceipt;
using Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt; using Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt;
using Inspectron.Epson.PrintServer.Printers.Utils.OrderItems; using Inspectron.Epson.PrintServer.Printers.Utils.OrderItems;
using System.Text.Json; using System.Text.Json;
// ============================================================================ while (true)
// FINAL RECEIPT - HTML PRINTER {
// ============================================================================ Console.Clear();
//var receipt = TestHelpers.BuildSampleFinalReceipt(true); Console.WriteLine("=== Epson Print Test Runner ===\n");
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
//var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24); var receiptType = ShowMenu("Select receipt type:", new[]
//var printCommands = converter.Convert(serializedReceipt); {
"KitchenReceipt",
"FinalReceipt",
"InvoiceReceipt",
"BarReceipt",
"OrderItems",
"Exit"
});
//TestHelpers.PrintCommandsToConsole(printCommands); if (receiptType == 5) break;
//var printer = await TestHelpers.CreateHtmlPrinterAsync(); var printerTarget = ShowMenu("Select printer target:", new[]
//await TestHelpers.PrintCommandsToHtmlPrinterAsync( {
// printer, "HTML Printer (local file)",
// printCommands, "Epson Printer (real hardware)"
// logoPath: "ristorante-klinglers.ch-logo_white_bg.png"); });
Console.Clear();
Console.WriteLine($"Running {GetReceiptTypeName(receiptType)} on {(printerTarget == 0 ? "HTML" : "Epson")} printer...\n");
// ============================================================================ try
// FINAL RECEIPT - EPSON PRINTER {
// ============================================================================ await RunTest(receiptType, printerTarget);
//var receipt = TestHelpers.BuildSampleFinalReceipt(); Console.WriteLine("\nDone! Press any key to return to menu...");
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); }
catch (Exception ex)
{
Console.WriteLine($"\nError: {ex.Message}");
Console.WriteLine("Press any key to return to menu...");
}
//var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24); Console.ReadKey(true);
//var printCommands = converter.Convert(serializedReceipt); }
//TestHelpers.PrintCommandsToConsole(printCommands); static int ShowMenu(string prompt, string[] options)
{
int selected = 0;
//var printer = await TestHelpers.CreateEpsonPrinterAsync(); while (true)
//await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands); {
Console.Clear();
Console.WriteLine("=== Epson Print Test Runner ===\n");
Console.WriteLine(prompt);
Console.WriteLine();
for (int i = 0; i < options.Length; i++)
{
if (i == selected)
{
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.Black;
Console.WriteLine($" > {options[i]}");
Console.ResetColor();
}
else
{
Console.WriteLine($" {options[i]}");
}
}
// ============================================================================ Console.WriteLine("\n[Up/Down] Navigate [Enter] Select");
// INVOICE RECEIPT - HTML PRINTER
// ============================================================================
//var receipt = TestHelpers.BuildSampleInvoiceReceipt();
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
////var fileContent = File.ReadAllText("invoice.json");
////var serializedReceipt = JsonSerializer.Deserialize<string>(fileContent);
//var converter = new InvoiceReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
//var printCommands = converter.Convert(serializedReceipt);
//TestHelpers.PrintCommandsToConsole(printCommands); var key = Console.ReadKey(true).Key;
switch (key)
{
case ConsoleKey.UpArrow:
selected = (selected - 1 + options.Length) % options.Length;
break;
case ConsoleKey.DownArrow:
selected = (selected + 1) % options.Length;
break;
case ConsoleKey.Enter:
return selected;
}
}
}
//var printer = await TestHelpers.CreateHtmlPrinterAsync(); static string GetReceiptTypeName(int index) => index switch
//await TestHelpers.PrintCommandsToHtmlPrinterAsync( {
// printer, 0 => "KitchenReceipt",
// printCommands, 1 => "FinalReceipt",
// logoPath: "ristorante-klinglers.ch-logo_white_bg.png"); 2 => "InvoiceReceipt",
3 => "BarReceipt",
4 => "OrderItems",
_ => "Unknown"
};
static async Task RunTest(int receiptType, int printerTarget)
{
switch (receiptType)
{
case 0: await RunKitchenReceiptTest(printerTarget); break;
case 1: await RunFinalReceiptTest(printerTarget); break;
case 2: await RunInvoiceReceiptTest(printerTarget); break;
case 3: await RunBarReceiptTest(printerTarget); break;
case 4: await RunOrderItemsTest(printerTarget); break;
}
}
// ============================================================================ static async Task RunKitchenReceiptTest(int printerTarget)
// INVOICE RECEIPT - EPSON PRINTER {
// ============================================================================ var receipt = TestHelpers.BuildSampleKitchenReceipt();
//var receipt = TestHelpers.BuildSampleInvoiceReceipt(); var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt);
//var converter = new InvoiceReceiptConverter(lineWidth: 48, bigFontLineWidth: 24); var converter = new KitchenReceiptConverterKlinglers(bigLineWidth: 20, lineWidth: 33);
//var printCommands = converter.Convert(serializedReceipt); var printCommands = converter.ConvertToPrintCommands(deserializedReceipt);
//TestHelpers.PrintCommandsToConsole(printCommands); TestHelpers.PrintCommandsToConsole(printCommands);
//var printer = await TestHelpers.CreateEpsonPrinterAsync(); if (printerTarget == 0)
//await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands); {
var printer = await TestHelpers.CreateHtmlPrinterAsync(
path: @".\kitchen_test.html",
paperWidth: TestHelpers.KitchenPaperWidth);
await TestHelpers.PrintKitchenCommandsToHtmlPrinterAsync(printer, printCommands);
Console.WriteLine("Output written to: kitchen_test.html");
}
else
{
var printer = await TestHelpers.CreateEpsonPrinterAsync(paperWidth: TestHelpers.KitchenPaperWidth);
await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands, useDelay: true);
}
}
static async Task RunFinalReceiptTest(int printerTarget)
{
var receipt = TestHelpers.BuildSampleFinalReceipt();
var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
// ============================================================================ var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
// KITCHEN RECEIPT - HTML PRINTER var printCommands = converter.Convert(serializedReceipt);
// ============================================================================
var receipt = TestHelpers.BuildSampleKitchenReceipt();
var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt);
var converter = new KitchenReceiptConverterKlinglers(bigLineWidth: 20, lineWidth: 33); TestHelpers.PrintCommandsToConsole(printCommands);
var printCommands = converter.ConvertToPrintCommands(deserializedReceipt);
TestHelpers.PrintCommandsToConsole(printCommands); if (printerTarget == 0)
{
var printer = await TestHelpers.CreateHtmlPrinterAsync();
await TestHelpers.PrintCommandsToHtmlPrinterAsync(
printer,
printCommands,
logoPath: "ristorante-klinglers.ch-logo_white_bg.png");
Console.WriteLine("Output written to: test.html");
}
else
{
var printer = await TestHelpers.CreateEpsonPrinterAsync();
await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands);
}
}
var printer = await TestHelpers.CreateHtmlPrinterAsync( static async Task RunInvoiceReceiptTest(int printerTarget)
path: @".\kitchen_test.html", {
paperWidth: TestHelpers.KitchenPaperWidth); var receipt = TestHelpers.BuildSampleInvoiceReceipt();
await TestHelpers.PrintKitchenCommandsToHtmlPrinterAsync(printer, printCommands); var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
var converter = new InvoiceReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
var printCommands = converter.Convert(serializedReceipt);
// ============================================================================ TestHelpers.PrintCommandsToConsole(printCommands);
// KITCHEN RECEIPT (NEXT DISH) - HTML PRINTER
// ============================================================================
//var receipt = TestHelpers.BuildSampleKitchenReceiptNextDish();
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
//var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt);
//var converter = new KitchenReceiptConverter(bigLineWidth: 18, lineWidth: 33); if (printerTarget == 0)
//var printCommands = converter.ConvertToPrintCommands(deserializedReceipt); {
var printer = await TestHelpers.CreateHtmlPrinterAsync(path: @".\invoice_test.html");
await TestHelpers.PrintCommandsToHtmlPrinterAsync(
printer,
printCommands,
logoPath: "ristorante-klinglers.ch-logo_white_bg.png");
Console.WriteLine("Output written to: invoice_test.html");
}
else
{
var printer = await TestHelpers.CreateEpsonPrinterAsync();
await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands);
}
}
//TestHelpers.PrintCommandsToConsole(printCommands); static async Task RunBarReceiptTest(int printerTarget)
{
var receipt = TestHelpers.BuildSampleBarReceipt();
//var printer = await TestHelpers.CreateHtmlPrinterAsync( var converter = new BarReceiptConverter(lineWidth: 42, bigLineWidth: 22);
// path: @".\kitchen_next_dish.html", var printCommands = converter.ConvertToPrintCommands(receipt);
// paperWidth: TestHelpers.KitchenPaperWidth);
//await TestHelpers.PrintKitchenCommandsToHtmlPrinterAsync(printer, printCommands);
TestHelpers.PrintCommandsToConsole(printCommands);
// ============================================================================ if (printerTarget == 0)
// KITCHEN RECEIPT - EPSON PRINTER {
// ============================================================================ var printer = await TestHelpers.CreateHtmlPrinterAsync(
//var receipt = TestHelpers.BuildSampleKitchenReceipt(); path: @".\bar_test.html",
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); paperWidth: TestHelpers.KitchenPaperWidth);
//var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt); await TestHelpers.PrintKitchenCommandsToHtmlPrinterAsync(printer, printCommands);
Console.WriteLine("Output written to: bar_test.html");
}
else
{
var printer = await TestHelpers.CreateEpsonPrinterAsync(paperWidth: TestHelpers.KitchenPaperWidth);
await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands, useDelay: true);
}
}
//var converter = new KitchenReceiptConverter(bigLineWidth: 18, lineWidth: 33); static async Task RunOrderItemsTest(int printerTarget)
//var printCommands = converter.ConvertToPrintCommands(deserializedReceipt); {
var receipt = TestHelpers.BuildSampleOrderItemsReceipt();
var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
//TestHelpers.PrintCommandsToConsole(printCommands); var converter = new OrderItemsReceiptConverter(lineWidth: 50, bigFontLineWidth: 21);
var printCommands = converter.Convert(serializedReceipt);
//var printer = await TestHelpers.CreateEpsonPrinterAsync(paperWidth: TestHelpers.KitchenPaperWidth); TestHelpers.PrintCommandsToConsole(printCommands);
//await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands, useDelay: true);
if (printerTarget == 0)
// ============================================================================ {
// ORDER ITEMS RECEIPT - HTML PRINTER var printer = await TestHelpers.CreateHtmlPrinterAsync(path: @".\order_items.html");
// ============================================================================ await TestHelpers.PrintCommandsToHtmlPrinterAsync(printer, printCommands);
//var receipt = TestHelpers.BuildSampleOrderItemsReceipt(); Console.WriteLine("Output written to: order_items.html");
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); }
//Console.WriteLine(serializedReceipt); else
//var deserializedReceipt = JsonSerializer.Deserialize<OrderItemsReceipt>(serializedReceipt); {
var printer = await TestHelpers.CreateEpsonPrinterAsync();
//var converter = new ReceiptConverter(lineWidth: 50, bigFontLineWidth: 21); await TestHelpers.PrintCommandsToEpsonPrinterAsync(printer, printCommands);
//var printCommands = converter.ConvertToPrintCommands(deserializedReceipt); }
}
//TestHelpers.PrintCommandsToConsole(printCommands);
//var printer = await TestHelpers.CreateHtmlPrinterAsync(path: @".\order_items.html");
//await TestHelpers.PrintCommandsToHtmlPrinterAsync(printer, printCommands);
// ============================================================================
// BASIC PRINTER STATUS CHECK
// ============================================================================
//var printer = await TestHelpers.CreateEpsonPrinterAsync();
//var status = await printer.GetPrinterStatusAsync();
//Console.WriteLine($"Printer Status: {status}");
//var paperStatus = await printer.GetPaperSensorStatusAsync();
//Console.WriteLine($"Paper Sensor Status: {paperStatus}");
// ============================================================================
// SIMPLE TEXT PRINT TEST
// ============================================================================
//var printer = await TestHelpers.CreateEpsonPrinterAsync();
//await printer.InitAsync();
//await printer.PrintTextAsync("Hello, World!\n");
//await printer.FeedLinesAsync(5);
//await printer.CutAsync();
// ============================================================================
// IMAGE PRINT TEST
// ============================================================================
//var printer = await TestHelpers.CreateEpsonPrinterAsync();
//await printer.LoadImageAsync("test.png", 100);
//await printer.PrintLoadedImage();
//await printer.FeedLinesAsync(5);
//await printer.CutAsync();
// ============================================================================
// FONT SIZE TEST
// ============================================================================
//var printer = await TestHelpers.CreateEpsonPrinterAsync();
//await printer.InitAsync();
//// Double size (24 chars per line)
//await printer.SetFontSizeAsync(2, 2);
//await printer.SelectFont(EpsonCommands.PrinterFont.A);
//await printer.PrintTextAsync("HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_\n");
//// Normal size (48 chars per line)
//await printer.SetFontSizeAsync(1, 1);
//await printer.SelectFont(EpsonCommands.PrinterFont.A);
//await printer.PrintTextAsync("HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_\n");
//await printer.FeedLinesAsync(5);
//await printer.CutAsync();
// ============================================================================
// SOAP PRINTER TEST
// ============================================================================
//var printer = new SoapEpsonPrinter("localhost:8888");
//var print = new SoapEpsonPrint();
//print
// .AddTextAlign(SoapEpsonPrint.ALIGN_CENTER)
// .AddTextSize(2, 2)
// .AddText("It works! Finally!!!")
// .AddFeed()
// .AddFeed()
// .AddFeed()
// .AddCut(SoapEpsonPrint.CUT_FEED);
//var task = await printer.Send(print);
//var status = await printer.GetStatus(print);
//Console.WriteLine($"Printer Status: {status}");

View File

@@ -1,6 +1,7 @@
using System.Diagnostics; using System.Diagnostics;
using Inspectron.Epson; using Inspectron.Epson;
using Inspectron.Epson.PrintServer.Printers.Utils; using Inspectron.Epson.PrintServer.Printers.Utils;
using Inspectron.Epson.PrintServer.Printers.Utils.BarReceipt;
using Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe; using Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe;
using Inspectron.Epson.PrintServer.Printers.Utils.InvoiceReceipt; using Inspectron.Epson.PrintServer.Printers.Utils.InvoiceReceipt;
using Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt; using Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt;
@@ -309,13 +310,13 @@ public static class TestHelpers
TableNumber = "22" TableNumber = "22"
}; };
receipt.Gangs.Add(new Gang(1, "Gang")); receipt.Gangs.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Gang(1, "Gang"));
receipt.Gangs.Add(new Gang(2, "Gang")); receipt.Gangs.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Gang(2, "Gang"));
receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi with some addition to cause line wrapping") receipt.Gangs[0].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Dish(1, "Avocado Sashimi with some addition to cause line wrapping")
{ {
Size = "XL", Size = "XL",
Modifications = new DishModifications Modifications = new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.DishModifications
{ {
Removed = new List<string> { "Wasabi" }, Removed = new List<string> { "Wasabi" },
Added = new List<string> { "Extra Ginger" } Added = new List<string> { "Extra Ginger" }
@@ -324,9 +325,9 @@ public static class TestHelpers
GuestId = 1, GuestId = 1,
Price = 123.45m Price = 123.45m
}); });
receipt.Gangs[0].Dishes.Add(new Dish(2, "Avocado Sashimi with some addition to cause line wrapping") { GuestId = 2 }); receipt.Gangs[0].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Dish(2, "Avocado Sashimi with some addition to cause line wrapping") { GuestId = 2 });
receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi with some addition to cause line wrapping") { GuestId = 3 }); receipt.Gangs[0].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Dish(1, "Avocado Sashimi with some addition to cause line wrapping") { GuestId = 3 });
receipt.Gangs[0].Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl"){GuestId = 2}); receipt.Gangs[0].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Dish(1, "Baby Spinach Salad with Truffl"){GuestId = 2});
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Beef Tataki") //receipt.Gangs[0].Dishes.Add(new Dish(1, "Beef Tataki")
//{ //{
// Modifications = new DishModifications // Modifications = new DishModifications
@@ -346,8 +347,8 @@ public static class TestHelpers
// GuestId = 4 // GuestId = 4
//}); //});
receipt.Gangs[1].Dishes.Add(new Dish(1, "Avocado Sashimi") { GuestId = 1 }); receipt.Gangs[1].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Dish(1, "Avocado Sashimi") { GuestId = 1 });
receipt.Gangs[1].Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl") { GuestId = 2 }); receipt.Gangs[1].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Dish(1, "Baby Spinach Salad with Truffl") { GuestId = 2 });
//receipt.Gangs[1].Dishes.Add(new Dish(1, "Beef Tataki") { GuestId = 3 }); //receipt.Gangs[1].Dishes.Add(new Dish(1, "Beef Tataki") { GuestId = 3 });
//receipt.Gangs[1].Dishes.Add(new Dish(1, "Salmon Taco") { GuestId = 4 }); //receipt.Gangs[1].Dishes.Add(new Dish(1, "Salmon Taco") { GuestId = 4 });
@@ -367,7 +368,7 @@ public static class TestHelpers
SpecialInstruction = "Gang schicken" SpecialInstruction = "Gang schicken"
}; };
receipt.Gangs.Add(new Gang(2, "Gang")); receipt.Gangs.Add(new Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt.Gang(2, "Gang"));
// to dishes in next dish // to dishes in next dish
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi") //receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi")
//{ //{
@@ -399,6 +400,27 @@ public static class TestHelpers
return receipt; return receipt;
} }
public static BarReceipt BuildSampleBarReceipt()
{
var receipt = new BarReceipt
{
Title = "Bar",
TransactionDateTime = new DateTime(2025, 10, 23, 12, 18, 0),
ReceiptNumber = "132018166",
WaiterName = "Mariano Amato",
WaiterId = "32 (VK Restaurant)",
TableNumber = "22"
};
receipt.Gangs.Add(new Inspectron.Epson.PrintServer.Printers.Utils.BarReceipt.Gang(1, "Gang"));
receipt.Gangs[0].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.BarReceipt.Dish(2, "Aperol Spritz") { GuestId = 1 });
receipt.Gangs[0].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.BarReceipt.Dish(1, "Prosecco") { GuestId = 2 });
receipt.Gangs[0].Dishes.Add(new Inspectron.Epson.PrintServer.Printers.Utils.BarReceipt.Dish(1, "Mojito with extra mint and lime") { GuestId = 3 });
return receipt;
}
public static OrderItemsReceipt BuildSampleOrderItemsReceipt() public static OrderItemsReceipt BuildSampleOrderItemsReceipt()
{ {
return new OrderItemsReceipt return new OrderItemsReceipt

6
global.json Normal file
View File

@@ -0,0 +1,6 @@
{
"sdk": {
"version": "8.0.419",
"rollForward": "latestPatch"
}
}