Пример #1
0
        public async Task TwoKeypressesShouldWork()
        {
            var searchEngine = new TestSearchEngine("John", "Joe", "Sarah");
            var lookuper     = GetLookuper(searchEngine);

            await lookuper
            .Lookup(TextsForKeyPresses("Jo", "Joh"))
            .ShouldFinishWithSearchResult("John");
        }
Пример #2
0
        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>());
        }
Пример #3
0
        public async Task TwoSpecificItemsShouldBeFound()
        {
            var searchEngine = new TestSearchEngine("John", "Joe", "Sarah");
            var lookuper     = GetLookuper(searchEngine);

            await lookuper
            .Lookup(TextsForKeyPresses("Jo"))
            .ShouldFinishWithSearchResult("John", "Joe");
        }
Пример #4
0
        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 >>" });
        }
Пример #5
0
        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" });
        }
Пример #6
0
        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" });
        }
Пример #7
0
        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;
        }
Пример #8
0
        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");
        }
Пример #9
0
        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" });
        }
Пример #10
0
        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;
        }