Browse Source

Add options builder extension

pull/1574/head
Scott Williams 6 years ago
parent
commit
4d6a0ec836
  1. 26
      src/ImageSharp/GraphicOptionsDefaultsExtensions.cs
  2. 50
      tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs

26
src/ImageSharp/GraphicOptionsDefaultsExtensions.cs

@ -11,6 +11,30 @@ namespace SixLabors.ImageSharp
/// </summary>
public static class GraphicOptionsDefaultsExtensions
{
/// <summary>
/// Sets the default options against the image processing context.
/// </summary>
/// <param name="context">The image processing context to store default against.</param>
/// <param name="optionsBuilder">The action to update instance of the default options used.</param>
public static void SetDefaultOptions(this IImageProcessingContext context, Action<GraphicsOptions> optionsBuilder)
{
var cloned = context.GetDefaultGraphicsOptions().DeepClone();
optionsBuilder(cloned);
context.Properties[typeof(GraphicsOptions)] = cloned;
}
/// <summary>
/// Sets the default options against the configuration.
/// </summary>
/// <param name="context">The image processing context to store default against.</param>
/// <param name="optionsBuilder">The default options to use.</param>
public static void SetDefaultGraphicsOptions(this Configuration context, Action<GraphicsOptions> optionsBuilder)
{
var cloned = context.GetDefaultGraphicsOptions().DeepClone();
optionsBuilder(cloned);
context.Properties[typeof(GraphicsOptions)] = cloned;
}
/// <summary>
/// Sets the default options against the image processing context.
/// </summary>
@ -26,7 +50,7 @@ namespace SixLabors.ImageSharp
/// </summary>
/// <param name="context">The image processing context to store default against.</param>
/// <param name="options">The default options to use.</param>
public static void SetDefaultOptions(this Configuration context, GraphicsOptions options)
public static void SetDefaultGraphicsOptions(this Configuration context, GraphicsOptions options)
{
context.Properties[typeof(GraphicsOptions)] = options;
}

50
tests/ImageSharp.Tests/GraphicOptionsDefaultsExtensionsTests.cs

@ -3,6 +3,7 @@
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests.Processing;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit;
namespace SixLabors.ImageSharp.Tests
@ -23,17 +24,60 @@ namespace SixLabors.ImageSharp.Tests
Assert.DoesNotContain(typeof(GraphicsOptions), config.Properties.Keys);
}
[Fact]
public void UpdateDefaultOptionsOnProcessingContext_AlwaysNewInstance()
{
var option = new GraphicsOptions()
{
BlendPercentage = 0.9f
};
var config = new Configuration();
var context = new FakeImageOperationsProvider.FakeImageOperations<Rgba32>(config, null, true);
context.SetDefaultOptions(option);
context.SetDefaultOptions(o =>
{
Assert.Equal(0.9f, o.BlendPercentage); // has origional values
o.BlendPercentage = 0.4f;
});
var returnedOption = context.GetDefaultGraphicsOptions();
Assert.Equal(0.4f, returnedOption.BlendPercentage);
Assert.Equal(0.9f, option.BlendPercentage); // hasn't been mutated
}
[Fact]
public void SetDefaultOptionsOnConfiguration()
{
var option = new GraphicsOptions();
var config = new Configuration();
config.SetDefaultOptions(option);
config.SetDefaultGraphicsOptions(option);
Assert.Equal(option, config.Properties[typeof(GraphicsOptions)]);
}
[Fact]
public void UpdateDefaultOptionsOnConfiguration_AlwaysNewInstance()
{
var option = new GraphicsOptions()
{
BlendPercentage = 0.9f
};
var config = new Configuration();
config.SetDefaultGraphicsOptions(option);
config.SetDefaultGraphicsOptions(o =>
{
Assert.Equal(0.9f, o.BlendPercentage); // has origional values
o.BlendPercentage = 0.4f;
});
var returnedOption = config.GetDefaultGraphicsOptions();
Assert.Equal(0.4f, returnedOption.BlendPercentage);
Assert.Equal(0.9f, option.BlendPercentage); // hasn't been mutated
}
[Fact]
public void GetDefaultOptionsFromConfiguration_SettingNullThenReturnsNewInstance()
{
@ -41,7 +85,7 @@ namespace SixLabors.ImageSharp.Tests
var options = config.GetDefaultGraphicsOptions();
Assert.NotNull(options);
config.SetDefaultOptions((GraphicsOptions)null);
config.SetDefaultGraphicsOptions((GraphicsOptions)null);
var options2 = config.GetDefaultGraphicsOptions();
Assert.NotNull(options2);
@ -107,7 +151,7 @@ namespace SixLabors.ImageSharp.Tests
{
var option = new GraphicsOptions();
var config = new Configuration();
config.SetDefaultOptions(option);
config.SetDefaultGraphicsOptions(option);
var context = new FakeImageOperationsProvider.FakeImageOperations<Rgba32>(config, null, true);
var ctxOptions = context.GetDefaultGraphicsOptions();

Loading…
Cancel
Save