コード例 #1
0
        public void CanShowDefaultColumns()
        {
            TabularOutputSettings outputSettings = new(
                new MockEnvironment()
            {
                ConsoleBufferWidth = 100
            });

            IEnumerable <Tuple <string, string, string> > data = new List <Tuple <string, string, string> >()
            {
                new Tuple <string, string, string>("My test data", "My test data", "Column 3 data"),
                new Tuple <string, string, string>("My test data", "My test data", "Column 3 data")
            };

            string expectedOutput = $"Column 1      Column 2    {Environment.NewLine}------------  ------------{Environment.NewLine}My test data  My test data{Environment.NewLine}My test data  My test data{Environment.NewLine}";

            TabularOutput <Tuple <string, string, string> > formatter =
                TabularOutput.TabularOutput
                .For(outputSettings, data)
                .DefineColumn(t => t.Item1, "Column 1", showAlways: true)
                .DefineColumn(t => t.Item2, "Column 2", columnName: "column2")  //defaultColumn: true by default
                .DefineColumn(t => t.Item3, "Column 3", columnName: "column3", defaultColumn: false);

            string result = formatter.Layout();

            Assert.Equal(expectedOutput, result);
        }
コード例 #2
0
        public void CannotShrinkOverMinimumWidth()
        {
            TabularOutputSettings outputSettings = new(
                new MockEnvironment()
            {
                ConsoleBufferWidth = 10,      //less than need for data below
            });

            IEnumerable <Tuple <string, string> > data = new List <Tuple <string, string> >()
            {
                new Tuple <string, string>("My test data", "My test data"),
                new Tuple <string, string>("My test data", "My test data")
            };

            string expectedOutput = $"Column 1      Column 2   {Environment.NewLine}------------  -----------{Environment.NewLine}My test data  My test ...{Environment.NewLine}My test data  My test ...{Environment.NewLine}";

            TabularOutput <Tuple <string, string> > formatter =
                TabularOutput.TabularOutput
                .For(outputSettings, data)
                .DefineColumn(t => t.Item1, "Column 1", shrinkIfNeeded: true, minWidth: 15)
                .DefineColumn(t => t.Item2, "Column 2", shrinkIfNeeded: true, minWidth: 8);

            string result = formatter.Layout();

            Assert.Equal(expectedOutput, result);
        }
コード例 #3
0
        public void CanShrinkMultipleColumnsAndBalanceShrinking()
        {
            TabularOutputSettings outputSettings = new(
                new MockEnvironment()
            {
                ConsoleBufferWidth = 6 + 2 + 6 + 1,
            });

            IEnumerable <Tuple <string, string> > data = new List <Tuple <string, string> >()
            {
                new Tuple <string, string>("My test data", "My test data"),
                new Tuple <string, string>("My test data", "My test data")
            };

            string expectedOutput = $"Col...  Col...{Environment.NewLine}------  ------{Environment.NewLine}My ...  My ...{Environment.NewLine}My ...  My ...{Environment.NewLine}";

            TabularOutput <Tuple <string, string> > formatter =
                TabularOutput.TabularOutput
                .For(outputSettings, data)
                .DefineColumn(t => t.Item1, "Column 1", shrinkIfNeeded: true, minWidth: 2)
                .DefineColumn(t => t.Item2, "Column 2", shrinkIfNeeded: true, minWidth: 2);

            string result = formatter.Layout();

            Assert.Equal(expectedOutput, result);
        }
