コード例 #1
0
        public IEnumerator FetchItemsAsync()
        {
            const string k_SearchType = "___test_async";
            var          ctx          = new SearchContext {
                searchText = k_SearchType + ":async", wantsMore = true
            };

            bool wasCalled = false;

            void OnAsyncCallback(IEnumerable <SearchItem> items)
            {
                wasCalled = items.Any(i => i.id == k_SearchType);
            }

            IEnumerable <SearchItem> TestFetchAsyncCallback(SearchProvider provider)
            {
                var ft = UnityEditor.EditorApplication.timeSinceStartup + 1;

                while (UnityEditor.EditorApplication.timeSinceStartup < ft)
                {
                    yield return(null);
                }

                yield return(provider.CreateItem(k_SearchType));
            }

            var testSearchProvider = new SearchProvider(k_SearchType, k_SearchType)
            {
                filterId           = k_SearchType + ":",
                isExplicitProvider = true,
                fetchItems         = (context, items, provider) => TestFetchAsyncCallback(provider)
            };

            AsyncSearchSession.asyncItemReceived += OnAsyncCallback;

            SearchService.Providers.Add(testSearchProvider);
            SearchService.RefreshProviders();

            SearchService.GetItems(ctx);
            yield return(null);

            while (AsyncSearchSession.SearchInProgress)
            {
                yield return(null);
            }

            while (!wasCalled)
            {
                yield return(null);
            }

            Assert.True(wasCalled);

            SearchService.Providers.Remove(testSearchProvider);
            SearchService.RefreshProviders();
            AsyncSearchSession.asyncItemReceived -= OnAsyncCallback;
        }