Exemplo n.º 1
0
 private static bool CleanUp(CleanUpCmdArgs args, ILogger logger)
 {
     using (var handler = new CleanUpHandler(logger, TimeSpan.FromSeconds(args.Timeout)))
     {
         handler.Handle();
         return(handler.IsHandled);
     }
 }
        public void CleanUp()
        {
            var topLevel1 = Substitute.For <ITopLevelDialog>();
            var topLevel2 = Substitute.For <ITopLevelDialog>();
            var topLevel3 = Substitute.For <ITopLevelDialog>();

            // Original dialog(the desktop) calls for the first top level modal.
            _dialog.IsVisible.Returns(true);
            _dialog.NextTopLevel.Returns(topLevel1);
            // First modal is visible and closed successfully.
            topLevel1.IsVisible.Returns(true);
            topLevel1.When(e => e.Close()).Do(e => topLevel1.IsVisible.Returns(false));
            // It then calls for the next top level dialog.
            topLevel1.NextTopLevel.Returns(topLevel2);
            // Which is visible and closed as well.
            topLevel2.IsVisible.Returns(true);
            topLevel2.When(e => e.Close()).Do(e => topLevel2.IsVisible.Returns(false));
            // CleanUp keeps calling for open top level dialogs until there are none.
            topLevel2.NextTopLevel.Returns(topLevel3);
            // The third dialog is not visible. End of cycle.
            topLevel3.IsVisible.Returns(false);

            // Do the clean up.
            _handler.Handle();

            // Main dialog should return next top level.
            dynamic received = _dialog.Received(1).NextTopLevel;

            // That should successfully be closed.
            topLevel1.Received(1).Close();
            // Calls for the next top level.
            received = topLevel1.Received(1).NextTopLevel;
            // This one gets closed as well.
            topLevel2.Received(1).Close();
            // Then calls the third one.
            received = topLevel2.Received(1).NextTopLevel;
            // Which is not closed.
            topLevel3.DidNotReceive().Close();
            // And doesn't call for the next dialog.
            received = topLevel3.DidNotReceive().NextTopLevel;
            // LogExec should receive 3 calls: 1 for CleanUp and 2 for CloseModal.
            _logger.Received(3).LogExec(Arg.Any <Expression <Func <bool> > >());
            // There should be 2 logged messages for dialogs closure.
            _logger.Received(2).LogInfo(Arg.Any <string>());
        }