예제 #1
0
        public void AddDataset()
        {
            // Create a 'binary' tree of datasets. This should create the following tree:
            //                            X
            //                          /   \
            //                         /     \
            //                        /       \
            //                       /         \
            //                      /           \
            //                     X             X
            var nodes = new List <Tuple <Mock <IProxyDataset>, List <Mock <IProxyDataset> > > >();

            for (int i = 0; i < 3; i++)
            {
                var childCollection = new List <Mock <IProxyDataset> >();
                var child           = CreateDataset(i, childCollection);

                nodes.Add(new Tuple <Mock <IProxyDataset>, List <Mock <IProxyDataset> > >(child, childCollection));
            }

            var context = new Mock <IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                .Returns(true);
            }

            var tracker = new Mock <ITrackSteppingProgress>();
            var project = new Mock <IProject>();
            {
                project.Setup(p => p.BaseDataset())
                .Returns(nodes[0].Item1.Object);
            }

            var projectFacade = new ProjectFacade(project.Object);
            var projectLink   = new Mock <ILinkToProjects>();
            {
                projectLink.Setup(p => p.ActiveProject())
                .Returns(projectFacade);
            }

            Func <DatasetFacade, DatasetModel> toModel = d => new DatasetModel(context.Object, tracker.Object, projectLink.Object, d);
            var model = new DatasetGraphModel(context.Object, projectFacade, toModel);

            var graph      = model.Graph;
            var rootVertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 0.ToString(CultureInfo.InvariantCulture)));

            var parent = nodes[0];

            // First node
            parent.Item2.Add(nodes[1].Item1);
            project.Raise(p => p.OnDatasetCreated += null, EventArgs.Empty);

            var vertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 1.ToString(CultureInfo.InvariantCulture)));

            Assert.IsNotNull(vertex);

            var edges = graph.InEdges(vertex);

            Assert.AreEqual(1, edges.Count());
            Assert.AreSame(rootVertex, edges.First().Source);

            // Second node
            parent.Item2.Add(nodes[2].Item1);
            project.Raise(p => p.OnDatasetCreated += null, EventArgs.Empty);

            vertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 2.ToString(CultureInfo.InvariantCulture)));
            Assert.IsNotNull(vertex);

            edges = graph.InEdges(vertex);
            Assert.AreEqual(1, edges.Count());
            Assert.AreSame(rootVertex, edges.First().Source);
        }
예제 #2
0
        public void AddDataset()
        {
            // Create a 'binary' tree of datasets. This should create the following tree:
            //                            X
            //                          /   \
            //                         /     \
            //                        /       \
            //                       /         \
            //                      /           \
            //                     X             X
            var nodes = new List<Tuple<Mock<IProxyDataset>, List<Mock<IProxyDataset>>>>();

            for (int i = 0; i < 3; i++)
            {
                var childCollection = new List<Mock<IProxyDataset>>();
                var child = CreateDataset(i, childCollection);

                nodes.Add(new Tuple<Mock<IProxyDataset>, List<Mock<IProxyDataset>>>(child, childCollection));
            }

            var context = new Mock<IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                    .Returns(true);
            }

            var tracker = new Mock<ITrackSteppingProgress>();
            var project = new Mock<IProject>();
            {
                project.Setup(p => p.BaseDataset())
                    .Returns(nodes[0].Item1.Object);
            }

            var projectFacade = new ProjectFacade(project.Object);
            var projectLink = new Mock<ILinkToProjects>();
            {
                projectLink.Setup(p => p.ActiveProject())
                    .Returns(projectFacade);
            }

            Func<DatasetFacade, DatasetModel> toModel = d => new DatasetModel(context.Object, tracker.Object, projectLink.Object, d);
            var model = new DatasetGraphModel(context.Object, projectFacade, toModel);

            var graph = model.Graph;
            var rootVertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 0.ToString(CultureInfo.InvariantCulture)));

            var parent = nodes[0];

            // First node
            parent.Item2.Add(nodes[1].Item1);
            project.Raise(p => p.OnDatasetCreated += null, EventArgs.Empty);

            var vertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 1.ToString(CultureInfo.InvariantCulture)));
            Assert.IsNotNull(vertex);

            var edges = graph.InEdges(vertex);
            Assert.AreEqual(1, edges.Count());
            Assert.AreSame(rootVertex, edges.First().Source);

            // Second node
            parent.Item2.Add(nodes[2].Item1);
            project.Raise(p => p.OnDatasetCreated += null, EventArgs.Empty);

            vertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 2.ToString(CultureInfo.InvariantCulture)));
            Assert.IsNotNull(vertex);

            edges = graph.InEdges(vertex);
            Assert.AreEqual(1, edges.Count());
            Assert.AreSame(rootVertex, edges.First().Source);
        }
