public static void Test() { IEnumerable <GraphAndUI <NodeUIData> > nodes = Enumerable.Empty <GraphAndUI <NodeUIData> >(); List <NodeGroup> groups = new List <NodeGroup>(); MemoryStream rawData = new MemoryStream(); DocumentPath file = DocumentPath.FromPath("DeleteMe.txt", new DirectoryInfo(".")); ISerializer <TData> serializer = null; ReadOnlyCollection <LoadError> errors = new ReadOnlyCollection <LoadError>(new List <LoadError>()); INodeFactory nodeFactory = null; GenerateAudio generateAudio = null; var source = new DynamicEnumParameter.Source(); Func <IDynamicEnumParameter, object, DynamicEnumParameter.Source> getDocumentSource = (a, b) => source; IAudioLibrary audioProvider = new DummyAudioLibrary(); List <List <ConversationNode> > states = new List <List <ConversationNode <INodeGui> > > { new List <ConversationNode>() }; Random r = new Random(0); UpToDateFile.BackEnd backend = new UpToDateFile.BackEnd(); var id = Id <FileInProject> .Parse("6a1bd06a-0028-4099-a375-475f1a5320db"); using (ConversationFile conversationFile = new ConversationFile(id, nodes, groups, rawData, file, serializer, errors, nodeFactory, generateAudio, getDocumentSource, audioProvider, backend)) { for (int i = 0; i < 10; i++) { var node = MakeNode(); var state = states[i].ToList(); state.Add(node); conversationFile.Add(new[] { node }, Enumerable.Empty <NodeGroup>(), null); CheckState(conversationFile, state); states.Add(state); } Action <ConversationNode> CheckNode = node => { var connector = conversationFile.UIInfo(node.Data.Connectors.First(), false); Assert.That(connector.Area.Value, Is.EqualTo(TopPosition(node.Renderer.Area))); }; for (int n = 0; n < 10000; n++) { var node = states.Last().Last(); node.Renderer.MoveTo(new PointF((float)r.NextDouble() * 1000, (float)r.NextDouble() * 1000)); CheckNode(node); } for (int i = 9; i >= 0; i--) { conversationFile.UndoableFile.UndoQueue.Undo(); var state = states[i]; CheckState(conversationFile, state); } for (int i = 1; i <= 10; i++) { conversationFile.UndoableFile.UndoQueue.Redo(); var state = states[i]; CheckState(conversationFile, state); } } Assert.Inconclusive(); }