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);
}