public IEnumerator MustFirstInstantiateUnityThreadOnMainThread()
        {
            // Must initialize UnityThread on the main thread
            UnityThread.CreateUnityThreadInstance();

            var runner = GameObject.Find("UnityThreadRunner");

            Assert.NotNull(runner);

            yield return(new WaitForEndOfFrame());

            var count = 0;

            for (var i = 0; i < 10; ++i)
            {
                Task.Run(() => UnityThread.ExecuteInUpdate(() => ++ count));
            }
            Assert.AreEqual(0, count);

            // Wait at least 2 frames, since Task.Run will not guarantee it will run within this frame
            yield return(new WaitForEndOfFrame());

            yield return(new WaitForEndOfFrame());

            Assert.AreEqual(10, count);
        }
 public IEnumerator UnityThreadWillNotRunWhenCallOnSideThread()
 {
     try {
         Task.Run(() => UnityThread.CreateUnityThreadInstance()).Wait();
         Assert.Fail("Expect exception to be thrown as UnityThread trying to initialize on a side thread");
     } catch (AggregateException e) {
         Assert.True(
             e.GetBaseException().Message.ToLower().Contains("can only be called from the main thread")
             );
     }
     yield return(null);
 }
Exemple #3
0
        public IEnumerator FetchPostsIfNeeded_ShouldFetchPostAsync()
        {
            UnityThread.CreateUnityThreadInstance();

            var store = new RedditStore();

            store.Dispatch(Actions.FetchPostsIfNeeded("frontend"));

            yield return(new WaitForSeconds(1f));

            var state = store.GetState();

            Assert.NotNull(state.postsBySubreddit);

            Assert.True(state.postsBySubreddit.ContainsKey("frontend"));
            Assert.False(state.postsBySubreddit["frontend"].isFetching);
            Assert.NotNull(state.postsBySubreddit["frontend"].items);
        }