public IEnumerator PopAndPushPasses()
        {
            var creator = new UnityViewInstanceCreator()
                          .AddUnityViewObjects();
            var pool = new UnityViewInstanceCreatorObjectPool(creator);

            yield return(null);

            var bindInfo    = new ModelViewBinder.BindInfo(typeof(CubeViewObject));
            var cubeViewObj = pool.PopOrCreate(bindInfo) as CubeViewObject;

            Assert.IsNotNull(cubeViewObj);
            Assert.IsTrue(cubeViewObj.gameObject.activeSelf);
            Assert.IsNull(cubeViewObj.transform.parent);

            pool.Push(cubeViewObj);
            Assert.IsFalse(cubeViewObj.gameObject.activeSelf);
            Assert.AreSame(pool.PoolingObjParent, cubeViewObj.transform.parent);

            var viewObj = pool.PopOrCreate(bindInfo);

            Assert.AreSame(cubeViewObj, viewObj);
            Assert.IsTrue(cubeViewObj.gameObject.activeSelf);
            Assert.IsNull(cubeViewObj.transform.parent);
        }
        public IEnumerator CreatorPasses()
        {
            yield return(null);

            var creator = new UnityViewInstanceCreator()
                          .AddUnityViewObjects();

            var bindInfo = new ModelViewBinder.BindInfo(typeof(CubeViewObject))
                           .SetViewCreateType(ViewObjectCreateType.Cache);

            var cubeViewObj = creator.CreateViewObj(bindInfo) as CubeViewObject;

            {
                Assert.IsTrue(cubeViewObj is CubeViewObject);
                Assert.IsTrue(cubeViewObj.gameObject.activeSelf);
                Assert.IsNull(cubeViewObj.transform.parent);
                Assert.AreSame(bindInfo, cubeViewObj.UseBindInfo);
            }
            Debug.Log($"Success to IViewInstanceCreator#CreateViewObj!");

            {
                cubeViewObj.UseModel = new Model();
                Assert.IsTrue(cubeViewObj.DoBinding());

                cubeViewObj.Unbind();
                Assert.IsFalse(cubeViewObj.gameObject.activeSelf);
                Assert.AreSame(creator.PoolingViewObjParent, cubeViewObj.transform.parent);
                Assert.IsNull(cubeViewObj.UseModel);
                Assert.IsNull(cubeViewObj.UseBindInfo);
            }
            Debug.Log($"Success to IViewObject#Unbind!");

            {
                var cachedViewObj = creator.CreateViewObj(bindInfo) as CubeViewObject;
                Assert.AreSame(cubeViewObj, cachedViewObj);
                Assert.IsTrue(cachedViewObj.gameObject.activeSelf);
                Assert.IsNull(cachedViewObj.transform.parent);
                Assert.AreSame(bindInfo, cachedViewObj.UseBindInfo);
            }
            Debug.Log($"Success to IViewInstanceCreator#CreateViewObj(Cached)!");

            {
                cubeViewObj.UseModel = new Model();
                Assert.IsTrue(cubeViewObj.DoBinding());

                cubeViewObj.Unbind(); // <- cache in Pool!!

                cubeViewObj.Destroy();
                var newViewObj = creator.CreateViewObj(bindInfo);
                Assert.AreNotSame(cubeViewObj, newViewObj, $"IViewObject#Destroyが呼び出された場合にCacheされていたら、Cacheから取り除くようにしてください");
            }
            Debug.Log($"Success to IViewObject#Destroy!(Remove from ObjPool)");
        }
Beispiel #3
0
        public IEnumerator SetToPasses()
        {
            yield return(null);

            var assetPath         = PackageDefines.GetHinodeAssetPath(TEST_ASSET_DIR_PATH, "testViewObjPrefab.prefab");
            var testViewObjPrefab = AssetDatabase.LoadAssetAtPath <ButtonViewObject>(assetPath);

            Assert.IsNotNull(testViewObjPrefab, $"テスト用のPrefabの読み込みに失敗しました... assetPath={assetPath}");

            var bundleFilepath = PackageDefines.GetHinodeAssetPath(TEST_ASSET_DIR_PATH, "test_view_instance_creator_bundle");
            var bundle         = AssetBundle.LoadFromFile(bundleFilepath);

            Assert.IsNotNull(bundle, $"Failed to load AssetBundle({bundleFilepath}) For Test...");

            var settings = ScriptableObject.CreateInstance <UnityViewInstanceCreatorSettings>();

            settings
            .AddInfo(UnityViewInstanceCreatorSettings.InstanceInfo.CreateAsset <EmptyModelViewParamBinder>(testViewObjPrefab)
                     .SetInstanceKey("instA")
                     .SetBinderKey("binderA")
                     )
            .AddInfo(UnityViewInstanceCreatorSettings.InstanceInfo.CreateAssetBundle <ButtonViewObject, EmptyModelViewParamBinder>(bundle.name, "assets/testviewobjprefab.prefab")
                     .SetInstanceKey("instB")
                     .SetBinderKey("binderB")
                     )
            ;

            Debug.Log($"{bundle.GetAllAssetNames().Aggregate("", (_s, _c) => $"{_s}{_c};")}");

            settings.EntryAssetBundle(bundle); //

            var creator = new UnityViewInstanceCreator();

            settings.SetTo(creator);
            foreach (var info in settings.Infos)
            {
                var bindInfo = new ModelViewBinder.BindInfo("", info.InstanceKey, info.BinderKey);
                Assert.AreEqual(info.InstanceType, creator.GetViewObjType(bindInfo), $"instanceKey={info.InstanceKey}, binderKey={info.BinderKey}");
                Assert.AreEqual(info.ParamBinderType, creator.GetParamBinderType(bindInfo), $"instanceKey={info.InstanceKey}, binderKey={info.BinderKey}");
            }
            bundle.Unload(true);
        }