public void AutoBindOnChangedModelIdentitiesPasses() { var nameBinderQueryPath = "name"; var logicalBinderQueryPath = "#log"; var styleBinderQueryPath = ".stl"; var allBinder = new ModelViewBinder("*", null , new ModelViewBinder.BindInfo(typeof(EmptyViewObjClass))); var nameBinder = new ModelViewBinder(nameBinderQueryPath, null , new ModelViewBinder.BindInfo(typeof(IntViewObjClass))); var logicalBinder = new ModelViewBinder(logicalBinderQueryPath, null , new ModelViewBinder.BindInfo(typeof(IntViewObjClass))); var styleBinder = new ModelViewBinder(styleBinderQueryPath, null , new ModelViewBinder.BindInfo(typeof(IntViewObjClass))); var viewInstanceCreator = new DefaultViewInstanceCreator( (typeof(EmptyViewObjClass), new EmptyViewObjClass.Binder()), (typeof(IntViewObjClass), new IntViewObjClass.Binder()) ); var binderMap = new ModelViewBinderMap(viewInstanceCreator, allBinder, nameBinder, logicalBinder, styleBinder); var bindInstanceMap = new ModelViewBinderInstanceMap(binderMap); var root = new ModelClass() { Name = "root" }; var apple = new ModelClass() { Name = "apple", Parent = root }; var orange = new ModelClass() { Name = "orange", Parent = root }; var grape = new ModelClass() { Name = "grape", Parent = orange }; bindInstanceMap.RootModel = root; {//Nameを切り替えた時のテスト // root.Name => "name" // - rootのBinder -> nameBinderに変更される root.Name = nameBinderQueryPath; Assert.AreSame(nameBinder, bindInstanceMap.BindInstances[root].Binder); // root.Name => "root" // - rootのBinder -> allBinderに変更される root.Name = "root"; Assert.AreSame(allBinder, bindInstanceMap.BindInstances[root].Binder); // apple.Name => "name" // - appleのBinder -> nameBinderに変更される apple.Name = nameBinderQueryPath; Assert.AreSame(nameBinder, bindInstanceMap.BindInstances[apple].Binder, "ルートModelの階層内のModelのNameが変更された時も、バインドを切り替えるようにしてください"); // apple.Name => "apple" // - appleのBinder -> allBinderに変更される apple.Name = "apple"; Assert.AreSame(allBinder, bindInstanceMap.BindInstances[apple].Binder, "ルートModelの階層内のModelのNameが変更された時も、バインドを切り替えるようにしてください"); // grape.Name => "name" // - grapeのBinder -> nameBinderに変更される grape.Name = nameBinderQueryPath; Assert.AreSame(nameBinder, bindInstanceMap.BindInstances[grape].Binder, "ルートModelの階層内のModelのNameが変更された時も、バインドを切り替えるようにしてください"); // grape.Name => "root" // - grapeのBinder -> allBinderに変更される grape.Name = "grape"; Assert.AreSame(allBinder, bindInstanceMap.BindInstances[grape].Binder, "ルートModelの階層内のModelのNameが変更された時も、バインドを切り替えるようにしてください"); } {//LogicalIDを切り替えた時のテスト // root.LogicalID => "log" // - rootのBinder -> logicalBinderに変更される root.AddLogicalID(logicalBinderQueryPath); Assert.AreSame(logicalBinder, bindInstanceMap.BindInstances[root].Binder); // root.LogicalID => "" // - rootのBinder -> allBinderに変更される root.RemoveLogicalID(logicalBinderQueryPath); Assert.AreSame(allBinder, bindInstanceMap.BindInstances[root].Binder); var errorMessage = "ルートModelの階層内のModelのLogicalIDが変更された時も、バインドを切り替えるようにしてください"; // orange.LogicalID => "log" // - orangeのBinder -> logicalBinderに変更される orange.AddLogicalID(logicalBinderQueryPath); Assert.AreSame(logicalBinder, bindInstanceMap.BindInstances[orange].Binder, errorMessage); // orange.LogicalID => "" // - orangeのBinder -> allBinderに変更される orange.RemoveLogicalID(logicalBinderQueryPath); Assert.AreSame(allBinder, bindInstanceMap.BindInstances[orange].Binder, errorMessage); // grape.LogicalID => "log" // - grapeのBinder -> logicalBinderに変更される grape.AddLogicalID(logicalBinderQueryPath); Assert.AreSame(logicalBinder, bindInstanceMap.BindInstances[grape].Binder, errorMessage); // grape.LogicalID => "" // - grapeのBinder -> allBinderに変更される grape.RemoveLogicalID(logicalBinderQueryPath); Assert.AreSame(allBinder, bindInstanceMap.BindInstances[grape].Binder, errorMessage); } {//StylingIDを切り替えた時のテスト // root.StylingID => "stl" // - rootのBinder -> styleBinderに変更される root.AddStylingID(styleBinderQueryPath); Assert.AreSame(styleBinder, bindInstanceMap.BindInstances[root].Binder); // root.StylingID => "" // - rootのBinder -> allBinderに変更される root.RemoveStylingID(styleBinderQueryPath); Assert.AreSame(allBinder, bindInstanceMap.BindInstances[root].Binder); var errorMessage = "ルートModelの階層内のModelのStylingIDが変更された時も、バインドを切り替えるようにしてください"; // orange.StylingID => "log" // - orangeのBinder -> styleBinderに変更される orange.AddStylingID(styleBinderQueryPath); Assert.AreSame(styleBinder, bindInstanceMap.BindInstances[orange].Binder, errorMessage); // orange.StylingID => "" // - orangeのBinder -> allBinderに変更される orange.RemoveStylingID(styleBinderQueryPath); Assert.AreSame(allBinder, bindInstanceMap.BindInstances[orange].Binder, errorMessage); // grape.StylingID => "log" // - grapeのBinder -> styleBinderに変更される grape.AddStylingID(styleBinderQueryPath); Assert.AreSame(styleBinder, bindInstanceMap.BindInstances[grape].Binder, errorMessage); // grape.StylingID => "" // - grapeのBinder -> allBinderに変更される grape.RemoveStylingID(styleBinderQueryPath); Assert.AreSame(allBinder, bindInstanceMap.BindInstances[grape].Binder, errorMessage); } }