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; }