public HierarchicalDataContext GetColoredNestedExample()
        {
            var root   = new HierarchicalData("root");
            var scheme = new ColorScheme(new[] { "c1", "c2", "c3" });

            HierarchicalData child;

            child = new HierarchicalData("ra", 10)
            {
                ColorKey = "c1"
            };
            root.AddChild(child);
            child = new HierarchicalData("ra", 10)
            {
                ColorKey = "c2"
            };
            root.AddChild(child);
            child = new HierarchicalData("ra", 10)
            {
                ColorKey = "c3"
            };
            root.AddChild(child);
            child = new HierarchicalData("ra", 10)
            {
                ColorKey = "unknown"
            };
            root.AddChild(child);

            root.SumAreaMetrics();
            Console.WriteLine(root.CountLeafNodes());
            return(new HierarchicalDataContext(root, scheme));
        }
        public HierarchicalDataContext CreateHierarchyFromFilesystem(string path, bool subDirs)
        {
            var item = new HierarchicalData(path);

            FillChildren(item, subDirs);

            item.RemoveLeafNodesWithoutArea();
            item.SumAreaMetrics();
            item.NormalizeWeightMetrics();

            Debug.WriteLine("Nodes: " + item.CountLeafNodes());
            return(new HierarchicalDataContext(item));
        }
        public void RemoveLeafNodesWithoutArea_WorksRecursively()
        {
            // Arrange
            var root    = new HierarchicalData("root");
            var a_leaf  = new HierarchicalData("a_leaf", 1);
            var b_empty = new HierarchicalData("b");
            var c_level = new HierarchicalData("c");
            var c_leaf  = new HierarchicalData("c_leaf", double.NaN);

            root.AddChild(a_leaf);
            root.AddChild(b_empty);
            root.AddChild(c_level);
            c_level.AddChild(c_leaf);

            root.RemoveLeafNodesWithoutArea();

            // Assert
            // After c_leaf was deleted, c_level is deleted too.
            Assert.AreEqual(1, root.CountLeafNodes());
            Assert.AreEqual("root", root.Name);
            Assert.AreEqual(1, root.Children.Count);
            Assert.AreEqual("a_leaf", root.Children.First().Name);
        }