Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 21 additions & 10 deletions Fluid.Tests/MiscFiltersTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,29 @@ public async Task DefaultReturnsValueIfDefined()
Assert.Equal("foo", result.ToStringValue());
}

[Fact]
public async Task DefaultReturnsDefaultIfNotDefinedOrEmptyOrFalse()
{
foreach (var value in new FluidValue[] { NilValue.Instance, new StringValue(""), BooleanValue.False, ArrayValue.Empty })
{
var arguments = new FilterArguments().Add(new StringValue("bar"));
var context = new TemplateContext();
[Theory]
[InlineData("foo", "foo", "bar", false)]
[InlineData("bar", null, "bar", false)]
[InlineData("bar", false, "bar", false)]
[InlineData("bar", new int[0], "bar", false)]
[InlineData("bar", "", "bar", false)]
[InlineData("bar", "empty", "bar", false)]
[InlineData("foo", "foo", "bar", true)]
[InlineData("bar", null, "bar", true)]
[InlineData("bar", "", "bar", true)]
[InlineData(false, false, "bar", true)]
[InlineData("bar", new int[0], "bar", true)]
[InlineData("bar", "empty", "bar", true)]
public async Task DefaultReturnsDefaultIfNotDefinedOrEmptyOrFalse(object expected, object input, object @default, bool allowFalse)
{
var arguments = new FilterArguments()
.Add("default", FluidValue.Create(@default, TemplateOptions.Default))
.Add("allow_false", FluidValue.Create(allowFalse, TemplateOptions.Default));

var result = await MiscFilters.Default(value, arguments, context);
var context = new TemplateContext();
var result = await MiscFilters.Default("empty" == input as string ? EmptyValue.Instance : FluidValue.Create(input, TemplateOptions.Default), arguments, context);

Assert.Equal("bar", result.ToStringValue());
}
Assert.Equal(expected, result.ToObjectValue());
}

[Fact]
Expand Down
16 changes: 14 additions & 2 deletions Fluid/Filters/MiscFilters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,21 @@ public static ValueTask<FluidValue> Handleize(FluidValue input, FilterArguments

public static ValueTask<FluidValue> Default(FluidValue input, FilterArguments arguments, TemplateContext context)
{
if (input.IsNil() || input == BooleanValue.False || EmptyValue.Instance.Equals(input))
var falseCheck = arguments.HasNamed("allow_false") && arguments["allow_false"] == BooleanValue.True;

if (falseCheck)
{
if (input.IsNil() || EmptyValue.Instance.Equals(input))
{
return arguments.At(0);
}
}
else
{
return arguments.At(0);
if (input.IsNil() || input == BooleanValue.False || EmptyValue.Instance.Equals(input))
{
return arguments.At(0);
}
}

return input;
Expand Down