mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-15 08:50:45 -07:00
Merge pull request #1692 from Shopify/error-message-with-filepath
set context's template_name with template.name in render and include tag
This commit is contained in:
@@ -16,6 +16,8 @@ module Liquid
|
||||
template = template_factory.for(template_name)
|
||||
|
||||
partial = template.parse(source, parse_context)
|
||||
partial.name ||= template_name
|
||||
|
||||
cached_partials[template_name] = partial
|
||||
ensure
|
||||
parse_context.partial = false
|
||||
|
||||
@@ -70,9 +70,11 @@ module Liquid
|
||||
|
||||
old_template_name = context.template_name
|
||||
old_partial = context.partial
|
||||
|
||||
begin
|
||||
context.template_name = template_name
|
||||
context.partial = true
|
||||
context.template_name = partial.name
|
||||
context.partial = true
|
||||
|
||||
context.stack do
|
||||
@attributes.each do |key, value|
|
||||
context[key] = context.evaluate(value)
|
||||
|
||||
@@ -76,7 +76,7 @@ module Liquid
|
||||
|
||||
render_partial_func = ->(var, forloop) {
|
||||
inner_context = context.new_isolated_subcontext
|
||||
inner_context.template_name = template_name
|
||||
inner_context.template_name = partial.name
|
||||
inner_context.partial = true
|
||||
inner_context['forloop'] = forloop if forloop
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ module Liquid
|
||||
# template.render('user_name' => 'bob')
|
||||
#
|
||||
class Template
|
||||
attr_accessor :root
|
||||
attr_accessor :root, :name
|
||||
attr_reader :resource_limits, :warnings
|
||||
|
||||
class TagRegistry
|
||||
|
||||
@@ -356,4 +356,25 @@ class IncludeTagTest < Minitest::Test
|
||||
partials: { 'break' => "{% break %}" },
|
||||
)
|
||||
end
|
||||
|
||||
def test_render_tag_renders_error_with_template_name
|
||||
assert_template_result(
|
||||
'Liquid error (foo line 1): standard error',
|
||||
"{% include 'foo' with errors %}",
|
||||
{ 'errors' => ErrorDrop.new },
|
||||
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||
render_errors: true,
|
||||
)
|
||||
end
|
||||
|
||||
def test_render_tag_renders_error_with_template_name_from_template_factory
|
||||
assert_template_result(
|
||||
'Liquid error (some/path/foo line 1): standard error',
|
||||
"{% include 'foo' with errors %}",
|
||||
{ 'errors' => ErrorDrop.new },
|
||||
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||
template_factory: StubTemplateFactory.new,
|
||||
render_errors: true,
|
||||
)
|
||||
end
|
||||
end # IncludeTagTest
|
||||
|
||||
@@ -264,4 +264,25 @@ class RenderTagTest < Minitest::Test
|
||||
},
|
||||
)
|
||||
end
|
||||
|
||||
def test_render_tag_renders_error_with_template_name
|
||||
assert_template_result(
|
||||
'Liquid error (foo line 1): standard error',
|
||||
"{% render 'foo' with errors %}",
|
||||
{ 'errors' => ErrorDrop.new },
|
||||
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||
render_errors: true,
|
||||
)
|
||||
end
|
||||
|
||||
def test_render_tag_renders_error_with_template_name_from_template_factory
|
||||
assert_template_result(
|
||||
'Liquid error (some/path/foo line 1): standard error',
|
||||
"{% render 'foo' with errors %}",
|
||||
{ 'errors' => ErrorDrop.new },
|
||||
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||
template_factory: StubTemplateFactory.new,
|
||||
render_errors: true,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
+7
-4
@@ -39,11 +39,12 @@ module Minitest
|
||||
|
||||
def assert_template_result(
|
||||
expected, template, assigns = {},
|
||||
message: nil, partials: nil, error_mode: nil, render_errors: false
|
||||
message: nil, partials: nil, error_mode: nil, render_errors: false,
|
||||
template_factory: nil
|
||||
)
|
||||
template = Liquid::Template.parse(template, line_numbers: true, error_mode: error_mode&.to_sym)
|
||||
file_system = StubFileSystem.new(partials || {})
|
||||
registers = Liquid::Registers.new(file_system: file_system)
|
||||
registers = Liquid::Registers.new(file_system: file_system, template_factory: template_factory)
|
||||
context = Liquid::Context.build(static_environments: assigns, rethrow_errors: !render_errors, registers: registers)
|
||||
output = template.render(context)
|
||||
assert_equal(expected, output, message)
|
||||
@@ -209,8 +210,10 @@ class StubTemplateFactory
|
||||
@count = 0
|
||||
end
|
||||
|
||||
def for(_template_name)
|
||||
def for(template_name)
|
||||
@count += 1
|
||||
Liquid::Template.new
|
||||
template = Liquid::Template.new
|
||||
template.name = "some/path/" + template_name
|
||||
template
|
||||
end
|
||||
end
|
||||
|
||||
@@ -156,4 +156,22 @@ class PartialCacheUnitTest < Minitest::Test
|
||||
|
||||
assert_equal(1, shared_file_system.file_read_count)
|
||||
end
|
||||
|
||||
def test_uses_template_name_from_template_factory
|
||||
template_factory = StubTemplateFactory.new
|
||||
context = Liquid::Context.build(
|
||||
registers: {
|
||||
file_system: StubFileSystem.new('my_partial' => 'my partial body'),
|
||||
template_factory: template_factory,
|
||||
},
|
||||
)
|
||||
|
||||
partial = Liquid::PartialCache.load(
|
||||
'my_partial',
|
||||
context: context,
|
||||
parse_context: Liquid::ParseContext.new,
|
||||
)
|
||||
|
||||
assert_equal('some/path/my_partial', partial.name)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user