File: raw_test.rb

package info (click to toggle)
ruby-liquid-c 4.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 504 kB
  • sloc: ansic: 3,866; ruby: 1,151; makefile: 7
file content (93 lines) | stat: -rw-r--r-- 2,994 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# frozen_string_literal: true

require "test_helper"

class RawTest < Minitest::Test
  class RawWrapper < Liquid::Raw
    def render_to_output_buffer(_context, output)
      output << "<"
      super
      output << ">"
    end
  end
  Liquid::Template.register_tag("raw_wrapper", RawWrapper)

  def test_derived_class
    [
      "{% raw_wrapper %}body{% endraw_wrapper %}",
      "{% raw_wrapper %}body{%endraw_wrapper%}",
      "{% raw_wrapper %}body{%- endraw_wrapper -%}",
      "{% raw_wrapper %}body{%- endraw_wrapper %}",
      "{% raw_wrapper %}body{% endraw_wrapper -%}",
    ].each do |template|
      output = Liquid::Template.parse(template).render!

      assert_equal(
        "<body>",
        output,
        "Template: #{template}"
      )
    end
  end

  def test_allows_extra_string_after_tag_delimiter
    output = Liquid::Template.parse("{% raw %}message{% endraw this_is_allowed %}").render
    assert_equal("message", output)

    output = Liquid::Template.parse("{% raw %}message{%   endraw r%}").render
    assert_equal("message", output)
  end

  def test_ignores_incomplete_tag_delimter
    output = Liquid::Template.parse("{% raw %}{% endraw {% endraw %}").render
    assert_equal("{% endraw ", output)

    output = Liquid::Template.parse("{% raw %}{%endraw{% endraw %}").render
    assert_equal("{%endraw", output)

    output = Liquid::Template.parse("{% raw %}{%- endraw {% endraw %}").render
    assert_equal("{%- endraw ", output)
  end

  def test_does_not_allow_nbsp_in_tag_delimiter
    # these are valid
    Liquid::Template.parse("{% raw %}body{%endraw%}")
    Liquid::Template.parse("{% raw %}body{% endraw-%}")
    Liquid::Template.parse("{% raw %}body{% endraw -%}")
    Liquid::Template.parse("{% raw %}body{%-endraw %}")
    Liquid::Template.parse("{% raw %}body{%- endraw %}")
    Liquid::Template.parse("{% raw %}body{%-endraw-%}")
    Liquid::Template.parse("{% raw %}body{%- endraw -%}")
    Liquid::Template.parse("{% raw %}body{% endraw\u00A0%}")
    Liquid::Template.parse("{% raw %}body{% endraw \u00A0%}")
    Liquid::Template.parse("{% raw %}body{% endraw\u00A0 %}")
    Liquid::Template.parse("{% raw %}body{% endraw \u00A0 %}")
    Liquid::Template.parse("{% raw %}body{% endraw \u00A0 endraw %}")
    Liquid::Template.parse("{% raw %}body{% endraw\u00A0endraw %}")

    [
      "{%\u00A0endraw%}",
      "{%\u00A0 endraw%}",
      "{% \u00A0endraw%}",
      "{% \u00A0 endraw%}",
      "{%\u00A0endraw\u00A0%}",
      "{% - endraw %}",
      "{% endnot endraw %}",
    ].each do |bad_delimiter|
      exception = assert_raises(
        Liquid::SyntaxError,
        "#{bad_delimiter.inspect} did not raise Liquid::SyntaxError"
      ) do
        Liquid::Template.parse(
          "{% raw %}body#{bad_delimiter}"
        )
      end

      assert_equal(
        exception.message,
        "Liquid syntax error: 'raw' tag was never closed",
        "#{bad_delimiter.inspect} raised the wrong exception message",
      )
    end
  end
end