コード例 #4
0
        public void CanRightAlign()
        {
            TabularOutputSettings outputSettings = new(
                new MockEnvironment()
            {
                ConsoleBufferWidth = 10
            });

            IEnumerable <Tuple <string, string> > data = new List <Tuple <string, string> >()
            {
                new Tuple <string, string>("Monday", "Wednesday"),
                new Tuple <string, string>("Tuesday", "Sunday")
            };

            string expectedOutput = $"Column 1   Column 2{Environment.NewLine}--------  ---------{Environment.NewLine}Monday    Wednesday{Environment.NewLine}Tuesday      Sunday{Environment.NewLine}";

            TabularOutput <Tuple <string, string> > formatter =
                TabularOutput.TabularOutput
                .For(outputSettings, data)
                .DefineColumn(t => t.Item1, "Column 1")
                .DefineColumn(t => t.Item2, "Column 2", rightAlign: true);

            string result = formatter.Layout();

            Assert.Equal(expectedOutput, result);
        }
コード例 #5
0
        public void WriteHelp(IConsoleCommand comm)
        {
            Console.WriteLine($"Help for command: '{comm.Keyword?.ToUpper() ?? "Unknown"}'");
            var to = new TabularOutput(77);
            foreach (var sig in comm.Signatures)
            {
                to.AddRow(comm.Keyword, sig.GetHelp(), ":", sig.Description);
            }

            WriteTable(to);
        }
コード例 #6
0
        public void WriteHelp(IConsoleCommand comm)
        {
            Console.WriteLine($"Help for command: '{comm.Keyword?.ToUpper() ?? "Unknown"}'");
            var to = new TabularOutput(77);

            foreach (var sig in comm.Signatures)
            {
                to.AddRow(comm.Keyword, sig.GetHelp(), ":", sig.Description);
            }

            WriteTable(to);
        }
コード例 #7
0
 public void WriteTable(TabularOutput table)
 {
     foreach (var row in table.Data)
     {
         for (var cellIndex = 0; cellIndex < row.Count; cellIndex++)
         {
             var colWidth = table.GetColumnWidth(cellIndex);
             var colStart = table.GetColumnStart(cellIndex);
             var realColWidth = colStart + colWidth > Console.BufferWidth
                                    ? Console.BufferWidth - colStart
                                    : colWidth;
             WriteCell(row[cellIndex], colStart, realColWidth);
         }
         WriteLine("");
     }
 }
コード例 #8
0
 public void WriteTable(TabularOutput table)
 {
     foreach (var row in table.Data)
     {
         for (var cellIndex = 0; cellIndex < row.Count; cellIndex++)
         {
             var colWidth     = table.GetColumnWidth(cellIndex);
             var colStart     = table.GetColumnStart(cellIndex);
             var realColWidth = colStart + colWidth > Console.BufferWidth
                                    ? Console.BufferWidth - colStart
                                    : colWidth;
             WriteCell(row[cellIndex], colStart, realColWidth);
         }
         WriteLine("");
     }
 }
