public static void TestConfigureAndModified() { IEnumerable <IParameter> someCorrupt = new IParameter[] { new DummyParameter(false), new DummyParameter(true), }; IConversationNodeData data = new DummyConversationNodeData(someCorrupt, Id <NodeTemp> .Parse("745fa8ce-174e-4af7-82b7-17e939e9a475")); Func <ConversationNode <DummyUI>, DummyUI> nodeUI = n => new DummyUI(n, false); Func <ConversationNode <DummyUI>, DummyUI> corruptedUI = n => new DummyUI(n, true); ConversationNode <DummyUI> node = new ConversationNode <DummyUI>(data, nodeUI, corruptedUI); int modifications = 0; int undos = 0; int redos = 0; int expectedRedos = 0; //To ensure Modified is triggered AFTER the modification int expectedUndos = 0; //To ensure Modified is triggered AFTER the modification node.Modified += () => { modifications++; Assert.That(redos, Is.EqualTo(expectedRedos)); Assert.That(undos, Is.EqualTo(expectedUndos)); }; Action redo = () => { redos++; }; Action undo = () => { undos++; }; ConfigureResult configure = node.Configure(n => new SimpleUndoPair() { Redo = redo, Undo = undo }); Assert.That(undos, Is.EqualTo(0)); Assert.That(redos, Is.EqualTo(0)); Assert.That(modifications, Is.EqualTo(0)); expectedRedos = 1; configure.Do(a => a.Redo(), b => Assert.Fail("Unexpected Cancelled configuration")); Assert.That(undos, Is.EqualTo(0)); Assert.That(redos, Is.EqualTo(1)); Assert.That(modifications, Is.EqualTo(1)); expectedUndos = 1; configure.Do(a => a.Undo(), b => Assert.Fail("Unexpected Cancelled configuration")); Assert.That(undos, Is.EqualTo(1)); Assert.That(redos, Is.EqualTo(1)); Assert.That(modifications, Is.EqualTo(2)); ConfigureResult cancelConfigure = node.Configure(n => ConfigureResultNotOk.Cancel); cancelConfigure.Do(a => Assert.Fail("Expected configure result to be Cancel"), b => Assert.That(b, Is.EqualTo(ConfigureResultNotOk.Cancel))); ConfigureResult notApplicableConfigure = node.Configure(n => ConfigureResultNotOk.NotApplicable); notApplicableConfigure.Do(a => Assert.Fail("Expected configure result to be Cancel"), b => Assert.That(b, Is.EqualTo(ConfigureResultNotOk.NotApplicable))); }
public static void TestInitialState() { IEnumerable <IParameter> noParameters = new IParameter[] { }; IEnumerable <IParameter> notCorrupt = new IParameter[] { new DummyParameter(false), new DummyParameter(false), }; IEnumerable <IParameter> someCorrupt = new IParameter[] { new DummyParameter(false), new DummyParameter(true), }; IEnumerable <IParameter> allCorrupt = new IParameter[] { new DummyParameter(true), new DummyParameter(true), }; Func <ConversationNode <DummyUI>, DummyUI> nodeUI = n => new DummyUI(n, false); Func <ConversationNode <DummyUI>, DummyUI> corruptedUI = n => new DummyUI(n, true); { IConversationNodeData data = new DummyConversationNodeData(noParameters, Id <NodeTemp> .Parse("558d4788-7b8c-4fc2-a822-f8ea90a2c84e")); ConversationNode <DummyUI> node = new ConversationNode <DummyUI>(data, nodeUI, corruptedUI); Assert.That(node.Data, Is.EqualTo(data)); Assert.That(node.Renderer.Corrupt, Is.False); } { IConversationNodeData data = new DummyConversationNodeData(notCorrupt, Id <NodeTemp> .Parse("558d4788-7b8c-4fc2-a822-f8ea90a2c84e")); ConversationNode <DummyUI> node = new ConversationNode <DummyUI>(data, nodeUI, corruptedUI); Assert.That(node.Data, Is.EqualTo(data)); Assert.That(node.Renderer.Corrupt, Is.False); } { IConversationNodeData data = new DummyConversationNodeData(someCorrupt, Id <NodeTemp> .Parse("558d4788-7b8c-4fc2-a822-f8ea90a2c84e")); ConversationNode <DummyUI> node = new ConversationNode <DummyUI>(data, nodeUI, corruptedUI); Assert.That(node.Data, Is.EqualTo(data)); Assert.That(node.Renderer.Corrupt, Is.True); } { IConversationNodeData data = new DummyConversationNodeData(allCorrupt, Id <NodeTemp> .Parse("558d4788-7b8c-4fc2-a822-f8ea90a2c84e")); ConversationNode <DummyUI> node = new ConversationNode <DummyUI>(data, nodeUI, corruptedUI); Assert.That(node.Data, Is.EqualTo(data)); Assert.That(node.Renderer.Corrupt, Is.True); } }
public static void TestSetRenderer() { IEnumerable <IParameter> noCorrupt = new IParameter[] { new DummyParameter(false), }; IConversationNodeData data = new DummyConversationNodeData(noCorrupt, Id <NodeTemp> .Parse("558d4788-7b8c-4fc2-a822-f8ea90a2c84e")); Func <ConversationNode <DummyUI>, DummyUI> nodeUI = n => new DummyUI(n, false); Func <ConversationNode <DummyUI>, DummyUI> corruptedUI = n => new DummyUI(n, true); ConversationNode <DummyUI> node = new ConversationNode <DummyUI>(data, nodeUI, corruptedUI); var originalRenderer = node.Renderer; var newRenderer = new DummyUI(node, false); int changing = 0; int changed = 0; node.RendererChanging += () => { changing++; Assert.That(changing, Is.EqualTo(1)); Assert.That(changed, Is.EqualTo(0)); Assert.That(node.Renderer, Is.EqualTo(originalRenderer)); }; node.RendererChanged += () => { changed++; Assert.That(changing, Is.EqualTo(1)); Assert.That(changed, Is.EqualTo(1)); Assert.That(node.Renderer, Is.EqualTo(newRenderer)); }; node.SetRenderer(n => newRenderer); Assert.That(changed, Is.EqualTo(1)); Assert.That(changing, Is.EqualTo(1)); }
private static ConversationNode MakeNode() { var data = new DummyConversationNodeData("test", Id <NodeTemp> .Parse("d3aa34e9-35e5-4aa5-bd7d-d9b98ab5a54e"), "description", Id <NodeTypeTemp> .Parse("1edf950a-088a-432f-aee9-b67cf9b7f3c0"), Enumerable.Empty <IParameter>()); return(new ConversationNode(data, d => MakeNodeUI(d, (a, b) => null), d => null)); }
public static void TestGetNodeRemoveActions() { IEnumerable <IParameter> someCorrupt = new IParameter[] { new DummyParameter(false), new DummyParameter(true), }; IConversationNodeData data1 = new DummyConversationNodeData(someCorrupt, Id <NodeTemp> .Parse("558d4788-7b8c-4fc2-a822-f8ea90a2c84e")); IConversationNodeData data2 = new DummyConversationNodeData(someCorrupt, Id <NodeTemp> .Parse("af594e64-e788-4873-9d01-0e13ba430c14")); IConversationNodeData data3 = new DummyConversationNodeData(someCorrupt, Id <NodeTemp> .Parse("d3bbcc20-f8c5-4e40-8ad4-bee06b6f28a7")); Func <ConversationNode <DummyUI>, DummyUI> nodeUI = n => new DummyUI(n, false); Func <ConversationNode <DummyUI>, DummyUI> corruptedUI = n => new DummyUI(n, true); ConversationNode <DummyUI> node1 = new ConversationNode <DummyUI>(data1, nodeUI, corruptedUI); ConversationNode <DummyUI> node2 = new ConversationNode <DummyUI>(data2, nodeUI, corruptedUI); ConversationNode <DummyUI> node3 = new ConversationNode <DummyUI>(data3, nodeUI, corruptedUI); var nodes = new[] { node1, node2, node3 }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int a = i + 1; a < 3; a++) { for (int b = 0; b < 3; b++) { nodes[i].Data.Connectors.ElementAt(j).ConnectTo(nodes[a].Data.Connectors.ElementAt(b), false); } } } } List <Output> allConnectors = new List <Output>(); { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { allConnectors.Add(nodes[i].Data.Connectors.ElementAt(j)); } } } Action CheckAllConnected = () => { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Assert.That(nodes[i].Data.Connectors.ElementAt(j).Connections, Is.EquivalentTo(allConnectors.Where(x => x.Parent != nodes[i].Data))); } } }; CheckAllConnected(); var actions = node1.GetNodeRemoveActions(); //TODO: Test that localizations are removed/readded correctly CheckAllConnected(); actions.Redo(); for (int i = 1; i < 3; i++) { for (int j = 0; j < 3; j++) { Assert.That(nodes[i].Data.Connectors.ElementAt(j).Connections, Is.EquivalentTo(allConnectors.Where(x => x.Parent != nodes[i].Data && x.Parent != node1.Data))); } } for (int j = 0; j < 3; j++) { Assert.That(node1.Data.Connectors.ElementAt(j).Connections, Is.Empty); } actions.Undo(); CheckAllConnected(); }