# frozen_string_literal: true require 'test_helper' class BlockUnitTest < Minitest::Test include Liquid def test_blankspace template = Liquid::Template.parse(' ') assert_equal [' '], template.root.nodelist end def test_variable_beginning template = Liquid::Template.parse('{{funk}} ') assert_equal 2, template.root.nodelist.size assert_equal Variable, template.root.nodelist[0].class assert_equal String, template.root.nodelist[1].class end def test_variable_end template = Liquid::Template.parse(' {{funk}}') assert_equal 2, template.root.nodelist.size assert_equal String, template.root.nodelist[0].class assert_equal Variable, template.root.nodelist[1].class end def test_variable_middle template = Liquid::Template.parse(' {{funk}} ') assert_equal 3, template.root.nodelist.size assert_equal String, template.root.nodelist[0].class assert_equal Variable, template.root.nodelist[1].class assert_equal String, template.root.nodelist[2].class end def test_variable_many_embedded_fragments template = Liquid::Template.parse(' {{funk}} {{so}} {{brother}} ') assert_equal 7, template.root.nodelist.size assert_equal [String, Variable, String, Variable, String, Variable, String], block_types(template.root.nodelist) end def test_with_block template = Liquid::Template.parse(' {% comment %} {% endcomment %} ') assert_equal [String, Comment, String], block_types(template.root.nodelist) assert_equal 3, template.root.nodelist.size end def test_with_custom_tag with_custom_tag('testtag', Block) do assert Liquid::Template.parse('{% testtag %} {% endtesttag %}') end end def test_custom_block_tags_have_a_default_render_to_output_buffer_method_for_backwards_compatibility klass1 = Class.new(Block) do def render(*) 'hello' end end with_custom_tag('blabla', klass1) do template = Liquid::Template.parse('{% blabla %} bla {% endblabla %}') assert_equal 'hello', template.render buf = ''.dup output = template.render({}, output: buf) assert_equal 'hello', output assert_equal 'hello', buf assert_equal buf.object_id, output.object_id end klass2 = Class.new(klass1) do def render(*) 'foo' + super + 'bar' end end with_custom_tag('blabla', klass2) do template = Liquid::Template.parse('{% blabla %} foo {% endblabla %}') assert_equal 'foohellobar', template.render buf = ''.dup output = template.render({}, output: buf) assert_equal 'foohellobar', output assert_equal 'foohellobar', buf assert_equal buf.object_id, output.object_id end end private def block_types(nodelist) nodelist.collect(&:class) end end # VariableTest