Files
LehrerApp/LehrerApp.TemplateDesigner.Tests/OverlayEditorTests.cs

110 lines
4.3 KiB
C#

using Avalonia;
using LehrerApp.TemplateDesigner;
using Xunit;
namespace LehrerApp.TemplateDesigner.Tests;
public sealed class OverlayEditorTests
{
[Fact]
public void Koordinatenabbildung_BeruecksichtigtLetterboxUndIstUmkehrbar()
{
var displayedPage = OverlayCoordinateMapper.PageRect(new Size(1000, 1000), 210, 297);
var dslRect = new Rect(20, 30, 80, 45);
var controlRect = OverlayCoordinateMapper.ToControl(dslRect, displayedPage, 210, 297);
var mappedTopLeft = OverlayCoordinateMapper.ToDsl(controlRect.TopLeft, displayedPage, 210, 297);
var mappedBottomRight = OverlayCoordinateMapper.ToDsl(controlRect.BottomRight, displayedPage, 210, 297);
Assert.Equal(1000, displayedPage.Height, 6);
Assert.True(displayedPage.X > 140);
Assert.Equal(dslRect.X, mappedTopLeft.X, 6);
Assert.Equal(dslRect.Y, mappedTopLeft.Y, 6);
Assert.Equal(dslRect.Right, mappedBottomRight.X, 6);
Assert.Equal(dslRect.Bottom, mappedBottomRight.Y, 6);
}
[Fact]
public void Messbereich_WirdInElementformularUebernommen()
{
var viewModel = new DesignerViewModel();
viewModel.ApplyMeasurement(new(12.5, 34.25, 80, 22.5, true));
Assert.Equal("12.5", viewModel.NewX);
Assert.Equal("34.25", viewModel.NewY);
Assert.Equal("80", viewModel.NewWidth);
Assert.Equal("22.5", viewModel.NewHeight);
}
[Fact]
public void TextVerschieben_ErhaeltInhaltUndAttribute()
{
var viewModel = new DesignerViewModel
{ LayoutSource = "PAGE 210 297 mm\nTEXT 20 30 \"Hallo Welt\" size=10 bold=true" };
viewModel.ApplyElementGeometry(new(2, "TEXT", 25.5, 40, 70, 5));
Assert.Contains("TEXT 25.5 40 \"Hallo Welt\" size=10 bold=true", viewModel.LayoutSource);
}
[Fact]
public void SkaliertesBildResize_RechnetEffektivenRahmenZurueckUndErhaeltScale()
{
var viewModel = new DesignerViewModel
{ LayoutSource = "PAGE 210 297 mm\nIMG logo.png 10 15 30 12 scale=50%" };
viewModel.ApplyElementGeometry(new(2, "IMG", 20, 25, 30, 12));
Assert.Contains("IMG logo.png 20 25 60 24 scale=50%", viewModel.LayoutSource);
}
[Fact]
public void DslSeitengroesse_SteuertOverlayAuchBeiAbweichendemManifestformular()
{
var viewModel = new DesignerViewModel { PageWidth = 210, PageHeight = 297 };
viewModel.LayoutSource = "PAGE 200 200 pt";
Assert.Equal(200, viewModel.OverlayPageWidth);
Assert.Equal(200, viewModel.OverlayPageHeight);
Assert.Equal("pt", viewModel.OverlayPageUnit);
}
[Fact]
public void FlowSlotVerschieben_AendertNurDasPragmaDerAusgewaehltenSeite()
{
var viewModel = new DesignerViewModel();
var layout = new LehrerApp.Templating.LayoutParser().Parse(viewModel.LayoutSource);
var firstSlot = layout.PageTemplates.Single(x => x.Name == "first").FlowSlots.Single();
var continuationSlot = layout.PageTemplates.Single(x => x.Name == "continuation").FlowSlots.Single();
viewModel.ApplyElementGeometry(new(firstSlot.Line, "FLOW", 25, 95, 160, 165));
var updated = new LehrerApp.Templating.LayoutParser().Parse(viewModel.LayoutSource);
var updatedFirst = updated.PageTemplates.Single(x => x.Name == "first").FlowSlots.Single();
var updatedContinuation = updated.PageTemplates.Single(x => x.Name == "continuation").FlowSlots.Single();
Assert.Equal(25, updatedFirst.X);
Assert.Equal(95, updatedFirst.Y);
Assert.Equal(continuationSlot.X, updatedContinuation.X);
Assert.Equal(continuationSlot.Y, updatedContinuation.Y);
}
[Fact]
public void ElementKannGezieltInContentFlowEingefuegtWerden()
{
var viewModel = new DesignerViewModel
{
NewElementScope = "Content-Flow", SelectedContentFlow = "body",
NewElementType = "TEXT", NewContent = "Nachsatz", NewAttributes = "gap=5",
};
viewModel.AddElement();
var flow = new LehrerApp.Templating.LayoutParser().Parse(viewModel.LayoutSource).ContentFlows.Single();
var text = Assert.IsType<LehrerApp.Templating.TextElement>(flow.Elements.Last());
Assert.Equal("Nachsatz", text.Content);
Assert.Equal("5", text.Attributes["gap"]);
}
}