public void IViewObjectOnCreatedPasses() { var allBinder = new ModelViewBinder("*", null, new ModelViewBinder.BindInfo(typeof(TestOnCreatedViewObjClass))); var viewInstanceCreator = new DefaultViewInstanceCreator( (typeof(TestOnCreatedViewObjClass), new TestOnCreatedViewObjClass.ParamBinder()) ); var errorMessageUseModel = $"ModeViewBinder#CreateViewObjectsに渡したModelがIViewObject#UseModelに設定されるようにしてください"; var errorMessageUseBinderInstance = $"ModeViewBinder#CreateViewObjectsに渡したModelViewBinderInstanceがIViewObject#UseBinderInstanceに設定されるようにしてください"; var errorMessageUsedBinderInstanceMap = $"ModeViewBinder#CreateViewObjectsに渡したModelViewBinderInstanceMapがIViewObject#OnCreatedに渡されるようにしてください"; {//ModeViewBinder#CreateViewObjectsのテスト var binderMap = new ModelViewBinderMap(viewInstanceCreator, allBinder); var binderInstanceMap = new ModelViewBinderInstanceMap(binderMap); var root = new Model() { Name = "root" }; var viewObjs = allBinder.CreateViewObjects(root, null, binderInstanceMap); Assert.AreEqual(1, viewObjs.Count); var viewObj = viewObjs[0]; Assert.AreSame(root, viewObj.UseModel, errorMessageUseModel); Assert.AreSame(null, viewObj.UseBinderInstance, errorMessageUseBinderInstance); var onCreatedViewObj = viewObjs[0] as TestOnCreatedViewObjClass; Assert.AreSame(binderInstanceMap, onCreatedViewObj.UsedBinderInstanceMap, errorMessageUsedBinderInstanceMap); } { //ModelViewBinderInstanceMapを指定しなかった時のテスト var root = new Model() { Name = "root" }; var viewObjs = allBinder.CreateViewObjects(root, null, null); Assert.AreEqual(1, viewObjs.Count); var viewObj = viewObjs[0]; Assert.AreSame(root, viewObj.UseModel, errorMessageUseModel); var onCreatedViewObj = viewObj as TestOnCreatedViewObjClass; Assert.AreSame(null, onCreatedViewObj.UsedBinderInstanceMap, errorMessageUsedBinderInstanceMap); } {//ModelViewBinderInstanceMap#CreateBindInstanceのテスト var binderMap = new ModelViewBinderMap(viewInstanceCreator, allBinder); var binderInstanceMap = new ModelViewBinderInstanceMap(binderMap); var root = new Model() { Name = "root" }; var bindInstance = binderMap.CreateBindInstance(root, binderInstanceMap); Assert.AreEqual(1, bindInstance.ViewObjects.Count()); var viewObj = bindInstance.ViewObjects.First(); Assert.AreSame(root, viewObj.UseModel, errorMessageUseModel); Assert.AreSame(bindInstance, viewObj.UseBinderInstance, errorMessageUseBinderInstance); var onCreatedViewObj = viewObj as TestOnCreatedViewObjClass; Assert.AreSame(binderInstanceMap, onCreatedViewObj.UsedBinderInstanceMap, errorMessageUsedBinderInstanceMap); } {//ModelViewBinderInstanceMap#Addのテスト var binderMap = new ModelViewBinderMap(viewInstanceCreator, allBinder); var binderInstanceMap = new ModelViewBinderInstanceMap(binderMap); var root = new Model() { Name = "root" }; binderInstanceMap.Add(root); var bindInstance = binderInstanceMap.BindInstances[root]; Assert.AreEqual(1, bindInstance.ViewObjects.Count()); var viewObj = bindInstance.ViewObjects.First(); Assert.AreSame(root, viewObj.UseModel, errorMessageUseModel); var onCreatedViewObj = viewObj as TestOnCreatedViewObjClass; Assert.AreSame(binderInstanceMap, onCreatedViewObj.UsedBinderInstanceMap, errorMessageUsedBinderInstanceMap); } }
public void BasicUsagePasses() { var root = new ModelClass() { Name = "root" }; var apple = new ModelClass() { Name = "apple" }; var grape = new ModelClass() { Name = "grape" }; root.AddChildren(apple, grape); var orange = new ModelClass() { Name = "orange" }; grape.AddChildren(orange); var appleBinder = new ModelViewBinder("apple", null, new ModelViewBinder.BindInfo(typeof(IntViewObjClass))); var orangeBinder = new ModelViewBinder("orange", null, new ModelViewBinder.BindInfo(typeof(FloatViewObjClass))); var rebindBinder = new ModelViewBinder("Rebind", null, new ModelViewBinder.BindInfo(typeof(FloatViewObjClass))); Assert.IsFalse(root.DoMatchQueryPath(appleBinder.Query)); var viewInstanceCreator = new DefaultViewInstanceCreator( (typeof(IntViewObjClass), new IntViewObjClass.Binder()), (typeof(FloatViewObjClass), new FloatViewObjClass.Binder()) ); var binderMap = new ModelViewBinderMap(viewInstanceCreator, appleBinder, orangeBinder, rebindBinder); {//Constructorのテスト Assert.AreEqual(3, binderMap.Binders.Count()); Assert.IsTrue(binderMap.Binders.Any(_b => _b == appleBinder), "指定したBinderがBinderMapの中にありません"); Assert.IsTrue(binderMap.Binders.Any(_b => _b == orangeBinder), "指定したBinderがBinderMapの中にありません"); Assert.IsTrue(binderMap.Binders.Any(_b => _b == rebindBinder), "指定したBinderがBinderMapの中にありません"); Assert.AreSame(viewInstanceCreator, binderMap.ViewInstanceCreator); string errorMessage = "ModelViewBinderMapに設定されたModelViewBinder#ViewInstaceCreatorはModelViewBinderMap#ViewInstanceCreatorと同じものになるようにしてください。"; Assert.AreSame(binderMap.ViewInstanceCreator, appleBinder.ViewInstaceCreator, errorMessage); Assert.AreSame(binderMap.ViewInstanceCreator, orangeBinder.ViewInstaceCreator, errorMessage); Assert.AreSame(binderMap.ViewInstanceCreator, rebindBinder.ViewInstaceCreator, errorMessage); } {//ModelViewBindMap#CreateBindInstanceのテスト var appleBindInstance = binderMap.CreateBindInstance(apple, null); var orangeBindInstance = binderMap.CreateBindInstance(orange, null); Assert.IsNotNull(appleBindInstance); Assert.IsNotNull(orangeBindInstance); Assert.IsNull(binderMap.CreateBindInstance(root, null)); Assert.IsNull(binderMap.CreateBindInstance(grape, null)); Assert.AreSame(apple, appleBindInstance.Model); Assert.AreSame(appleBinder, appleBindInstance.Binder); Assert.AreEqual(1, appleBindInstance.ViewObjects.Count()); Assert.AreEqual(typeof(IntViewObjClass), appleBindInstance.ViewObjects.First().GetType()); Assert.AreSame(orange, orangeBindInstance.Model); Assert.AreSame(orangeBinder, orangeBindInstance.Binder); Assert.AreEqual(1, orangeBindInstance.ViewObjects.Count()); Assert.AreEqual(typeof(FloatViewObjClass), orangeBindInstance.ViewObjects.First().GetType()); } }