templates support
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
using Inspectron.Epson.Templates.Configuration;
|
||||
|
||||
namespace Inspectron.Epson.Templates.Tests.Configuration;
|
||||
|
||||
public class PrinterProfileTests
|
||||
{
|
||||
[Fact]
|
||||
public void Default_Profile_HasExpectedValues()
|
||||
{
|
||||
var profile = PrinterProfile.Default;
|
||||
|
||||
Assert.Equal("default", profile.Id);
|
||||
Assert.Equal(48, profile.LineWidth);
|
||||
Assert.Equal(24, profile.BigLineWidth);
|
||||
Assert.False(profile.SupportsRed);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterProfileRegistryTests
|
||||
{
|
||||
[Fact]
|
||||
public void GetProfile_TmT30III_ReturnsCorrectProfile()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var profile = registry.GetProfile(0x01);
|
||||
|
||||
Assert.Equal("tm-t30iii", profile.Id);
|
||||
Assert.Equal(48, profile.LineWidth);
|
||||
Assert.Equal(24, profile.BigLineWidth);
|
||||
Assert.False(profile.SupportsRed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetProfile_TmU220II_0x0D_ReturnsCorrectProfile()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var profile = registry.GetProfile(0x0D);
|
||||
|
||||
Assert.Equal("tm-u220ii", profile.Id);
|
||||
Assert.Equal(33, profile.LineWidth);
|
||||
Assert.Equal(20, profile.BigLineWidth);
|
||||
Assert.True(profile.SupportsRed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetProfile_TmU220II_0x13_ReturnsCorrectProfile()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var profile = registry.GetProfile(0x13);
|
||||
|
||||
Assert.Equal("tm-u220ii", profile.Id);
|
||||
Assert.Equal(33, profile.LineWidth);
|
||||
Assert.Equal(20, profile.BigLineWidth);
|
||||
Assert.True(profile.SupportsRed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetProfile_UnknownPrinter_ReturnsDefault()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var profile = registry.GetProfile(0xFF);
|
||||
|
||||
Assert.Equal(PrinterProfile.Default.LineWidth, profile.LineWidth);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetProfile_ByName_ReturnsCorrectProfile()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var profile = registry.GetProfile("tm-t30iii");
|
||||
|
||||
Assert.Equal("tm-t30iii", profile.Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Register_CustomProfile_CanBeRetrieved()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var customProfile = new PrinterProfile("custom", "Custom Printer", 40, 20, true);
|
||||
registry.Register(0xAA, customProfile);
|
||||
|
||||
var retrieved = registry.GetProfile(0xAA);
|
||||
Assert.Equal("custom", retrieved.Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetAllProfiles_ReturnsDistinctProfiles()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var profiles = registry.GetAllProfiles().ToList();
|
||||
|
||||
// Should have TM-T30III and TM-U220II (distinct)
|
||||
Assert.Equal(2, profiles.Count);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
using Inspectron.Epson.Templates.Configuration;
|
||||
|
||||
namespace Inspectron.Epson.Templates.Tests.Configuration;
|
||||
|
||||
public class TemplateResolverTests
|
||||
{
|
||||
[Fact]
|
||||
public void Resolve_ExactMatch_ReturnsExactTemplate()
|
||||
{
|
||||
var assignments = new[]
|
||||
{
|
||||
new TemplateAssignment(1, "tm-t30iii", "kitchen-t30.template"),
|
||||
new TemplateAssignment(1, null, "kitchen-default.template")
|
||||
};
|
||||
var resolver = new TemplateResolver(assignments);
|
||||
|
||||
var result = resolver.Resolve(1, "tm-t30iii");
|
||||
|
||||
Assert.Equal("kitchen-t30.template", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_TypeOnlyMatch_ReturnsTypeTemplate()
|
||||
{
|
||||
var assignments = new[]
|
||||
{
|
||||
new TemplateAssignment(1, null, "kitchen-default.template"),
|
||||
new TemplateAssignment(2, null, "bar-default.template")
|
||||
};
|
||||
var resolver = new TemplateResolver(assignments);
|
||||
|
||||
var result = resolver.Resolve(1, "unknown-profile");
|
||||
|
||||
Assert.Equal("kitchen-default.template", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_NoMatch_ReturnsFallback()
|
||||
{
|
||||
var assignments = new[]
|
||||
{
|
||||
new TemplateAssignment(1, null, "kitchen-default.template")
|
||||
};
|
||||
var resolver = new TemplateResolver(assignments, "fallback.template");
|
||||
|
||||
var result = resolver.Resolve(99, "unknown-profile");
|
||||
|
||||
Assert.Equal("fallback.template", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_PreferExactOverTypeOnly()
|
||||
{
|
||||
var assignments = new[]
|
||||
{
|
||||
new TemplateAssignment(1, null, "type-only.template"),
|
||||
new TemplateAssignment(1, "tm-t30iii", "exact.template")
|
||||
};
|
||||
var resolver = new TemplateResolver(assignments);
|
||||
|
||||
var result = resolver.Resolve(1, "tm-t30iii");
|
||||
|
||||
Assert.Equal("exact.template", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_WithRegistry_MapsProfileCorrectly()
|
||||
{
|
||||
var registry = new PrinterProfileRegistry();
|
||||
var assignments = new[]
|
||||
{
|
||||
new TemplateAssignment(1, "tm-t30iii", "kitchen-t30.template"),
|
||||
new TemplateAssignment(1, "tm-u220ii", "kitchen-u220.template")
|
||||
};
|
||||
var resolver = new TemplateResolver(assignments);
|
||||
|
||||
var result = resolver.Resolve(1, 0x01, registry);
|
||||
|
||||
Assert.Equal("kitchen-t30.template", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LoadConfiguration_ParsesCorrectly()
|
||||
{
|
||||
var json = """
|
||||
{
|
||||
"assignments": [
|
||||
{"receiptType": 1, "profileId": "tm-t30iii", "template": "kitchen.template"},
|
||||
{"receiptType": 2, "profileId": null, "template": "bar.template"}
|
||||
],
|
||||
"fallbackTemplate": "default.template"
|
||||
}
|
||||
""";
|
||||
|
||||
var config = TemplateConfiguration.LoadFromJson(json);
|
||||
|
||||
Assert.Equal(2, config.Assignments.Count);
|
||||
Assert.Equal("default.template", config.FallbackTemplate);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user