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'}]
"
#{block.call(*list)}
"
end
}
assert_html '
Joe
Jack
Hello!
First
Second
', 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 '
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 '