Index: Core/Common/test/Core.Common.TestUtil.Test/EnumTestFixtureTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Core/Common/test/Core.Common.TestUtil.Test/EnumTestFixtureTest.cs (.../EnumTestFixtureTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Core/Common/test/Core.Common.TestUtil.Test/EnumTestFixtureTest.cs (.../EnumTestFixtureTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -45,12 +45,28 @@ } } + protected override IDictionary ExpectedValueForEnumValues + { + get + { + return new Dictionary + { + { + DisplayNameTestEnum.NoDisplayName, 0 + }, + { + DisplayNameTestEnum.HasResourcesDisplayName, 4 + } + }; + } + } + public enum DisplayNameTestEnum { NoDisplayName, [ResourcesDisplayName(typeof(Resources), nameof(Resources.SomeDisplayName))] - HasResourcesDisplayName + HasResourcesDisplayName = 4 } } } \ No newline at end of file Index: Core/Common/test/Core.Common.TestUtil/EnumTestFixture.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Core/Common/test/Core.Common.TestUtil/EnumTestFixture.cs (.../EnumTestFixture.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Core/Common/test/Core.Common.TestUtil/EnumTestFixture.cs (.../EnumTestFixture.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -21,7 +21,6 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Reflection; using Core.Common.Utils.Attributes; using NUnit.Framework; @@ -32,17 +31,38 @@ public abstract class EnumTestFixture { protected abstract IDictionary ExpectedDisplayNameForEnumValues { get; } + protected abstract IDictionary ExpectedValueForEnumValues { get; } [Test] public void DisplayName_Always_ReturnExpectedValues() { + // Setup foreach (TEnumType value in Enum.GetValues(typeof(TEnumType))) { - Assert.AreEqual(ExpectedDisplayNameForEnumValues[value], GetDisplayName(value), + // Call + string displayName = GetDisplayName(value); + + // Assert + Assert.AreEqual(ExpectedDisplayNameForEnumValues[value], displayName, $"Display name for {value} incorrect."); } } + [Test] + public void ConvertToByte_Always_ReturnExpectedValues() + { + // Setup + foreach (TEnumType value in Enum.GetValues(typeof(TEnumType))) + { + // Call + int actualValue = Convert.ToInt32(value); + + // Assert + Assert.AreEqual(ExpectedValueForEnumValues[value], actualValue, + $"Value for {value} incorrect."); + } + } + private static string GetDisplayName(TEnumType value) { var type = typeof(TEnumType); Index: Core/Components/test/Core.Components.Gis.Test/Data/WellKnownTileSourceTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Core/Components/test/Core.Components.Gis.Test/Data/WellKnownTileSourceTest.cs (.../WellKnownTileSourceTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Core/Components/test/Core.Components.Gis.Test/Data/WellKnownTileSourceTest.cs (.../WellKnownTileSourceTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -52,7 +52,34 @@ }, { WellKnownTileSource.EsriWorldShadedRelief, "Esri World - Reliëf" + } + }; + } + } + + protected override IDictionary ExpectedValueForEnumValues { + get + { + return new Dictionary + { + { + WellKnownTileSource.OpenStreetMap, 0 }, + { + WellKnownTileSource.BingAerial, 1 + }, + { + WellKnownTileSource.BingHybrid, 2 + }, + { + WellKnownTileSource.BingRoads, 3 + }, + { + WellKnownTileSource.EsriWorldTopo, 4 + }, + { + WellKnownTileSource.EsriWorldShadedRelief, 5 + } }; } } Index: Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/RingtoetsWellKnownTileSource.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/RingtoetsWellKnownTileSource.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.Data/AssessmentSection/RingtoetsWellKnownTileSource.cs (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -0,0 +1,50 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using Core.Common.Utils.Attributes; +using Ringtoets.Common.Data.Properties; + +namespace Ringtoets.Common.Data.AssessmentSection +{ + /// + /// All well known tile sources for which built-in support is provided. + /// + public enum RingtoetsWellKnownTileSource + { + [ResourcesDisplayName(typeof(Resources), nameof(Resources.Map_OpenStreetMap_DisplayName))] + OpenStreetMap = 1, + + [ResourcesDisplayName(typeof(Resources), nameof(Resources.Map_BingAerial_DisplayName))] + BingAerial = 2, + + [ResourcesDisplayName(typeof(Resources), nameof(Resources.Map_BingHybrid_DisplayName))] + BingHybrid = 3, + + [ResourcesDisplayName(typeof(Resources), nameof(Resources.Map_BingRoads_DisplayName))] + BingRoads = 4, + + [ResourcesDisplayName(typeof(Resources), nameof(Resources.Map_EsriWorldTopo_DisplayName))] + EsriWorldTopo = 5, + + [ResourcesDisplayName(typeof(Resources), nameof(Resources.Map_EsriWorldShadedRelief_DisplayName))] + EsriWorldShadedRelief = 6 + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs =================================================================== diff -u -r657e48b8886aa9641a3673f4fe9c4b81efc72260 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 657e48b8886aa9641a3673f4fe9c4b81efc72260) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -427,6 +427,60 @@ } /// + /// Looks up a localized string similar to Bing Maps - Satelliet. + /// + public static string Map_BingAerial_DisplayName { + get { + return ResourceManager.GetString("Map_BingAerial_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bing Maps - Satelliet + Wegen. + /// + public static string Map_BingHybrid_DisplayName { + get { + return ResourceManager.GetString("Map_BingHybrid_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bing Maps - Wegen. + /// + public static string Map_BingRoads_DisplayName { + get { + return ResourceManager.GetString("Map_BingRoads_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Esri World - Reliëf. + /// + public static string Map_EsriWorldShadedRelief_DisplayName { + get { + return ResourceManager.GetString("Map_EsriWorldShadedRelief_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Esri World - Topografisch. + /// + public static string Map_EsriWorldTopo_DisplayName { + get { + return ResourceManager.GetString("Map_EsriWorldTopo_DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OpenStreetMap. + /// + public static string Map_OpenStreetMap_DisplayName { + get { + return ResourceManager.GetString("Map_OpenStreetMap_DisplayName", resourceCulture); + } + } + + /// /// Looks up a localized string similar to De waarde voor 'N' moet in het bereik {0} liggen.. /// public static string N_Value_should_be_in_Range_0_ { Index: Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx =================================================================== diff -u -r657e48b8886aa9641a3673f4fe9c4b81efc72260 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx (.../Resources.resx) (revision 657e48b8886aa9641a3673f4fe9c4b81efc72260) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx (.../Resources.resx) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -264,4 +264,22 @@ De transparantie moet in het bereik {0} liggen. + + Bing Maps - Satelliet + + + Bing Maps - Satelliet + Wegen + + + Bing Maps - Wegen + + + Esri World - Reliëf + + + Esri World - Topografisch + + + OpenStreetMap + \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Data/Ringtoets.Common.Data.csproj =================================================================== diff -u -r69e449c598057dc5d4703b95ab5c151a76a9cdbf -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/src/Ringtoets.Common.Data/Ringtoets.Common.Data.csproj (.../Ringtoets.Common.Data.csproj) (revision 69e449c598057dc5d4703b95ab5c151a76a9cdbf) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Ringtoets.Common.Data.csproj (.../Ringtoets.Common.Data.csproj) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -45,6 +45,7 @@ + Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/AssessmentSectionCompositionTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/AssessmentSectionCompositionTest.cs (.../AssessmentSectionCompositionTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/AssessmentSectionCompositionTest.cs (.../AssessmentSectionCompositionTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -47,5 +47,24 @@ }; } } + + protected override IDictionary ExpectedValueForEnumValues + { + get + { + return new Dictionary + { + { + AssessmentSectionComposition.Dike, 1 + }, + { + AssessmentSectionComposition.Dune, 2 + }, + { + AssessmentSectionComposition.DikeAndDune, 3 + } + }; + } + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/RingtoetsWellKnownTileSourceTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/RingtoetsWellKnownTileSourceTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssessmentSection/RingtoetsWellKnownTileSourceTest.cs (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -0,0 +1,87 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Collections.Generic; +using Core.Common.TestUtil; +using NUnit.Framework; +using Ringtoets.Common.Data.AssessmentSection; + +namespace Ringtoets.Common.Data.Test.AssessmentSection +{ + [TestFixture] + public class RingtoetsWellKnownTileSourceTest : EnumTestFixture + { + protected override IDictionary ExpectedDisplayNameForEnumValues + { + get + { + return new Dictionary + { + { + RingtoetsWellKnownTileSource.OpenStreetMap, "OpenStreetMap" + }, + { + RingtoetsWellKnownTileSource.BingAerial, "Bing Maps - Satelliet" + }, + { + RingtoetsWellKnownTileSource.BingHybrid, "Bing Maps - Satelliet + Wegen" + }, + { + RingtoetsWellKnownTileSource.BingRoads, "Bing Maps - Wegen" + }, + { + RingtoetsWellKnownTileSource.EsriWorldTopo, "Esri World - Topografisch" + }, + { + RingtoetsWellKnownTileSource.EsriWorldShadedRelief, "Esri World - Reliëf" + } + }; + } + } + + protected override IDictionary ExpectedValueForEnumValues { + get + { + return new Dictionary + { + { + RingtoetsWellKnownTileSource.OpenStreetMap, 1 + }, + { + RingtoetsWellKnownTileSource.BingAerial, 2 + }, + { + RingtoetsWellKnownTileSource.BingHybrid, 3 + }, + { + RingtoetsWellKnownTileSource.BingRoads, 4 + }, + { + RingtoetsWellKnownTileSource.EsriWorldTopo, 5 + }, + { + RingtoetsWellKnownTileSource.EsriWorldShadedRelief, 6 + } + }; + } + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/BreakWaterTypeTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/BreakWaterTypeTest.cs (.../BreakWaterTypeTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/DikeProfiles/BreakWaterTypeTest.cs (.../BreakWaterTypeTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -47,5 +47,23 @@ }; } } + + protected override IDictionary ExpectedValueForEnumValues { + get + { + return new Dictionary + { + { + BreakWaterType.Wall, 1 + }, + { + BreakWaterType.Caisson, 2 + }, + { + BreakWaterType.Dam, 3 + } + }; + } + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/AssessmentLayerOneStateTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/AssessmentLayerOneStateTest.cs (.../AssessmentLayerOneStateTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/AssessmentLayerOneStateTest.cs (.../AssessmentLayerOneStateTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -45,5 +45,23 @@ }; } } + + protected override IDictionary ExpectedValueForEnumValues { + get + { + return new Dictionary + { + { + AssessmentLayerOneState.NotAssessed, 1 + }, + { + AssessmentLayerOneState.Sufficient, 2 + }, + { + AssessmentLayerOneState.NoVerdict, 3 + } + }; + } + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/AssessmentLayerTwoAResultTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/AssessmentLayerTwoAResultTest.cs (.../AssessmentLayerTwoAResultTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/AssessmentLayerTwoAResultTest.cs (.../AssessmentLayerTwoAResultTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -47,5 +47,23 @@ }; } } + + protected override IDictionary ExpectedValueForEnumValues { + get + { + return new Dictionary + { + { + AssessmentLayerTwoAResult.NotCalculated, 1 + }, + { + AssessmentLayerTwoAResult.Failed, 2 + }, + { + AssessmentLayerTwoAResult.Successful, 3 + } + }; + } + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Hydraulics/CalculationConvergenceTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Hydraulics/CalculationConvergenceTest.cs (.../CalculationConvergenceTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Hydraulics/CalculationConvergenceTest.cs (.../CalculationConvergenceTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -47,5 +47,23 @@ }; } } + + protected override IDictionary ExpectedValueForEnumValues { + get + { + return new Dictionary + { + { + CalculationConvergence.NotCalculated, 1 + }, + { + CalculationConvergence.CalculatedNotConverged, 2 + }, + { + CalculationConvergence.CalculatedConverged, 3 + } + }; + } + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Ringtoets.Common.Data.Test.csproj =================================================================== diff -u -r69e449c598057dc5d4703b95ab5c151a76a9cdbf -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Ringtoets.Common.Data.Test.csproj (.../Ringtoets.Common.Data.Test.csproj) (revision 69e449c598057dc5d4703b95ab5c151a76a9cdbf) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Ringtoets.Common.Data.Test.csproj (.../Ringtoets.Common.Data.Test.csproj) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -59,6 +59,7 @@ + Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/DikeHeightCalculationTypeTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/DikeHeightCalculationTypeTest.cs (.../DikeHeightCalculationTypeTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/DikeHeightCalculationTypeTest.cs (.../DikeHeightCalculationTypeTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -47,13 +47,23 @@ } } - [Test] - public void ConvertToByte_Always_ReturnExpectedValues() + protected override IDictionary ExpectedValueForEnumValues { - // Assert - Assert.AreEqual(1, (byte) DikeHeightCalculationType.NoCalculation); - Assert.AreEqual(2, (byte) DikeHeightCalculationType.CalculateByAssessmentSectionNorm); - Assert.AreEqual(3, (byte) DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability); + get + { + return new Dictionary + { + { + DikeHeightCalculationType.NoCalculation, 1 + }, + { + DikeHeightCalculationType.CalculateByAssessmentSectionNorm, 2 + }, + { + DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability, 3 + } + }; + } } } } \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Data/Ringtoets.Integration.Data.csproj =================================================================== diff -u -rdd2a51d0a110b707de32cca2b00994f33f877c9c -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Integration/src/Ringtoets.Integration.Data/Ringtoets.Integration.Data.csproj (.../Ringtoets.Integration.Data.csproj) (revision dd2a51d0a110b707de32cca2b00994f33f877c9c) +++ Ringtoets/Integration/src/Ringtoets.Integration.Data/Ringtoets.Integration.Data.csproj (.../Ringtoets.Integration.Data.csproj) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -74,7 +74,7 @@ False - {318ba582-88c9-4816-a54a-a7e431461de3} + {318BA582-88C9-4816-A54A-A7E431461DE3} Core.Components.Gis False @@ -84,7 +84,7 @@ False - {6A074D65-A81C-4C1C-8E24-F36C916E4ED7} + {6a074d65-a81c-4c1c-8e24-f36c916e4ed7} Ringtoets.Common.Utils False Index: Ringtoets/Revetment/test/Ringtoets.Revetment.Data.Test/WaveConditionsInputStepSizeTest.cs =================================================================== diff -u -r4b32064801ece7ab70357a2a942e21f113abc679 -r19fb6d61aab057e0e405453c3a180360a48bb3b7 --- Ringtoets/Revetment/test/Ringtoets.Revetment.Data.Test/WaveConditionsInputStepSizeTest.cs (.../WaveConditionsInputStepSizeTest.cs) (revision 4b32064801ece7ab70357a2a942e21f113abc679) +++ Ringtoets/Revetment/test/Ringtoets.Revetment.Data.Test/WaveConditionsInputStepSizeTest.cs (.../WaveConditionsInputStepSizeTest.cs) (revision 19fb6d61aab057e0e405453c3a180360a48bb3b7) @@ -46,5 +46,24 @@ }; } } + + protected override IDictionary ExpectedValueForEnumValues + { + get + { + return new Dictionary + { + { + WaveConditionsInputStepSize.Half, 1 + }, + { + WaveConditionsInputStepSize.One, 2 + }, + { + WaveConditionsInputStepSize.Two, 3 + } + }; + } + } } } \ No newline at end of file