public void CloneHydroNetworkWithData() { var network = HydroNetworkHelper.GetSnakeHydroNetwork(1); var publicProperties = ReflectionTestHelper.GetPublicListProperties(network); foreach (var prop in publicProperties) { try { var value = prop.GetValue(network, null); if (value is IList) { var genericType = TypeUtils.GetFirstGenericTypeParameter(value.GetType()); var concreteType = genericType.Assembly.GetTypes().Where( t => genericType.IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract).FirstOrDefault(); var instance = Activator.CreateInstance(concreteType); (value as IList).Add(instance); } } catch (Exception) { Console.WriteLine(String.Format("Unable to set property: {0}", prop)); } } var clone = (HydroNetwork)network.Clone(); TestReferenceHelper.AssertStringRepresentationOfGraphIsEqual(network, clone); }
public void CloneHydroNetworkWithLinkSources() { var network = HydroNetworkHelper.GetSnakeHydroNetwork(1); var catchment = new Catchment(); network.Catchments.Add(catchment); var wasteWaterTreatmentPlant = new WasteWaterTreatmentPlant(); network.WasteWaterTreatmentPlants.Add(wasteWaterTreatmentPlant); var lateral = new LateralSource(); network.Branches.First().BranchFeatures.Add(lateral); catchment.OutgoingLinks.Add(wasteWaterTreatmentPlant); catchment.OutgoingLinks.Add(lateral); wasteWaterTreatmentPlant.IncomingLinks.Add(catchment); lateral.IncomingLinks.Add(catchment); var clone = (HydroNetwork)network.Clone(); var links = TestReferenceHelper.SearchObjectInObjectGraph(catchment, clone); links.ForEach(Console.WriteLine); Assert.AreEqual(0, links.Count); Assert.AreEqual(2, clone.Catchments.First().OutgoingLinks.Count); Assert.AreEqual(1, clone.WasteWaterTreatmentPlants.First().IncomingLinks.Count); Assert.AreEqual(1, clone.LateralSources.First().IncomingLinks.Count); }
public void CloneHydroNetworkWithProxyDefinitions() { var network = HydroNetworkHelper.GetSnakeHydroNetwork(1); var sharedDefinition = new CrossSectionDefinitionYZ(); network.SharedCrossSectionDefinitions.Add(sharedDefinition); HydroNetworkHelper.AddCrossSectionDefinitionToBranch(network.Channels.First(), new CrossSectionDefinitionProxy(sharedDefinition), 10.0d); var clone = (HydroNetwork)network.Clone(); TestReferenceHelper.AssertStringRepresentationOfGraphIsEqual(network, clone); }