/// <summary> /// See interface. /// </summary> /// <returns></returns> public virtual object Clone() { var result = (ServerConfigJson)MemberwiseClone(); result.Receivers = new List <ServerReceiverJson>(); result.Receivers.AddRange(Receivers.Select(r => (ServerReceiverJson)r.Clone())); result.TileServerSettings = (TileServerSettings)TileServerSettings?.Clone(); result.TileServerLayers = new List <TileServerSettings>(); result.TileServerLayers.AddRange(TileServerLayers.Select(r => (TileServerSettings)r.Clone())); return(result); }
/// <summary> /// Returns a clone of the settings passed in with the real URL swapped out with the fake one. /// </summary> /// <param name="mapProvider"></param> /// <param name="settings"></param> /// <returns></returns> private TileServerSettings CloneAndReplaceRealTileServerSettingsWithFake(MapProvider mapProvider, TileServerSettings settings) { var result = settings; var options = Plugin.Singleton?.Options; var canCacheMap = options?.CacheMapTiles ?? false; var canCacheLayer = options?.CacheLayerTiles ?? false; var canCacheThis = (canCacheMap && !settings.IsLayer) || (canCacheLayer && settings.IsLayer); if (settings != null && canCacheThis) { result = (TileServerSettings)settings.Clone(); result.Url = _TileServerUrlTranslator.ToFakeUrl(mapProvider, result); } return(result); }
public void TileServerSettings_Clone_Creates_New_Object() { foreach (var property in typeof(TileServerSettings).GetProperties()) { for (var pass = 0; pass < 2; ++pass) { var original = new TileServerSettings(); object expected = null; switch (property.Name) { case nameof(TileServerSettings.Attribution): expected = original.Attribution = pass == 0 ? "A" : "B"; break; case nameof(TileServerSettings.ClassName): expected = original.ClassName = pass == 0 ? "A" : "B"; break; case nameof(TileServerSettings.DefaultBrightness): expected = original.DefaultBrightness = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.DefaultOpacity): expected = original.DefaultOpacity = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.DetectRetina): expected = original.DetectRetina = pass == 0; break; case nameof(TileServerSettings.DisplayOrder): expected = original.DisplayOrder = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.ErrorTileUrl): expected = original.ErrorTileUrl = pass == 0 ? "A" : "B"; break; case nameof(TileServerSettings.IsCustom): expected = original.IsCustom = pass == 0; break; case nameof(TileServerSettings.IsDefault): expected = original.IsDefault = pass == 0; break; case nameof(TileServerSettings.IsLayer): expected = original.IsLayer = pass == 0; break; case nameof(TileServerSettings.IsTms): expected = original.IsTms = pass == 0; break; case nameof(TileServerSettings.MapProvider): expected = original.MapProvider = (MapProvider)(pass == 0 ? 1 : 2); break; case nameof(TileServerSettings.MaxNativeZoom): expected = original.MaxNativeZoom = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.MaxZoom): expected = original.MaxZoom = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.MinNativeZoom): expected = original.MinNativeZoom = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.MinZoom): expected = original.MinZoom = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.Name): expected = original.Name = pass == 0 ? "A" : "B"; break; case nameof(TileServerSettings.Subdomains): expected = original.Subdomains = pass == 0 ? "A" : "B"; break; case nameof(TileServerSettings.Url): expected = original.Url = pass == 0 ? "A" : "B"; break; case nameof(TileServerSettings.Version): expected = original.Version = pass == 0 ? "A" : "B"; break; case nameof(TileServerSettings.ZoomOffset): expected = original.ZoomOffset = pass == 0 ? 1 : 2; break; case nameof(TileServerSettings.ZoomReverse): expected = original.ZoomReverse = pass == 0; break; case nameof(TileServerSettings.ExpandoOptions): original.ExpandoOptions.Add(new TileServerSettings.ExpandoOption() { Option = pass == 0 ? "A" : "B", Value = pass == 0 ? "a" : "b", }); break; default: throw new NotImplementedException(property.Name); } var actual = (TileServerSettings)original.Clone(); switch (property.Name) { case nameof(TileServerSettings.ExpandoOptions): Assert.AreEqual(original.ExpandoOptions.Count, actual.ExpandoOptions.Count); Assert.AreNotSame(original.ExpandoOptions[0], actual.ExpandoOptions[0]); Assert.AreEqual(original.ExpandoOptions[0].Option, actual.ExpandoOptions[0].Option); Assert.AreEqual(original.ExpandoOptions[0].Value, actual.ExpandoOptions[0].Value); break; default: var actualValue = property.GetValue(actual, null); Assert.AreEqual(expected, actualValue, "for property {0}", property.Name); break; } } } }