コード例 #1
0
        public void ErrorCounterTests()
        {
            var logger = new ActivityLogger();

            // Binds the TestHelper.Logger logger to this one.
            logger.Output.RegisterMuxClient(TestHelper.Logger.Output.ExternalInput);

            // Registers the ErrorCounter first: it will be the last one to be called, but
            // this does not prevent the PathCatcher to work: the path elements reference the group
            // so that aany conclusion arriving after PathCatcher.OnClosing are available.
            ActivityLoggerErrorCounter c = new ActivityLoggerErrorCounter();

            logger.Output.RegisterMuxClient(c);

            // Registers the PathCatcher now: it will be called BEFORE the ErrorCounter.
            ActivityLoggerPathCatcher p = new ActivityLoggerPathCatcher();

            logger.Output.RegisterClient(p);

            Assert.That(c.GenerateConclusion, Is.True, "Must be the default.");
            Assert.That(c.Root.MaxLogLevel == LogLevel.None);

            logger.Trace("T1");
            Assert.That(!c.Root.HasWarnOrError && !c.Root.HasError);
            Assert.That(c.Root.MaxLogLevel == LogLevel.Trace);
            Assert.That(c.Root.ToString(), Is.Null);

            logger.Warn("W1");
            Assert.That(c.Root.HasWarnOrError && !c.Root.HasError);
            Assert.That(c.Root.MaxLogLevel == LogLevel.Warn);
            Assert.That(c.Root.ToString(), Is.Not.Null.And.Not.Empty);

            logger.Error("E2");
            Assert.That(c.Root.HasWarnOrError && c.Root.HasError);
            Assert.That(c.Root.ErrorCount == 1);
            Assert.That(c.Root.MaxLogLevel == LogLevel.Error);
            Assert.That(c.Root.ToString(), Is.Not.Null.And.Not.Empty);

            c.Root.ClearError();
            Assert.That(c.Root.HasWarnOrError && !c.Root.HasError);
            Assert.That(c.Root.ErrorCount == 0);
            Assert.That(c.Root.MaxLogLevel == LogLevel.Warn);
            Assert.That(c.Root.ToString(), Is.Not.Null);

            c.Root.ClearWarn();
            Assert.That(!c.Root.HasWarnOrError && !c.Root.HasError);
            Assert.That(c.Root.MaxLogLevel == LogLevel.Info);
            Assert.That(c.Root.ToString(), Is.Null);

            using (logger.OpenGroup(LogLevel.Trace, "G1"))
            {
                using (logger.OpenGroup(LogLevel.Info, "G2"))
                {
                    logger.Error("E1");
                    logger.Fatal("F1");
                    Assert.That(c.Root.HasWarnOrError && c.Root.HasError);
                    Assert.That(c.Root.ErrorCount == 1 && c.Root.FatalCount == 1);
                    Assert.That(c.Root.WarnCount == 0);

                    using (logger.OpenGroup(LogLevel.Info, "G3"))
                    {
                        Assert.That(!c.Current.HasWarnOrError && !c.Current.HasError);
                        Assert.That(c.Current.ErrorCount == 0 && c.Current.FatalCount == 0 && c.Current.WarnCount == 0);

                        logger.Error("E2");

                        Assert.That(c.Current.HasWarnOrError && c.Current.HasError);
                        Assert.That(c.Current.ErrorCount == 1 && c.Current.FatalCount == 0 && c.Current.WarnCount == 0);
                    }
                }
                Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Text + '-' + e.GroupConclusion.ToStringGroupConclusion())), Is.EqualTo("G1->G2-1 Fatal error, 2 Errors>G3-1 Error>E2-"));
                logger.Error("E3");
                logger.Fatal("F2");
                logger.Warn("W2");
                Assert.That(c.Root.HasWarnOrError && c.Root.HasError);
                Assert.That(c.Root.FatalCount == 2);
                Assert.That(c.Root.ErrorCount == 3);
                Assert.That(c.Root.MaxLogLevel == LogLevel.Fatal);
            }
            Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Text + '-' + e.GroupConclusion.ToStringGroupConclusion())), Is.EqualTo("G1-2 Fatal errors, 3 Errors, 1 Warning>F2-"));
            Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Text + '-' + e.GroupConclusion.ToStringGroupConclusion())), Is.EqualTo("G1-2 Fatal errors, 3 Errors, 1 Warning>W2-"));
        }
