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>()); }