예제 #3
0
        public void ReloadProject()
        {
            // Create a 'binary' tree of datasets. This should create the following tree:
            //                            X
            //                          /   \
            //                         /     \
            //                        /       \
            //                       /         \
            //                      /           \
            //                     X             X
            //                   /   \         /   \
            //                  /     \       /     \
            //                 /       \     /       \
            //                X         X   X         X
            //              /   \     /   \
            //             X     X   X     X
            var nodes        = new List <Mock <IProxyDataset> >();
            var datasets     = new Queue <Tuple <Mock <IProxyDataset>, List <Mock <IProxyDataset> > > >();
            var rootChildren = new List <Mock <IProxyDataset> >();
            var root         = CreateDataset(0, rootChildren);

            datasets.Enqueue(new Tuple <Mock <IProxyDataset>, List <Mock <IProxyDataset> > >(root, rootChildren));
            nodes.Add(root);

            int count = 0;

            while (count < 10)
            {
                var tuple = datasets.Dequeue();

                count++;
                var leftChildCollection = new List <Mock <IProxyDataset> >();
                var leftChild           = CreateDataset(count, leftChildCollection);

                tuple.Item2.Add(leftChild);
                datasets.Enqueue(new Tuple <Mock <IProxyDataset>, List <Mock <IProxyDataset> > >(leftChild, leftChildCollection));
                nodes.Add(leftChild);

                count++;
                var rightChildCollection = new List <Mock <IProxyDataset> >();
                var rightChild           = CreateDataset(count, rightChildCollection);

                tuple.Item2.Add(rightChild);
                datasets.Enqueue(new Tuple <Mock <IProxyDataset>, List <Mock <IProxyDataset> > >(rightChild, rightChildCollection));
                nodes.Add(rightChild);
            }

            var context = new Mock <IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                .Returns(true);
            }

            var tracker = new Mock <ITrackSteppingProgress>();
            var project = new Mock <IProject>();
            {
                project.Setup(p => p.BaseDataset())
                .Returns(root.Object);
            }

            var projectFacade = new ProjectFacade(project.Object);
            var projectLink   = new Mock <ILinkToProjects>();
            {
                projectLink.Setup(p => p.ActiveProject())
                .Returns(projectFacade);
            }

            Func <DatasetFacade, DatasetModel> toModel = d => new DatasetModel(context.Object, tracker.Object, projectLink.Object, d);
            var model = new DatasetGraphModel(context.Object, projectFacade, toModel);

            var graph = model.Graph;

            Assert.AreEqual(nodes.Count, graph.VertexCount);

            var rootVertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 0.ToString(CultureInfo.InvariantCulture)));

            Assert.IsNotNull(rootVertex);

            var vertices           = new Queue <DatasetViewVertex>();
            var linearisedVertices = new List <DatasetViewVertex>();

            vertices.Enqueue(rootVertex);
            linearisedVertices.Add(rootVertex);

            while (vertices.Count > 0)
            {
                var vertex   = vertices.Dequeue();
                var outEdges = graph.OutEdges(vertex);

                foreach (var edge in outEdges)
                {
                    vertices.Enqueue(edge.Target);
                    linearisedVertices.Add(edge.Target);
                }
            }

            Assert.That(
                linearisedVertices.Select(l => l.Model.Name),
                Is.EquivalentTo(nodes.Select(n => n.Object.Name)));
        }
예제 #4
0
        public void ReloadProject()
        {
            // Create a 'binary' tree of datasets. This should create the following tree:
            //                            X
            //                          /   \
            //                         /     \
            //                        /       \
            //                       /         \
            //                      /           \
            //                     X             X
            //                   /   \         /   \
            //                  /     \       /     \
            //                 /       \     /       \
            //                X         X   X         X
            //              /   \     /   \
            //             X     X   X     X
            var nodes = new List<Mock<IProxyDataset>>();
            var datasets = new Queue<Tuple<Mock<IProxyDataset>, List<Mock<IProxyDataset>>>>();
            var rootChildren = new List<Mock<IProxyDataset>>();
            var root = CreateDataset(0, rootChildren);
            datasets.Enqueue(new Tuple<Mock<IProxyDataset>, List<Mock<IProxyDataset>>>(root, rootChildren));
            nodes.Add(root);

            int count = 0;
            while (count < 10)
            {
                var tuple = datasets.Dequeue();

                count++;
                var leftChildCollection = new List<Mock<IProxyDataset>>();
                var leftChild = CreateDataset(count, leftChildCollection);

                tuple.Item2.Add(leftChild);
                datasets.Enqueue(new Tuple<Mock<IProxyDataset>, List<Mock<IProxyDataset>>>(leftChild, leftChildCollection));
                nodes.Add(leftChild);

                count++;
                var rightChildCollection = new List<Mock<IProxyDataset>>();
                var rightChild = CreateDataset(count, rightChildCollection);

                tuple.Item2.Add(rightChild);
                datasets.Enqueue(new Tuple<Mock<IProxyDataset>, List<Mock<IProxyDataset>>>(rightChild, rightChildCollection));
                nodes.Add(rightChild);
            }

            var context = new Mock<IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                    .Returns(true);
            }

            var tracker = new Mock<ITrackSteppingProgress>();
            var project = new Mock<IProject>();
            {
                project.Setup(p => p.BaseDataset())
                    .Returns(root.Object);
            }

            var projectFacade = new ProjectFacade(project.Object);
            var projectLink = new Mock<ILinkToProjects>();
            {
                projectLink.Setup(p => p.ActiveProject())
                    .Returns(projectFacade);
            }

            Func<DatasetFacade, DatasetModel> toModel = d => new DatasetModel(context.Object, tracker.Object, projectLink.Object, d);
            var model = new DatasetGraphModel(context.Object, projectFacade, toModel);

            var graph = model.Graph;
            Assert.AreEqual(nodes.Count, graph.VertexCount);

            var rootVertex = graph.Vertices.FirstOrDefault(d => string.Equals(d.Model.Name, 0.ToString(CultureInfo.InvariantCulture)));
            Assert.IsNotNull(rootVertex);

            var vertices = new Queue<DatasetViewVertex>();
            var linearisedVertices = new List<DatasetViewVertex>();
            vertices.Enqueue(rootVertex);
            linearisedVertices.Add(rootVertex);

            while (vertices.Count > 0)
            {
                var vertex = vertices.Dequeue();
                var outEdges = graph.OutEdges(vertex);

                foreach (var edge in outEdges)
                {
                    vertices.Enqueue(edge.Target);
                    linearisedVertices.Add(edge.Target);
                }
            }

            Assert.That(
                linearisedVertices.Select(l => l.Model.Name),
                Is.EquivalentTo(nodes.Select(n => n.Object.Name)));
        }