コード例 #9
0
        internal static NewCommandStatus HandleAmbiguousTemplateGroup(
            IEngineEnvironmentSettings environmentSettings,
            TemplatePackageManager templatePackageManager,
            IEnumerable <TemplateGroup> templateGroups,
            Reporter reporter,
            CancellationToken cancellationToken = default)
        {
            IEnvironment environment = environmentSettings.Environment;

            reporter.WriteLine(LocalizableStrings.AmbiguousTemplatesHeader.Bold().Red());
            TabularOutput <TemplateGroup> formatter =
                TabularOutput.TabularOutput
                .For(
                    new TabularOutputSettings(environment),
                    templateGroups)
                .DefineColumn(t => t.GroupIdentity ?? t.Templates[0].Identity, out object?identityColumn, LocalizableStrings.ColumnNameIdentity, showAlways: true)
                .DefineColumn(t => t.Name, LocalizableStrings.ColumnNameTemplateName, shrinkIfNeeded: true, minWidth: 15, showAlways: true)
                .DefineColumn(t => string.Join(",", t.ShortNames), LocalizableStrings.ColumnNameShortName, showAlways: true)
                .DefineColumn(t => string.Join(",", t.Languages), LocalizableStrings.ColumnNameLanguage, showAlways: true)
                .DefineColumn(t => string.Join(",", t.Authors), LocalizableStrings.ColumnNameAuthor, showAlways: true, shrinkIfNeeded: true, minWidth: 10)
                .DefineColumn(t => Task.Run(() => GetTemplatePackagesList(t)).GetAwaiter().GetResult(), LocalizableStrings.ColumnNamePackage, showAlways: true)
                .OrderBy(identityColumn, StringComparer.CurrentCultureIgnoreCase);

            reporter.WriteLine(formatter.Layout().Bold().Red());
            reporter.WriteLine(LocalizableStrings.AmbiguousTemplatesMultiplePackagesHint.Bold().Red());
            return(NewCommandStatus.NotFound);

            async Task <string> GetTemplatePackagesList(TemplateGroup templateGroup)
            {
                try
                {
                    IReadOnlyList <IManagedTemplatePackage> templatePackages =
                        await templateGroup.GetManagedTemplatePackagesAsync(templatePackageManager, cancellationToken).ConfigureAwait(false);

                    return(string.Join(environment.NewLine, templatePackages.Select(templatePackage => templatePackage.Identifier)));
                }
                catch (Exception ex)
                {
                    environmentSettings.Host.Logger.LogWarning($"Failed to get information about template packages for template group {templateGroup.GroupIdentity}.");
                    environmentSettings.Host.Logger.LogDebug($"Details: {ex}.");
                    return(string.Empty);
                }
            }
        }
コード例 #10
0
        public void CanShrinkWideCharsCorrectly()
        {
            TabularOutputSettings outputSettings = new(
                new MockEnvironment()
            {
                ConsoleBufferWidth = 30
            });

            IEnumerable <Tuple <string, string> > data = new List <Tuple <string, string> >()
            {
                new Tuple <string, string>("dotnet gitignore 文件", "gitignore"),
                new Tuple <string, string>("Dotnet 本地工具清单文件", "tool-manifest"),
                new Tuple <string, string>("控制台应用程序", "console"),
                new Tuple <string, string>("类库", "classlib"),
            };

            string expectedOutput =
                @"模板名          短名称       
--------------  -------------
dotnet giti...  gitignore    
Dotnet 本地...  tool-manifest
控制台应用程序  console      
类库            classlib     
";

            TabularOutput <Tuple <string, string> > formatter =
                TabularOutput.TabularOutput
                .For(
                    outputSettings,
                    data)
                .DefineColumn(t => t.Item1, "模板名", shrinkIfNeeded: true)
                .DefineColumn(t => t.Item2, "短名称");

            string result = formatter.Layout();

            Assert.Equal(expectedOutput, result);
        }
コード例 #11
0
            public override string ToString()
            {
                if ( image == null )
                {
                    return UNINITIALIZED;
                }
                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "image" ).alignLeft();
                t.addColumn( "type" );
                t.addColumn( "tf" );
                t.addColumn( "tfByDocument" ).alignLeft();
                t.addColumn( "fieldIndices" );

                if ( stemIndex != null )
                {
                    t.addColumn( "stemIndex" );
                    t.addColumn( "=>stem" ).alignLeft();
                }

                for ( int i = 0; i < image.Length; i++, t.nextRow() )
                {
                    t.rowData(
                        i,
                        image[i] == null ? "<null>" : new String( image[i] ),
                        type[i],
                        tf[i],
                        SparseArray.sparseToString( tfByDocument[i] ) );

                    t.rowData( Arrays.toString( toFieldIndexes( fieldIndices[i] ) ).replace( " ", "" ) );

                    if ( stemIndex != null )
                    {
                        t.rowData( stemIndex[i] );
                        t.rowData( new String( allStems.image[stemIndex[i]] ) );
                    }
                }

                t.flush();
                sw.Write( "\n" );
                return sw.ToString();
            }
