Beispiel #1
0
        private static void TestProvider(AsyncSearchProvider provider)
        {
            var session    = new AsyncSearchSession();
            var ctx        = SearchContext.Empty;
            var items      = new List <SearchItem>();
            var enumerable = provider.fetchItems(ctx, items, provider);

            Assert.IsEmpty(items);
            session.Reset(enumerable);

            // Test fetching all objects
            var total = AsyncSearchProvider.NumberNullItems + AsyncSearchProvider.NumberSearchItems;

            session.FetchSome(items, total, false);
            Assert.AreEqual(AsyncSearchProvider.NumberSearchItems, items.Count);

            items = new List <SearchItem>();
            session.FetchSome(items, total, false);
            Assert.AreEqual(0, items.Count); // Should be empty since enumerator is at the end

            enumerable = provider.fetchItems(ctx, items, provider);
            session.Reset(enumerable);
            session.FetchSome(items, AsyncSearchProvider.NumberSearchItems, false);
            Assert.AreEqual(AsyncSearchProvider.NumberSearchItems - AsyncSearchProvider.NumberNullItems, items.Count);

            // Test fetching non-null objects
            enumerable = provider.fetchItems(ctx, items, provider);
            session.Reset(enumerable);
            session.FetchSome(items, total, true);
            Assert.AreEqual(AsyncSearchProvider.NumberSearchItems, items.Count);

            items = new List <SearchItem>();
            session.FetchSome(items, total, false);
            Assert.AreEqual(0, items.Count); // Should be empty since enumerator is at the end

            enumerable = provider.fetchItems(ctx, items, provider);
            session.Reset(enumerable);
            session.FetchSome(items, AsyncSearchProvider.NumberSearchItems, true);
            Assert.AreEqual(AsyncSearchProvider.NumberSearchItems, items.Count);

            // Fetch items time constrained
            var maxFetchTimeMs = 1;

            items                = new List <SearchItem>();
            provider.UseSleep    = true;
            provider.SleepTimeMS = 5;
            session.Reset(enumerable);
            session.FetchSome(items, maxFetchTimeMs);
            Assert.AreEqual(0, items.Count);

            // Fetch items with time and size constraints
            items      = new List <SearchItem>();
            enumerable = provider.fetchItems(ctx, items, provider);
            session.Reset(enumerable);
            provider.SleepTimeMS = 1;
            maxFetchTimeMs       = provider.SleepTimeMS * AsyncSearchProvider.NumberNullItems;
            session.FetchSome(items, AsyncSearchProvider.NumberSearchItems, true, maxFetchTimeMs);
            Assert.Less(items.Count, AsyncSearchProvider.NumberSearchItems);
        }
        /// <summary>
        /// Returns the specified provider's async search session.
        /// </summary>
        /// <param name="providerId"></param>
        /// <returns>The provider's async search session.</returns>
        public AsyncSearchSession GetProviderSession(string providerId)
        {
            if (!m_SearchSessions.TryGetValue(providerId, out var session))
            {
                session = new AsyncSearchSession();
                session.asyncItemReceived += OnProviderAsyncItemReceived;
                m_SearchSessions.Add(providerId, session);
            }

            return(session);
        }
Beispiel #3
0
        /// <summary>
        /// Returns the specified provider's async search session.
        /// </summary>
        /// <param name="providerId"></param>
        /// <returns>The provider's async search session.</returns>
        public AsyncSearchSession GetProviderSession(SearchContext context, string providerId)
        {
            if (!m_SearchSessions.TryGetValue(providerId, out var session))
            {
                session = new AsyncSearchSession(context);
                session.sessionStarted    += OnProviderAsyncSessionStarted;
                session.sessionEnded      += OnProviderAsyncSessionEnded;
                session.asyncItemReceived += OnProviderAsyncItemReceived;
                m_SearchSessions.Add(providerId, session);
            }

            return(session);
        }