require 'helper' require 'slim/logic_less' class TestSlimLogicLess < TestSlim class Scope def initialize @hash = { person: [ { name: 'Joe', age: 1, selected: true }, { name: 'Jack', age: 2 } ] } end end def test_lambda source = %q{ p == person .name = name == simple .hello= hello == list li = key } hash = { hello: 'Hello!', person: lambda do |&block| %w(Joe Jack).map do |name| "#{block.call(name: name)}" end.join end, simple: lambda do |&block| "
#{block.call}
" end, list: lambda do |&block| list = [{key: 'First'}, {key: 'Second'}] "" end } assert_html '

Joe
Jack
Hello!

', source, scope: hash end def test_symbol_hash source = %q{ p - person .name = name } hash = { person: [ { name: 'Joe', }, { name: 'Jack', } ] } assert_html '

Joe
Jack

', source, scope: hash end def test_string_access source = %q{ p - person .name = name } hash = { 'person' => [ { 'name' => 'Joe', }, { 'name' => 'Jack', } ] } assert_html '

Joe
Jack

', source, scope: hash, dictionary_access: :string end def test_symbol_access source = %q{ p - person .name = name } hash = { person: [ { name: 'Joe', }, { name: 'Jack', } ] } assert_html '

Joe
Jack

', source, scope: hash, dictionary_access: :symbol end def test_method_access source = %q{ p - person .name = name } object = Object.new def object.person %w(Joe Jack).map do |name| person = Object.new person.instance_variable_set(:@name, name) def person.name @name end person end end assert_html '

Joe
Jack

', source, scope: object, dictionary_access: :method end def test_method_access_without_private source = %q{ p - person .age = age } object = Object.new def object.person person = Object.new def person.age 42 end person.singleton_class.class_eval { private :age } person end assert_html '

', source, scope: object, dictionary_access: :method end def test_instance_variable_access source = %q{ p - person .name = name } object = Object.new object.instance_variable_set(:@person, %w(Joe Jack).map do |name| person = Object.new person.instance_variable_set(:@name, name) person end) assert_html '

Joe
Jack

', source, scope: object, dictionary_access: :instance_variable end def test_to_s_access source = %q{ p - people .name = self } hash = { people: [ 'Joe', 'Jack' ] } assert_html '

Joe
Jack

', source, scope: hash, dictionary_access: :symbol end def test_string_hash source = %q{ p - person .name = name } hash = { 'person' => [ { 'name' => 'Joe', }, { 'name' => 'Jack', } ] } assert_html '

Joe
Jack

', source, scope: hash end def test_dictionary_option source = %q{ p - person .name = name } assert_html '

Joe
Jack

', source, scope: Scope.new, dictionary: '@hash' end def test_flag_section source = %q{ p - show_person - person .name = name - show_person | shown } hash = { show_person: true, person: [ { name: 'Joe', }, { name: 'Jack', } ] } assert_html '

Joe
Jack
shown

', source, scope: hash end def test_inverted_section source = %q{ p - person .name = name -! person | No person - !person | No person 2 } hash = {} assert_html '

No person No person 2

', source, scope: hash end def test_escaped_interpolation source = %q{ p text with \#{123} test } assert_html '

text with #{123} test

', source end def test_ruby_attributes source = %q{ p - person b name=name Person a id=name = age span class=name Person } assert_html '

Person1Person2

', source, scope: Scope.new, dictionary: '@hash' end def test_boolean_attributes source = %q{ p - person input checked=selected = name } assert_html '

JoeJack

', source, scope: Scope.new, dictionary: '@hash' end def test_sections source = %q{ p - person .name = name } assert_html '

Joe
Jack

', source, dictionary: 'ViewEnv.new' end def test_with_array source = %q{ ul - people_with_locations li = name li = city } assert_html '', source, dictionary: 'ViewEnv.new' end def test_method source = %q{ a href=output_number Link } assert_html 'Link', source, dictionary: 'ViewEnv.new' end def test_conditional_parent source = %q{ - prev_page li.previous a href=prev_page Older - next_page li.next a href=next_page Newer} assert_html'', source, scope: {prev_page: 'prev', next_page: 'next'} end def test_render_with_yield source = %q{ div == yield } assert_html '
This is the menu
', source do 'This is the menu' end end def test_render_parent_lambda source = %q{ - list == fn p = string } assert_html '

str

str

str

', source, scope: { fn: ->(&block) { "#{block.call}" }, list: [ "item1", "item2", "item3" ], string: "str" } end end