public void log_an_object_sticks_the_ToString_value_of_the_object_on_to_the_description()
        {
            var loader = new StubBottleLoader("a", "b");
            diagnostics.LogObject(loader, "registered at XYZ");

            diagnostics.LogFor(loader).Description.ShouldEqual(loader.ToString());
        }
        public void log_an_object_creates_a_log_file()
        {
            var loader = new StubBottleLoader("a", "b");
            diagnostics.LogObject(loader, "registered at XYZ");

            diagnostics.LogFor(loader).Provenance.ShouldEqual("registered at XYZ");
        }
        private void loadPackages(Action<StubBottleLoader> configuration)
        {
            PackageRegistry.LoadPackages(facility =>
            {
                var loader = new StubBottleLoader();
                configuration(loader);

                facility.Loader(loader);
            });
        }
        public void log_execution_happy_path()
        {
            var loader = new StubBottleLoader("a", "b");
            diagnostics.LogObject(loader, "registered at XYZ");

            diagnostics.LogExecution(loader, () => Thread.Sleep(5));

            var log = diagnostics.LogFor(loader);
            log.Success.ShouldBeTrue();
            log.TimeInMilliseconds.ShouldBeGreaterThan(0);
        }
        public void log_execution_that_throws_exception()
        {
            var loader = new StubBottleLoader("a", "b");
            diagnostics.LogObject(loader, "registered at XYZ");

            diagnostics.LogExecution(loader, () =>
            {
                Thread.Sleep(5);
                throw new ApplicationException("not gonna happen");
            });

            var log = diagnostics.LogFor(loader);
            log.Success.ShouldBeFalse();
            log.TimeInMilliseconds.ShouldBeGreaterThan(0);
            log.FullTraceText().ShouldContain("not gonna happen");
        }
        public void find_children()
        {
            var log = new PackageLog();

            var loader1 = new StubBottleLoader();
            var loader2 = new StubBottleLoader();
            var loader3 = new StubBottleLoader();

            var package1 = new StubBottle("1");
            var package2 = new StubBottle("2");
            var package3 = new StubBottle("3");

            log.AddChild(loader1, loader2, loader3, package1, package2, package3);

            log.FindChildren<IBottleLoader>().ShouldHaveTheSameElementsAs(loader1, loader2, loader3);

            log.FindChildren<IPackageInfo>().ShouldHaveTheSameElementsAs(package1, package2, package3);
        }
        public void SetUp()
        {
            diagnostics = new BottlingDiagnostics(new LoggingSession());

            loader = new StubBottleLoader("a", "b");
            _bottle = new StubBottle("a");

            diagnostics.LogPackage(_bottle, loader);
        }