diff --git a/lib/syntax_tree/erb/nodes.rb b/lib/syntax_tree/erb/nodes.rb
index 00e1aa9..ce5c882 100644
--- a/lib/syntax_tree/erb/nodes.rb
+++ b/lib/syntax_tree/erb/nodes.rb
@@ -164,7 +164,7 @@ def new_line
def without_new_line
self.class.new(
- **deconstruct_keys([]).merge(closing: closing.without_new_line)
+ **deconstruct_keys([]).merge(closing: closing&.without_new_line)
)
end
@@ -253,6 +253,15 @@ def deconstruct_keys(keys)
end
end
+ def without_new_line
+ self.class.new(
+ **deconstruct_keys([]).merge(
+ opening: closing.nil? ? opening.without_new_line : opening,
+ closing: closing&.without_new_line
+ )
+ )
+ end
+
# The HTML-closing tag is responsible for new lines after the node.
def new_line
closing.nil? ? opening.new_line : closing&.new_line
diff --git a/test/html_test.rb b/test/html_test.rb
index 2f58ade..f97cb36 100644
--- a/test/html_test.rb
+++ b/test/html_test.rb
@@ -180,5 +180,12 @@ def test_breakable_on_char_data_white_space
assert_formatting(source, expected)
end
+
+ def test_self_closing_group
+ source = "\n\n"
+ expected = "\n\n\n"
+
+ assert_formatting(source, expected)
+ end
end
end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 608d233..a846211 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -12,18 +12,10 @@ class TestCase < Minitest::Test
def assert_formatting(source, expected)
formatted = SyntaxTree::ERB.format(source)
- if (expected != formatted)
- binding.irb if debug
- end
-
assert_equal(formatted, expected, "Failed first")
formatted_twice = SyntaxTree::ERB.format(formatted)
- if (expected != formatted_twice)
- binding.irb if debug
- end
-
assert_equal(formatted_twice, expected, "Failed second")
# Check that pretty_print works