public void ServerConfigJson_ToModel_Copies_Layer_TileServerSettings_To_Model() { var tileServerSettings = new TileServerSettings[] { new TileServerSettings() { Name = "Second Layer", IsLayer = true, DisplayOrder = 2, }, new TileServerSettings() { Name = "Third Layer", IsLayer = true, DisplayOrder = 3, }, new TileServerSettings() { Name = "First Layer", IsLayer = true, DisplayOrder = 1, }, }; _Configuration.GoogleMapSettings.MapProvider = MapProvider.Leaflet; _Configuration.GoogleMapSettings.TileServerSettingName = "My Layer"; _TileServerSettingsManager.Setup(r => r.GetAllTileLayerSettings(MapProvider.Leaflet)).Returns(tileServerSettings); var model = ServerConfigJson.ToModel(isLocalAddress: true); Assert.AreEqual(3, model.TileServerLayers.Count); Assert.AreSame(tileServerSettings[2], model.TileServerLayers[0]); Assert.AreSame(tileServerSettings[0], model.TileServerLayers[1]); Assert.AreSame(tileServerSettings[1], model.TileServerLayers[2]); }
/// <summary> /// Returns the fake URL that corresponds to the tile server settings passed across. /// </summary> /// <param name="mapProvider"></param> /// <param name="tileServerSettings"></param> /// <returns></returns> public string ToFakeUrl(MapProvider mapProvider, TileServerSettings tileServerSettings) { var result = new StringBuilder(); if (tileServerSettings != null) { result.Append($"{PageName}/"); result.Append($"{MapProviderName}-{((int)mapProvider).ToString(CultureInfo.InvariantCulture)}/"); result.Append($"{TileServerName}-{HttpUtility.UrlPathEncode(tileServerSettings.Name)}/"); foreach (var substitutionMarker in ExtractSubstitutionMarkerNames(tileServerSettings.Url)) { // Ignore subdomain substitutions, they're meaningless here if (substitutionMarker == "s") { continue; } result.Append($"{VariablePrefix}{HttpUtility.UrlPathEncode(substitutionMarker)}-{{{HttpUtility.UrlPathEncode(substitutionMarker)}}}/"); } result.Append("Tile"); result.Append(ExtractImageExtension(tileServerSettings.Url)); } return(result.ToString()); }
public void ServerConfigJson_ToModel_Copies_Current_TileServerSettings_To_Model() { var tileServerSettings = new TileServerSettings(); _Configuration.GoogleMapSettings.MapProvider = MapProvider.Leaflet; _Configuration.GoogleMapSettings.TileServerSettingName = "My Tile Server"; _TileServerSettingsManager.Setup(r => r.GetTileServerSettings(MapProvider.Leaflet, "My Tile Server", true)).Returns(tileServerSettings); var model = ServerConfigJson.ToModel(isLocalAddress: true); Assert.AreSame(tileServerSettings, model.TileServerSettings); }
/// <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> /// Converts version 1 brightness classes to default brightness values. /// </summary> /// <param name="setting"></param> /// <remarks> /// The first version of this used classes to infer brightness. Brightness is now configurable /// and a default brightness can be assigned. If we're loading an old definition that still uses /// classes for brightness then this removes the brightness classes and turns them into default /// brightness values. /// </remarks> private void PortBrightnessClasses(TileServerSettings setting) { var match = _BrightnessRegex.Match(setting?.ClassName ?? ""); if (match.Success) { var classGroup = match.Groups["class"]; var brightnessGroup = match.Groups["brightness"]; setting.ClassName = setting.ClassName .Remove(classGroup.Index, classGroup.Length) .Trim(); setting.DefaultBrightness = int.Parse(brightnessGroup.Value); } }
/// <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; } } } }