public static T Measure <T>(ActionTags slot, Func <T> action, bool warnIfOperationTakesTooLong = false) { Contract.Requires(action != null); var now = DateTime.Now; var result = action(); var elapsed = DateTime.Now - now; var count = 0; #if TRACEPERFORMANCE if (warnIfOperationTakesTooLong && elapsed > LongSingleOperation) { Console.WriteLine("Time performing action #{0}: {1} (invocationCounter = {2})", slot, elapsed, invocationCounter); } #endif lock (performanceCounters) { Tuple <int, TimeSpan> prev; if (performanceCounters.TryGetValue(slot, out prev)) { count = prev.Item1; elapsed += prev.Item2; } performanceCounters[slot] = new Tuple <int, TimeSpan>(count + 1, elapsed); } invocationCounter++; return(result); }
public void FindBestGivenTag_WhenTagIsNotFound_ShouldThrow() { // arrange var givenTags = ImmutableDictionary.Create <string, int>() .Add("tag1", 1) .Add("tag2", 2) .Add("tag3", 3); var sut = new ActionTags <string>(ImmutableDictionary <string, int> .Empty, givenTags); // act and assert Assert.Throws <KeyNotFoundException>(() => sut.FindBestGivenTag(new[] { "tag4" })); }
public void FindBestGivenTag_ShouldReturnCorrectValue(string[] tags, string expected) { // arrange var givenTags = ImmutableDictionary.Create <string, int>() .Add("tag1", 1) .Add("tag2", 2) .Add("tag3", 3); var sut = new ActionTags <string>(ImmutableDictionary <string, int> .Empty, givenTags); // act var actual = sut.FindBestGivenTag(tags); // assert Assert.Equal(expected, actual); }
public void AddFirstPriorityGivenTag_ShouldAddTheTagWithTheHighestPriority() { // arrange var givenTags = ImmutableDictionary.Create <string, int>() .Add("tag1", -1) .Add("tag2", 0) .Add("tag3", 1); var sut = new ActionTags <string>(ImmutableDictionary <string, int> .Empty, givenTags); // act var actual = sut.AddFirstPriorityGivenTag("tag4").GivenTags.OrderBy(k => k.Value); // assert var expected = givenTags.Add("tag4", -2).OrderBy(k => k.Value); Assert.Equal(actual, expected); }
public void Before() { var screenshotName = Context.ScenarioInfo.Title; #if DEBUG var delay = IsLiveUnitTesting ? TimeSpan.Zero : TimeSpan.FromSeconds(1); #else var delay = TimeSpan.Zero; #endif if (IsLiveUnitTesting) { delay = TimeSpan.Zero; } var actorSource = new Actor("John"); IActorFacade actor = actorSource; if (TestLevel == TestLevel.UI) { var driver = CreateWebDriver(); actor = actorSource.WithSeleniumReporting( new SeleniumReportingConfiguration( GetScreenshotsPath(), screenshotName) .AddTextObservers(new DebugObserver()) .WithCanNotify(new CanNotify()) .WithScreenshotPng() .WithTakeScreenshotStrategy(new TakeScreenshotOnErrorStrategy()), out var seleniumReporter) .HighlightTargets() .SlowSelenium(delay) .CanUse(seleniumReporter) .CanUse(WebBrowser.With(driver)); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5); Context.Set(driver); } // Indicates what level of automation is supported by the current scenario var levels = new[] { TestLevel.UI, TestLevel.Api }.Where(l => l >= TestLevel).ToArray(); actor = actor.CanUse <IActionTags <TestLevel> >(ActionTags.Create(levels)) .CanUse(ClientFactory()); Context.Set(actor); if (TestLevel == TestLevel.UI) { actor.Given(Open.TheApplication()); } }
public void Create_ShouldReturnActionTagsWitCorrectPriority() { // act var actual = ActionTags.Create("tag1", "tag2", "tag3"); // assert var expectedWhenTags = new Dictionary <string, int>() { { "tag1", 0 }, { "tag2", 1 }, { "tag3", 2 }, }.OrderBy(k => k.Key); var expectedGivenTags = new Dictionary <string, int>() { { "tag1", 2 }, { "tag2", 1 }, { "tag3", 0 }, }.OrderBy(k => k.Key); Assert.Equal(actual.WhenTags.OrderBy(k => k.Key), expectedWhenTags); Assert.Equal(actual.GivenTags.OrderBy(k => k.Key), expectedGivenTags); }