File: expression_test.rb

package info (click to toggle)
ruby-liquid 5.4.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,176 kB
  • sloc: ruby: 10,561; makefile: 6
file content (46 lines) | stat: -rw-r--r-- 1,242 bytes parent folder | download | duplicates (2)
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
# frozen_string_literal: true

require 'test_helper'

class ExpressionTest < Minitest::Test
  def test_keyword_literals
    assert_equal(true, parse_and_eval("true"))
    assert_equal(true, parse_and_eval(" true "))
  end

  def test_string
    assert_equal("single quoted", parse_and_eval("'single quoted'"))
    assert_equal("double quoted", parse_and_eval('"double quoted"'))
    assert_equal("spaced", parse_and_eval(" 'spaced' "))
    assert_equal("spaced2", parse_and_eval(' "spaced2" '))
  end

  def test_int
    assert_equal(123, parse_and_eval("123"))
    assert_equal(456, parse_and_eval(" 456 "))
    assert_equal(12, parse_and_eval("012"))
  end

  def test_float
    assert_equal(1.5, parse_and_eval("1.5"))
    assert_equal(2.5, parse_and_eval(" 2.5 "))
  end

  def test_range
    assert_equal(1..2, parse_and_eval("(1..2)"))
    assert_equal(3..4, parse_and_eval(" ( 3 .. 4 ) "))
  end

  private

  def parse_and_eval(markup, **assigns)
    if Liquid::Template.error_mode == :strict
      p = Liquid::Parser.new(markup)
      markup = p.expression
      p.consume(:end_of_string)
    end
    expression = Liquid::Expression.parse(markup)
    context = Liquid::Context.new(assigns)
    context.evaluate(expression)
  end
end