public void MemberImportCustomization() { var logicalType = new TestTypeDescriptor(); var properties = logicalType.GetProperties(); properties.Add(new TestPropertyDescriptor("prop1", typeof(object), new Hashtable())); var calls2 = new ArrayList(); var memberImporter2 = new TestObjectMemberImporter(calls2); var services2 = new Hashtable { [typeof(IObjectMemberImporter)] = memberImporter2 }; properties.Add(new TestPropertyDescriptor("prop2", typeof(object), services2)); // Third property added to exercise issue #27: // http://code.google.com/p/jayrock/issues/detail?id=27 var calls3 = new ArrayList(); var memberImporter3 = new TestObjectMemberImporter(calls3); var services3 = new Hashtable { [typeof(IObjectMemberImporter)] = memberImporter3 }; properties.Add(new TestPropertyDescriptor("prop3", typeof(object), services3)); var importer = new ComponentImporter(typeof(Thing), logicalType); var context = new ImportContext(); context.Register(importer); var writer = new JsonRecorder(); writer.WriteStartObject(); writer.WriteMember("prop1"); writer.WriteString("value1"); writer.WriteMember("prop2"); writer.WriteString("value2"); writer.WriteMember("prop3"); writer.WriteString("value3"); writer.WriteEndObject(); var reader = writer.CreatePlayer(); var thing = (Thing)context.Import(typeof(Thing), reader); Assert.AreEqual(1, calls2.Count); Assert.AreSame(memberImporter2, calls2[0]); Assert.AreEqual(new object[] { context, reader, thing }, memberImporter2.ImportArgs); Assert.AreEqual("value2", memberImporter2.ImportedValue); Assert.AreEqual(1, calls3.Count); Assert.AreSame(memberImporter3, calls3[0]); Assert.AreEqual(new object[] { context, reader, thing }, memberImporter3.ImportArgs); Assert.AreEqual("value3", memberImporter3.ImportedValue); }
public void MemberImportCustomization() { ArrayList calls = new ArrayList(); TestTypeDescriptor logicalType = new TestTypeDescriptor(); PropertyDescriptorCollection properties = logicalType.GetProperties(); properties.Add(new TestPropertyDescriptor("prop1", typeof(object), new Hashtable())); TestObjectMemberImporter memberImporter = new TestObjectMemberImporter(calls); Hashtable services = new Hashtable(); services.Add(typeof(IObjectMemberImporter), memberImporter); properties.Add(new TestPropertyDescriptor("prop2", typeof(object), services)); ComponentImporter importer = new ComponentImporter(typeof(Thing), logicalType); ImportContext context = new ImportContext(); context.Register(importer); JsonRecorder writer = new JsonRecorder(); writer.WriteStartObject(); writer.WriteMember("prop1"); writer.WriteString("value1"); writer.WriteMember("prop2"); writer.WriteString("value2"); writer.WriteEndObject(); JsonReader reader = writer.CreatePlayer(); Thing thing = (Thing)context.Import(typeof(Thing), reader); Assert.AreEqual(1, calls.Count); Assert.AreSame(memberImporter, calls[0]); Assert.AreEqual(new object[] { context, reader, thing }, memberImporter.ImportArgs); Assert.AreEqual("value2", memberImporter.ImportedValue); }
public void MemberImportCustomization() { TestTypeDescriptor logicalType = new TestTypeDescriptor(); PropertyDescriptorCollection properties = logicalType.GetProperties(); properties.Add(new TestPropertyDescriptor("prop1", typeof(object), new Hashtable())); ArrayList calls2 = new ArrayList(); TestObjectMemberImporter memberImporter2 = new TestObjectMemberImporter(calls2); Hashtable services2 = new Hashtable(); services2.Add(typeof(IObjectMemberImporter), memberImporter2); properties.Add(new TestPropertyDescriptor("prop2", typeof(object), services2)); // Third property added to exercise issue #27: // http://code.google.com/p/jayrock/issues/detail?id=27 ArrayList calls3 = new ArrayList(); TestObjectMemberImporter memberImporter3 = new TestObjectMemberImporter(calls3); Hashtable services3 = new Hashtable(); services3.Add(typeof(IObjectMemberImporter), memberImporter3); properties.Add(new TestPropertyDescriptor("prop3", typeof(object), services3)); ComponentImporter importer = new ComponentImporter(typeof(Thing), logicalType); ImportContext context = new ImportContext(); context.Register(importer); JsonRecorder writer = new JsonRecorder(); writer.WriteStartObject(); writer.WriteMember("prop1"); writer.WriteString("value1"); writer.WriteMember("prop2"); writer.WriteString("value2"); writer.WriteMember("prop3"); writer.WriteString("value3"); writer.WriteEndObject(); JsonReader reader = writer.CreatePlayer(); Thing thing = (Thing) context.Import(typeof(Thing), reader); Assert.AreEqual(1, calls2.Count); Assert.AreSame(memberImporter2, calls2[0]); Assert.AreEqual(new object[] { context, reader, thing }, memberImporter2.ImportArgs); Assert.AreEqual("value2", memberImporter2.ImportedValue); Assert.AreEqual(1, calls3.Count); Assert.AreSame(memberImporter3, calls3[0]); Assert.AreEqual(new object[] { context, reader, thing }, memberImporter3.ImportArgs); Assert.AreEqual("value3", memberImporter3.ImportedValue); }
public void MemberImportCustomization() { ArrayList calls = new ArrayList(); TestTypeDescriptor logicalType = new TestTypeDescriptor(); PropertyDescriptorCollection properties = logicalType.GetProperties(); properties.Add(new TestPropertyDescriptor("prop1", typeof(object), new Hashtable())); TestObjectMemberImporter memberImporter = new TestObjectMemberImporter(calls); Hashtable services = new Hashtable(); services.Add(typeof(IObjectMemberImporter), memberImporter); properties.Add(new TestPropertyDescriptor("prop2", typeof(object), services)); ComponentImporter importer = new ComponentImporter(typeof(Thing), logicalType); ImportContext context = new ImportContext(); context.Register(importer); JsonRecorder writer = new JsonRecorder(); writer.WriteStartObject(); writer.WriteMember("prop1"); writer.WriteString("value1"); writer.WriteMember("prop2"); writer.WriteString("value2"); writer.WriteEndObject(); JsonReader reader = writer.CreatePlayer(); Thing thing = (Thing) context.Import(typeof(Thing), reader); Assert.AreEqual(1, calls.Count); Assert.AreSame(memberImporter, calls[0]); Assert.AreEqual(new object[] { context, reader, thing }, memberImporter.ImportArgs); Assert.AreEqual("value2", memberImporter.ImportedValue); }
public void MemberImportCustomization() { TestObjectMemberImporter memberImporter = new TestObjectMemberImporter(); Hashtable services = new Hashtable(); services.Add(typeof(IObjectMemberImporter), memberImporter); TestTypeDescriptor logicalType = new TestTypeDescriptor(); PropertyDescriptorCollection properties = logicalType.GetProperties(); TestPropertyDescriptor property = new TestPropertyDescriptor("prop", typeof(object), services); properties.Add(property); ComponentImporter importer = new ComponentImporter(typeof(Thing), logicalType); ImportContext context = new ImportContext(); context.Register(importer); JsonRecorder writer = new JsonRecorder(); writer.WriteStartObject(); writer.WriteMember("prop"); writer.WriteString("value"); writer.WriteEndObject(); JsonReader reader = writer.CreatePlayer(); Thing thing = (Thing) context.Import(typeof(Thing), reader); Assert.AreSame(context, memberImporter.ImportContext); Assert.AreSame(reader, memberImporter.ImportReader); Assert.AreSame(thing, memberImporter.ImportTarget); Assert.AreEqual("value", memberImporter.ImportedValue); }