Index: Core/Components/src/Core.Components.DotSpatial/Layer/BruTile/Configurations/WmtsLayerConfiguration.cs =================================================================== diff -u -rfa3b352bc1b1c01fc73a9a45268c5573807a6381 -r31101def828a4567e8c6544e60cd59633d0858eb --- Core/Components/src/Core.Components.DotSpatial/Layer/BruTile/Configurations/WmtsLayerConfiguration.cs (.../WmtsLayerConfiguration.cs) (revision fa3b352bc1b1c01fc73a9a45268c5573807a6381) +++ Core/Components/src/Core.Components.DotSpatial/Layer/BruTile/Configurations/WmtsLayerConfiguration.cs (.../WmtsLayerConfiguration.cs) (revision 31101def828a4567e8c6544e60cd59633d0858eb) @@ -43,6 +43,7 @@ private readonly string capabilitiesUri; private readonly string capabilityIdentifier; private readonly string preferredFormat; + private ITileCache tileCache; /// /// Creates an instance of . @@ -82,6 +83,7 @@ capabilitiesUri = wmtsCapabilitiesUrl; capabilityIdentifier = ((WmtsTileSchema) tileSource.Schema).Identifier; preferredFormat = tileSource.Schema.Format; + LegendText = capabilityIdentifier; InitializeFromTileSource(tileSource); } @@ -114,7 +116,7 @@ public IConfiguration Clone() { - return new WmtsLayerConfiguration(capabilitiesUri, capabilityIdentifier, persistentCacheDirectoryPath, preferredFormat); + return new WmtsLayerConfiguration(capabilitiesUri, capabilityIdentifier, preferredFormat, persistentCacheDirectoryPath); } public void Initialize() @@ -129,8 +131,6 @@ InitializeFromTileSource(tileSource); } - private ITileCache TileCache { get; set; } - /// /// Validates a . /// @@ -240,14 +240,14 @@ private void InitializeFromTileSource(ITileSource tileSource) { TileSource = tileSource; - TileCache = CreateTileCache(); + tileCache = CreateTileCache(); try { ITileProvider provider = BruTileReflectionHelper.GetProviderFromTileSource(tileSource); TileFetcher = new AsyncTileFetcher(provider, BruTileSettings.MemoryCacheMinimum, BruTileSettings.MemoryCacheMaximum, - TileCache); + tileCache); } catch (Exception e) when (e is NotSupportedException || e is ArgumentException) { Index: Core/Components/test/Core.Components.DotSpatial.Test/Layer/BruTile/Configurations/WmtsLayerConfigurationTest.cs =================================================================== diff -u -rfa3b352bc1b1c01fc73a9a45268c5573807a6381 -r31101def828a4567e8c6544e60cd59633d0858eb --- Core/Components/test/Core.Components.DotSpatial.Test/Layer/BruTile/Configurations/WmtsLayerConfigurationTest.cs (.../WmtsLayerConfigurationTest.cs) (revision fa3b352bc1b1c01fc73a9a45268c5573807a6381) +++ Core/Components/test/Core.Components.DotSpatial.Test/Layer/BruTile/Configurations/WmtsLayerConfigurationTest.cs (.../WmtsLayerConfigurationTest.cs) (revision 31101def828a4567e8c6544e60cd59633d0858eb) @@ -22,10 +22,11 @@ using System; using System.Linq; using BruTile; -using BruTile.Wmts; +using BruTile.Web; using Core.Common.TestUtil; using Core.Components.DotSpatial.Layer.BruTile.Configurations; using Core.Components.DotSpatial.TestUtil; +using Core.Components.Gis.Data; using NUnit.Framework; using Rhino.Mocks; @@ -96,13 +97,124 @@ { // Call TestDelegate call = () => WmtsLayerConfiguration.CreateInitializedConfiguration(url, id, validPreferredFormat); - + // Assert - string message= Assert.Throws(call).Message; + string message = Assert.Throws(call).Message; string expectedMessage = $"Niet in staat om de databron met naam '{id}' te kunnen vinden bij de WMTS url '{url}'."; Assert.AreEqual(expectedMessage, message); } mocks.VerifyAll(); } + + [Test] + public void CreateInitializedConfiguration_MatchingLayerAvailable_ReturnConfiguration() + { + // Setup + var targetMapData = WmtsMapData.CreateAlternativePdokMapData(); + + IRequest nullRequest = null; + var fileSource1 = new HttpTileSource(TileSchemaFactory.CreateWmtsTileSchema(WmtsMapData.CreateDefaultPdokMapData()), + nullRequest); + var tileSource2 = new HttpTileSource(TileSchemaFactory.CreateWmtsTileSchema(targetMapData), + nullRequest); + var tileSources = new ITileSource[] + { + fileSource1, + tileSource2 + }; + + var mocks = new MockRepository(); + var factory = mocks.Stub(); + factory.Stub(f => f.GetWmtsTileSources(targetMapData.SourceCapabilitiesUrl)).Return(tileSources); + mocks.ReplayAll(); + + using (new UseCustomTileSourceFactoryConfig(factory)) + { + // Call + WmtsLayerConfiguration configuration = WmtsLayerConfiguration.CreateInitializedConfiguration(targetMapData.SourceCapabilitiesUrl, targetMapData.SelectedCapabilityIdentifier, targetMapData.PreferredFormat); + + // Assert + Assert.IsTrue(configuration.Initialized); + Assert.AreEqual(targetMapData.SelectedCapabilityIdentifier, configuration.LegendText); + Assert.IsTrue(configuration.TileFetcher.IsReady()); + Assert.AreSame(tileSource2, configuration.TileSource); + } + mocks.VerifyAll(); + } + + [Test] + public void Clone_FromFullyInitializedConfiguration_CreateNewUninitializedInstance() + { + // Setup + var targetMapData = WmtsMapData.CreateAlternativePdokMapData(); + + IRequest nullRequest = null; + var tileSource = new HttpTileSource(TileSchemaFactory.CreateWmtsTileSchema(targetMapData), + nullRequest); + var tileSources = new ITileSource[] + { + tileSource + }; + + var mocks = new MockRepository(); + var factory = mocks.Stub(); + factory.Stub(f => f.GetWmtsTileSources(targetMapData.SourceCapabilitiesUrl)).Return(tileSources); + mocks.ReplayAll(); + + using (new UseCustomTileSourceFactoryConfig(factory)) + { + WmtsLayerConfiguration configuration = WmtsLayerConfiguration.CreateInitializedConfiguration(targetMapData.SourceCapabilitiesUrl, targetMapData.SelectedCapabilityIdentifier, targetMapData.PreferredFormat); + + // Call + IConfiguration clone = configuration.Clone(); + + // Assert + Assert.IsInstanceOf(clone); + Assert.AreNotSame(configuration, clone); + + Assert.IsFalse(clone.Initialized); + Assert.AreEqual(targetMapData.SelectedCapabilityIdentifier, clone.LegendText); + Assert.IsNull(clone.TileFetcher, "TileFetcher should be null because the clone hasn't been initialized yet."); + Assert.IsNull(clone.TileSource, "FileSource should be null because the clone hasn't been initialized yet."); + } + mocks.VerifyAll(); + } + + + [Test] + public void GivenFullyInitializedConfiguration_WhenClonedAndInitialized_ConfigurationAreEqual() + { + // Given + var targetMapData = WmtsMapData.CreateAlternativePdokMapData(); + + IRequest nullRequest = null; + var tileSource = new HttpTileSource(TileSchemaFactory.CreateWmtsTileSchema(targetMapData), + nullRequest); + var tileSources = new ITileSource[] + { + tileSource + }; + + var mocks = new MockRepository(); + var factory = mocks.Stub(); + factory.Stub(f => f.GetWmtsTileSources(targetMapData.SourceCapabilitiesUrl)).Return(tileSources); + mocks.ReplayAll(); + + using (new UseCustomTileSourceFactoryConfig(factory)) + { + WmtsLayerConfiguration configuration = WmtsLayerConfiguration.CreateInitializedConfiguration(targetMapData.SourceCapabilitiesUrl, targetMapData.SelectedCapabilityIdentifier, targetMapData.PreferredFormat); + + // When + IConfiguration clone = configuration.Clone(); + clone.Initialize(); + + // Assert + Assert.IsTrue(clone.Initialized); + Assert.AreEqual(targetMapData.SelectedCapabilityIdentifier, clone.LegendText); + Assert.IsTrue(clone.TileFetcher.IsReady()); + Assert.AreSame(configuration.TileSource, clone.TileSource); + } + mocks.VerifyAll(); + } } } \ No newline at end of file