public Task WriteToConsole()
        {
            void RecurseChildren(IHasTreeNodes node, IEnumerable <IConfigurationSection> children)
            {
                foreach (IConfigurationSection child in children)
                {
                    var valuesAndProviders = GetValueAndProviders(_configRoot, child.Path);

                    IHasTreeNodes parent = node;
                    if (valuesAndProviders.Count == 0)
                    {
                        parent = node.AddNode($"[blue]{child.Key}[/]");
                    }
                    else
                    {
                        var current     = valuesAndProviders.Pop();
                        var currentNode = node.AddNode(new Table()
                                                       .Border(TableBorder.None)
                                                       .HideHeaders()
                                                       .AddColumn("Key")
                                                       .AddColumn("Value")
                                                       .AddColumn("Provider")
                                                       .HideHeaders()
                                                       .AddRow($"[yellow]{child.Key}[/]", current.Value, $@"([grey]{current.Provider}[/])")
                                                       );

                        // Add the overriden values
                        foreach (var valueAndProvider in valuesAndProviders)
                        {
                            currentNode.AddNode(new Table()
                                                .Border(TableBorder.None)
                                                .HideHeaders()
                                                .AddColumn("Value")
                                                .AddColumn("Provider")
                                                .HideHeaders()
                                                .AddRow($"[strikethrough]{valueAndProvider.Value}[/]", $@"([grey]{valueAndProvider.Provider}[/])")
                                                );
                        }
                    }

                    RecurseChildren(parent, child.GetChildren());
                }
            }

            var tree = new Tree(string.Empty);

            RecurseChildren(tree, _configRoot.GetChildren());

            AnsiConsole.Render(tree);

            return(Task.CompletedTask);
        }
        private void FormatTreeNode(TreeNode debugTreeNode, IHasTreeNodes spectreTreeNode)
        {
            var childNode = spectreTreeNode.AddNode(debugTreeNode.DebugElement.Element.GetType().Name);

            foreach (var printableProperty in debugTreeNode.DebugElement.PrintableProperties)
            {
                var valueFormatter = TestingLibraryOptions.DebugOptions.DefaultValueFormatters.First(x =>
                                                                                                     x.CanHandle(printableProperty.Value));
                childNode.AddNode(EscapeMarkup($"{printableProperty.Key}: {valueFormatter.Format(printableProperty.Value)}"));
            }

            foreach (var treeNode in debugTreeNode.Nodes)
            {
                FormatTreeNode(treeNode, childNode);
            }
        }
示例#3
0
        public Task WriteToConsole()
        {
            void RecurseChildren(IHasTreeNodes node, IEnumerable <IConfigurationSection> children)
            {
                foreach (IConfigurationSection child in children)
                {
                    (string Value, IConfigurationProvider Provider)valueAndProvider = GetValueAndProvider(_configRoot, child.Path);

                    IHasTreeNodes parent = node;
                    if (valueAndProvider.Provider != null)
                    {
                        node.AddNode(new Table()
                                     .Border(TableBorder.None)
                                     .HideHeaders()
                                     .AddColumn("Key")
                                     .AddColumn("Value")
                                     .AddColumn("Provider")
                                     .HideHeaders()
                                     .AddRow($"[yellow]{child.Key}[/]", valueAndProvider.Value, $@"([grey]{valueAndProvider.Provider}[/])")
                                     );
                    }
                    else
                    {
                        parent = node.AddNode($"[yellow]{child.Key}[/]");
                    }

                    RecurseChildren(parent, child.GetChildren());
                }
            }

            var tree = new Tree(string.Empty);

            RecurseChildren(tree, _configRoot.GetChildren());

            AnsiConsole.Render(tree);

            return(Task.CompletedTask);
        }
示例#4
0
        public Task WriteToConsole()
        {
            if (!(_configuration is IConfigurationRoot root))
            {
                AnsiConsole.MarkupLine($"[red]{PreviewErrorMessage}[/]");
                return(Task.CompletedTask);
            }

            void RecurseChildren(IHasTreeNodes node, IEnumerable <IConfigurationSection> children)
            {
                foreach (IConfigurationSection child in children)
                {
                    var valuesAndProviders = GetValueAndProviders(root, child.Path);

                    IHasTreeNodes parent = node;
                    if (valuesAndProviders.Count == 0)
                    {
                        parent = node.AddNode($"[blue]{child.Key}[/]");
                    }
                    else
                    {
                        // Remove the last value added to the stack. This is the "current" value
                        var finalValue  = valuesAndProviders.Pop();
                        var currentNode = node.AddNode(
                            new Table()
                            .Border(TableBorder.None)
                            .HideHeaders()
                            .AddColumn("Key")
                            .AddColumn("Value")
                            .AddColumn("Provider")
                            .HideHeaders()
                            .AddRow($"[yellow]{child.Key}[/]", finalValue.Value, $@"([grey]{finalValue.Provider}[/])")
                            );

                        // Loop through the remaining (overridden) values
                        // Display them as children of the current value
                        foreach (var overriddenValue in valuesAndProviders)
                        {
                            currentNode.AddNode(
                                new Table()
                                .Border(TableBorder.None)
                                .HideHeaders()
                                .AddColumn("Value")
                                .AddColumn("Provider")
                                .HideHeaders()
                                .AddRow($"[strikethrough]{overriddenValue.Value}[/]", $@"([grey]{overriddenValue.Provider}[/])")
                                );
                        }
                    }

                    RecurseChildren(parent, child.GetChildren());
                }
            }

            var tree = new Tree(string.Empty);

            RecurseChildren(tree, root.GetChildren());

            AnsiConsole.Render(tree);

            return(Task.CompletedTask);
        }