From 081ea7bf40183b35caeff9c1d0c8b761a45e9f40 Mon Sep 17 00:00:00 2001 From: Sebastian Turner Date: Sun, 18 Oct 2026 07:09:44 -0700 Subject: [PATCH] Match ActiveSupport for Unicode whitespace in the blank emulation Signed-off-by: Sebastian Turner --- lib/liquid/condition.rb | 2 +- test/unit/condition_unit_test.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/liquid/condition.rb b/lib/liquid/condition.rb index 9d55c42b3..fa04acdb2 100644 --- a/lib/liquid/condition.rb +++ b/lib/liquid/condition.rb @@ -154,7 +154,7 @@ def liquid_blank?(value) false when String # Blank if empty or whitespace only (matches ActiveSupport) - value.empty? || value.match?(/\A\s*\z/) + value.empty? || value.match?(/\A[[:space:]]*\z/) when Array, Hash value.empty? else diff --git a/test/unit/condition_unit_test.rb b/test/unit/condition_unit_test.rb index d7f35f609..b34edadf5 100644 --- a/test/unit/condition_unit_test.rb +++ b/test/unit/condition_unit_test.rb @@ -219,6 +219,17 @@ def test_blank_with_whitespace_string assert_evaluates_true(VariableLookup.new('whitespace'), '==', blank_literal) end + def test_blank_with_unicode_whitespace_string + # ActiveSupport's String#blank? matches /\A[[:space:]]*\z/, so Unicode + # whitespace such as a non-breaking space or an ideographic space is blank. + blank_literal = Condition.class_variable_get(:@@method_literals)['blank'] + + ["\u00A0", "\u3000", "\u2003 \n"].each do |value| + @context['unicode_whitespace'] = value + assert_evaluates_true(VariableLookup.new('unicode_whitespace'), '==', blank_literal) + end + end + def test_blank_with_empty_string # An empty string has no content, so it should be considered blank. # This is the most basic case of a blank string.