plugin system docs

custom buttons for plugins
calibration functions for Leeform
This commit is contained in:
EugeneTes
2026-03-30 16:15:47 +02:00
parent a1838cafeb
commit 4bd117af47
76 changed files with 4521 additions and 59 deletions

View File

@@ -0,0 +1,170 @@
using VisionBuilder.UI.Common.ViewModel;
using VisionBuilder.UI.Common.ViewModel.Classes;
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
namespace VisionBuilder.UI.Tests;
[TestClass]
public sealed class DynamicButtonTests
{
private class StubSettingsService : ISettingsService
{
public Task ShowSettingsDialogAsync() => Task.CompletedTask;
}
#region ButtonDefinition Tests
[TestMethod]
public void ClickButton_Execute_InvokesCallback()
{
bool called = false;
var button = new ButtonDefinition("key1", "Test", () => called = true);
button.Execute();
Assert.IsTrue(called);
}
[TestMethod]
public void ClickButton_HasCorrectProperties()
{
var button = new ButtonDefinition("myKey", "My Title", () => { });
Assert.AreEqual("myKey", button.Key);
Assert.AreEqual("My Title", button.Title);
Assert.AreEqual(EButtonType.Click, button.Type);
}
[TestMethod]
public void ToggleButton_Execute_TogglesAndInvokesCallback()
{
bool? receivedState = null;
var button = new ButtonDefinition("key1", "Test", (state) => receivedState = state);
button.Execute();
Assert.IsTrue(button.IsToggled);
Assert.AreEqual(true, receivedState);
}
[TestMethod]
public void ToggleButton_ExecuteTwice_TogglesBack()
{
bool? receivedState = null;
var button = new ButtonDefinition("key1", "Test", (state) => receivedState = state);
button.Execute();
button.Execute();
Assert.IsFalse(button.IsToggled);
Assert.AreEqual(false, receivedState);
}
[TestMethod]
public void ToggleButton_InitialState_IsRespected()
{
var button = new ButtonDefinition("key1", "Test", (_) => { }, initialState: true);
Assert.IsTrue(button.IsToggled);
Assert.AreEqual(EButtonType.Toggle, button.Type);
}
[TestMethod]
public void ButtonDefinition_IsVisible_DefaultTrue()
{
var button = new ButtonDefinition("key1", "Test", () => { });
Assert.IsTrue(button.IsVisible);
}
[TestMethod]
public void ButtonDefinition_SetVisibility_RaisesPropertyChanged()
{
var button = new ButtonDefinition("key1", "Test", () => { });
string? changedProperty = null;
button.PropertyChanged += (_, args) => changedProperty = args.PropertyName;
button.IsVisible = false;
Assert.AreEqual(nameof(ButtonDefinition.IsVisible), changedProperty);
Assert.IsFalse(button.IsVisible);
}
[TestMethod]
public void ToggleButton_Execute_RaisesToggledPropertyChanged()
{
var button = new ButtonDefinition("key1", "Test", (_) => { });
string? changedProperty = null;
button.PropertyChanged += (_, args) => changedProperty = args.PropertyName;
button.Execute();
Assert.AreEqual(nameof(ButtonDefinition.IsToggled), changedProperty);
}
#endregion
#region MainWindowVM Tests
[TestMethod]
public void MainWindowVM_AddButton_AddsToCollection()
{
var vm = new MainWindowVM(new StubSettingsService());
var button = new ButtonDefinition("key1", "Test", () => { });
vm.AddButton(button);
Assert.AreEqual(1, vm.DynamicButtons.Count);
Assert.AreSame(button, vm.DynamicButtons[0]);
}
[TestMethod]
public void MainWindowVM_SetButtonVisibility_UpdatesButton()
{
var vm = new MainWindowVM(new StubSettingsService());
var button = new ButtonDefinition("key1", "Test", () => { });
vm.AddButton(button);
vm.SetButtonVisibility("key1", false);
Assert.IsFalse(button.IsVisible);
}
[TestMethod]
public void MainWindowVM_SetButtonVisibility_NonExistentKey_DoesNothing()
{
var vm = new MainWindowVM(new StubSettingsService());
var button = new ButtonDefinition("key1", "Test", () => { });
vm.AddButton(button);
vm.SetButtonVisibility("nonexistent", false);
Assert.IsTrue(button.IsVisible);
}
[TestMethod]
public void MainWindowVM_RemoveButton_RemovesFromCollection()
{
var vm = new MainWindowVM(new StubSettingsService());
var button = new ButtonDefinition("key1", "Test", () => { });
vm.AddButton(button);
vm.RemoveButton("key1");
Assert.AreEqual(0, vm.DynamicButtons.Count);
}
[TestMethod]
public void MainWindowVM_RemoveButton_NonExistentKey_DoesNothing()
{
var vm = new MainWindowVM(new StubSettingsService());
var button = new ButtonDefinition("key1", "Test", () => { });
vm.AddButton(button);
vm.RemoveButton("nonexistent");
Assert.AreEqual(1, vm.DynamicButtons.Count);
}
#endregion
}