コード例 #12
0
            public override string ToString()
            {
                if ( image == null )
                {
                    return UNINITIALIZED;
                }
                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "token" ).alignLeft();
                t.addColumn( "type" );
                t.addColumn( "fieldIndex" );
                t.addColumn( "=>field" ).alignLeft();
                t.addColumn( "docIdx" );
                t.addColumn( "wordIdx" );
                t.addColumn( "=>word" ).alignLeft();
                for ( int i = 0; i < image.Length; i++, t.nextRow() )
                {
                    t.rowData(
                        i,
                        image[i] == null ? "<null>" : new String( image[i] ),
                        type[i],
                        fieldIndex[i],
                        fieldIndex[i] >= 0 ? allFields.name[fieldIndex[i]] : null,
                        documentIndex[i],
                        wordIndex[i],
                        wordIndex[i] >= 0 ? new String( allWords.image[wordIndex[i]] ) : null );
                }
                if ( suffixOrder != null )
                {
                    t = new TabularOutput( sw );
                    t.addColumn( "#" );
                    t.addColumn( "sa" );
                    t.addColumn( "lcp" );
                    t.addColumn( "=>words" ).alignLeft();

                    sw.Write( "\n" );
                    StringBuilder suffixImage = new StringBuilder();
                    for ( int i = 0; i < suffixOrder.Length; i++, t.nextRow() )
                    {
                        t.rowData(
                            i,
                            suffixOrder[i],
                            lcp[i] );

                        int windowLength = 5;
                        for ( int j = suffixOrder[i], max = Math.Min( suffixOrder[i] + windowLength, wordIndex.Length ); j < max; )
                        {
                            suffixImage.Append(
                                wordIndex[j] >= 0 ? new String( allWords.image[wordIndex[j]] ) : "|" ).Append( " " );
                            if ( ++j == max && j != wordIndex.Length )
                                suffixImage.Append( " [...]" );
                        }
                        t.rowData( suffixImage.ToString() );
                        suffixImage.Clear();
                    }
                    sw.Write( "\n" );
                }

                t.flush();
                sw.Write( "\n" );
                return sw.ToString();
            }
コード例 #13
0
            public override string ToString()
            {
                if ( wordIndices == null )
                {
                    return UNINITIALIZED;
                }

                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "wordIndices" );
                t.addColumn( "=>words" ).alignLeft();
                t.addColumn( "tf" );
                t.addColumn( "tfByDocument" ).alignLeft();

                for ( int i = 0; i < wordIndices.Length; i++, t.nextRow() )
                {
                    t.rowData(
                        i,
                        Arrays.toString( wordIndices[i] ).replace( " ", "" ),
                        getPhrase( i ),
                        tf[i],
                        SparseArray.sparseToString( tfByDocument[i] ) );
                }

                t.flush();
                sw.Write( "\n" );
                return sw.ToString();
            }
コード例 #14
0
            public override string ToString()
            {
                if ( featureIndex == null )
                    return UNINITIALIZED;

                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "featureIdx" );
                t.addColumn( "=>feature" ).alignLeft();
                t.addColumn( "documentIdx" ).alignLeft();

                for ( int i = 0; i < featureIndex.Length; i++, t.nextRow() )
                {
                    t.rowData(
                        i,
                        featureIndex[i],
                        getLabel( i ),
                        documentIndices != null ? documentIndices[i].toString().replace( " ", "" ) : "" );
                }

                t.flush();
                sw.Write( "\n" );
                return t.toString();
            }
コード例 #15
0
            public override string ToString()
            {
                if ( name == null )
                {
                    return UNINITIALIZED;
                }

                StringWriter sw = new StringWriter();
                TabularOutput t = new TabularOutput( sw );
                t.flushEvery( Int32.MaxValue );
                t.addColumn( "#" );
                t.addColumn( "name" ).format( "%-10s" ).alignLeft();

                int i = 0;
                foreach ( String n in name )
                {
                    t.rowData( i++, n ).nextRow();
                }

                t.flush();
                sw.Write( "\n" );
                return sw.ToString();
            }