public async Task TwoKeypressesShouldWork() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); await lookuper .Lookup(TextsForKeyPresses("Jo", "Joh")) .ShouldFinishWithSearchResult("John"); }
public async Task EmptyTextShouldResultEmptySearchList() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); await lookuper .Lookup(TextsForKeyPresses(string.Empty)) .ShouldFinishWithSearchResult(Array.Empty <string>()); }
public async Task TwoSpecificItemsShouldBeFound() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); await lookuper .Lookup(TextsForKeyPresses("Jo")) .ShouldFinishWithSearchResult("John", "Joe"); }
public async Task CatchOtherExceptionAndReturnProperResult() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); searchEngine.SetActionsWithRepeatingTheLastOneForever(new TestSearchEngineThrowExceptionAction()); var searchResults = lookuper.Lookup(TextsForKeyPresses("Jo")); await searchResults.ShouldHaveSearchResults(new[] { "<< ERROR >>" }); }
public async Task FailedSearchShouldBeRetried() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); searchEngine.SetActions(new TestSearchEngineThrowExceptionAction()); var searchResults = lookuper.Lookup(TextsForKeyPresses("Jo")); await searchResults.ShouldHaveSearchResults(new[] { "John", "Joe" }); }
public async Task SearchShouldNotBeWaitedForeverButTimeOut() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); searchEngine.SetActions(new TestSearchEngineInfiniteAction()); var searchResults = lookuper.Lookup(TextsForKeyPresses("Jo")); await searchResults.ShouldHaveSearchResults(new[] { "John", "Joe" }); }
public async Task SearchShouldBeCancellableAndReturnProperResult() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine, timeoutDueTime: TimeSpan.FromMinutes(1)); searchEngine.SetActionsWithRepeatingTheLastOneForever(new TestSearchEngineInfiniteAction()); var searchResultAssertTask = lookuper.Lookup(TextsForKeyPresses("Jo")) .ShouldHaveSearchResults(new[] { "<< CANCEL >>" }); await searchEngine.SearchBeginnings.FirstAsync(); // wait for ["Jo"] to be started processing lookuper.Cancel(); await searchResultAssertTask; }
public async Task ObsoleteSlowSearchShouldNotOverwriteCurrentSearchResultDelayed() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); searchEngine.SetActions( new TestSearchEngineDelayAction(TimeSpan.FromMilliseconds(800)), new TestSearchEngineDelayAction(TimeSpan.FromMilliseconds(100)) ); var keyPresses = TextsForKeyPressesWithWaitingForEachSearchBeginning(searchEngine.SearchBeginnings, "Jo", "Joh"); await lookuper .Lookup(keyPresses) .ShouldFinishWithSearchResult("John"); }
public async Task IgnoreSameConsecutiveTexts() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); var lookuper = GetLookuper(searchEngine); var textsForKeyPressesAfter = new Subject <string>(); var searchResults = lookuper .Lookup(TextsForKeyPresses("Jo").Concat(textsForKeyPressesAfter)) .Replay() .RefCount(); await searchResults.FirstAsync(); // wait for ["Jo"] to be processed textsForKeyPressesAfter.OnNext("Jo"); textsForKeyPressesAfter.OnCompleted(); await searchResults.ShouldHaveSearchResults(new[] { "John", "Joe" }); }
public async Task ObsoleteSlowSearchShouldNotOverwriteCurrentSearchResultManual() { var searchEngine = new TestSearchEngine("John", "Joe", "Sarah"); TestSearchEngineManualAction search1, search2; var lookuper = GetLookuper(searchEngine); searchEngine.SetActions( search1 = new TestSearchEngineManualAction(), search2 = new TestSearchEngineManualAction() ); var keyPresses = TextsForKeyPressesWithWaitingForEachSearchBeginning(searchEngine.SearchBeginnings, "Jo", "Joh"); var searchResultAssertTask = lookuper .Lookup(keyPresses) .ShouldFinishWithSearchResult("John"); await search2.Complete(); await search1.Complete(); await searchResultAssertTask; }