コード例 #2
0
        public void PathCatcherTests()
        {
            var logger = DefaultActivityLogger.Create();

            // Binds the TestHelper.Logger logger to this one.
            logger.Output.RegisterMuxClient(TestHelper.Logger.Output.ExternalInput);

            ActivityLoggerPathCatcher p = new ActivityLoggerPathCatcher();

            logger.Output.RegisterMuxClient(p);

            logger.Trace("Trace n°1");
            Assert.That(p.DynamicPath.Select(e => e.Level.ToString() + '|' + e.Text).Single(), Is.EqualTo("Trace|Trace n°1"));
            Assert.That(p.LastErrorPath, Is.Null);
            Assert.That(p.LastWarnOrErrorPath, Is.Null);

            logger.Trace("Trace n°2");
            Assert.That(p.DynamicPath.Select(e => e.Level.ToString() + '|' + e.Text).Single(), Is.EqualTo("Trace|Trace n°2"));
            Assert.That(p.LastErrorPath, Is.Null);
            Assert.That(p.LastWarnOrErrorPath, Is.Null);

            logger.Warn("W1");
            Assert.That(p.DynamicPath.Select(e => e.Level.ToString() + '|' + e.Text).Single(), Is.EqualTo("Warn|W1"));
            Assert.That(p.LastErrorPath, Is.Null);
            Assert.That(p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text).Single(), Is.EqualTo("Warn|W1"));

            logger.Error("E2");
            logger.Warn("W1bis");
            Assert.That(p.DynamicPath.Select(e => e.Level.ToString() + '|' + e.Text).Single(), Is.EqualTo("Warn|W1bis"));
            Assert.That(p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text).Single(), Is.EqualTo("Error|E2"));
            Assert.That(p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text).Single(), Is.EqualTo("Warn|W1bis"));

            p.ClearLastWarnPath();
            Assert.That(p.LastErrorPath, Is.Not.Null);
            Assert.That(p.LastWarnOrErrorPath, Is.Null);

            p.ClearLastErrorPath();
            Assert.That(p.LastErrorPath, Is.Null);

            using (logger.OpenGroup(LogLevel.Trace, "G1"))
            {
                using (logger.OpenGroup(LogLevel.Info, "G2"))
                {
                    Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2"));
                    Assert.That(p.LastErrorPath, Is.Null);
                    using (logger.OpenGroup(LogLevel.Trace, "G3"))
                    {
                        using (logger.OpenGroup(LogLevel.Info, "G4"))
                        {
                            logger.Warn("W1");

                            Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2>G3>G4>W1"));

                            logger.Info(
                                new Exception("An exception logged as an Info.",
                                              new Exception("With an inner exception. Since these exceptions have not been thrown, there is no stack trace.")),
                                "Test With an exception: a Group is created. Since the text of the log is given, the Exception.Message must be displayed explicitely.");

                            Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2>G3>G4>Test With an exception: a Group is created. Since the text of the log is given, the Exception.Message must be displayed explicitely."));

                            try
                            {
                                try
                                {
                                    try
                                    {
                                        try
                                        {
                                            throw new Exception("Deepest excpetion.");
                                        }
                                        catch (Exception ex)
                                        {
                                            throw new Exception("Yet another inner with inner Exception.", ex);
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        throw new Exception("Exception with inner Exception.", ex);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    throw new Exception("Log without log text: the text of the entry is the Exception.Message.", ex);
                                }
                            }
                            catch (Exception ex)
                            {
                                logger.Trace(ex);
                            }

                            Assert.That(p.LastErrorPath, Is.Null);
                            Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Info|G4>Warn|W1"));
                        }
                        Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2>G3>G4"));
                        Assert.That(p.LastErrorPath, Is.Null);
                        Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Info|G4>Warn|W1"));

                        logger.Error("E1");
                        Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2>G3>E1"));
                        Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Error|E1"));
                        Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Error|E1"));
                    }
                    Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2>G3"));
                    Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Error|E1"));
                    Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Error|E1"));
                }
                Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2"));
                using (logger.OpenGroup(LogLevel.Trace, "G2Bis"))
                {
                    Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2Bis"));
                    Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Error|E1"));
                    Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Error|E1"));

                    logger.Warn("W2");
                    Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>G2Bis>W2"));
                    Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Trace|G2Bis>Warn|W2"));
                    Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Info|G2>Trace|G3>Error|E1"));
                }
                logger.Fatal("F1");
                Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("G1>F1"));
                Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Fatal|F1"));
                Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Fatal|F1"));
            }

            // Extraneous closing are ignored.
            logger.CloseGroup(null);

            logger.Warn("W3");
            Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("W3"));
            Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Warn|W3"));
            Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Fatal|F1"));

            // Extraneous closing are ignored.
            logger.CloseGroup(null);

            logger.Warn("W4");
            Assert.That(String.Join(">", p.DynamicPath.Select(e => e.Text)), Is.EqualTo("W4"));
            Assert.That(String.Join(">", p.LastWarnOrErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Warn|W4"));
            Assert.That(String.Join(">", p.LastErrorPath.Select(e => e.Level.ToString() + '|' + e.Text)), Is.EqualTo("Trace|G1>Fatal|F1"));

            p.ClearLastWarnPath(true);
            Assert.That(p.LastErrorPath, Is.Null);
            Assert.That(p.LastWarnOrErrorPath, Is.Null);
        }