Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 3
0
        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;
                    }
                }
            }
        }