163 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
		
		
			
		
	
	
			163 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env ruby
							 | 
						||
| 
								 | 
							
								require File.dirname(__FILE__) + '/helper'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ContextDrop < Liquid::Drop
							 | 
						||
| 
								 | 
							
								  def scopes
							 | 
						||
| 
								 | 
							
								    @context.scopes.size
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def scopes_as_array
							 | 
						||
| 
								 | 
							
								    (1..@context.scopes.size).to_a
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def loop_pos
							 | 
						||
| 
								 | 
							
								    @context['forloop.index']
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def break
							 | 
						||
| 
								 | 
							
								    Breakpoint.breakpoint
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def before_method(method)
							 | 
						||
| 
								 | 
							
								    return @context[method]
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ProductDrop < Liquid::Drop
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class TextDrop < Liquid::Drop
							 | 
						||
| 
								 | 
							
								    def array
							 | 
						||
| 
								 | 
							
								      ['text1', 'text2']
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def text
							 | 
						||
| 
								 | 
							
								      'text1'
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class CatchallDrop < Liquid::Drop
							 | 
						||
| 
								 | 
							
								    def before_method(method)
							 | 
						||
| 
								 | 
							
								      return 'method: ' << method
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def texts
							 | 
						||
| 
								 | 
							
								    TextDrop.new
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def catchall
							 | 
						||
| 
								 | 
							
								    CatchallDrop.new
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def context
							 | 
						||
| 
								 | 
							
								    ContextDrop.new
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  protected
							 | 
						||
| 
								 | 
							
								    def callmenot
							 | 
						||
| 
								 | 
							
								      "protected"
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								end                   
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class EnumerableDrop < Liquid::Drop   
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def size
							 | 
						||
| 
								 | 
							
								    3
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def each
							 | 
						||
| 
								 | 
							
								    yield 1
							 | 
						||
| 
								 | 
							
								    yield 2
							 | 
						||
| 
								 | 
							
								    yield 3
							 | 
						||
| 
								 | 
							
								  end          
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DropsTest < Test::Unit::TestCase
							 | 
						||
| 
								 | 
							
								  include Liquid
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_product_drop
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    assert_nothing_raised do
							 | 
						||
| 
								 | 
							
								      tpl = Liquid::Template.parse( '  '  )
							 | 
						||
| 
								 | 
							
								      tpl.render('product' => ProductDrop.new)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_text_drop
							 | 
						||
| 
								 | 
							
								    output = Liquid::Template.parse( ' {{ product.texts.text }} '  ).render('product' => ProductDrop.new)
							 | 
						||
| 
								 | 
							
								    assert_equal ' text1 ', output
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def test_text_drop
							 | 
						||
| 
								 | 
							
								    output = Liquid::Template.parse( ' {{ product.catchall.unknown }} '  ).render('product' => ProductDrop.new)
							 | 
						||
| 
								 | 
							
								    assert_equal ' method: unknown ', output
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def test_text_array_drop
							 | 
						||
| 
								 | 
							
								    output = Liquid::Template.parse( '{% for text in product.texts.array %} {{text}} {% endfor %}'  ).render('product' => ProductDrop.new)
							 | 
						||
| 
								 | 
							
								    assert_equal ' text1  text2 ', output
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_context_drop
							 | 
						||
| 
								 | 
							
								    output = Liquid::Template.parse( ' {{ context.bar }} '  ).render('context' => ContextDrop.new, 'bar' => "carrot")
							 | 
						||
| 
								 | 
							
								    assert_equal ' carrot ', output
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_nested_context_drop
							 | 
						||
| 
								 | 
							
								    output = Liquid::Template.parse( ' {{ product.context.foo }} '  ).render('product' => ProductDrop.new, 'foo' => "monkey")
							 | 
						||
| 
								 | 
							
								    assert_equal ' monkey ', output
							 | 
						||
| 
								 | 
							
								  end  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def test_protected
							 | 
						||
| 
								 | 
							
								    output = Liquid::Template.parse( ' {{ product.callmenot }} '  ).render('product' => ProductDrop.new)
							 | 
						||
| 
								 | 
							
								    assert_equal '  ', output    
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_scope
							 | 
						||
| 
								 | 
							
								    assert_equal '1', Liquid::Template.parse( '{{ context.scopes }}'  ).render('context' => ContextDrop.new)    
							 | 
						||
| 
								 | 
							
								    assert_equal '2', Liquid::Template.parse( '{%for i in dummy%}{{ context.scopes }}{%endfor%}'  ).render('context' => ContextDrop.new, 'dummy' => [1])
							 | 
						||
| 
								 | 
							
								    assert_equal '3', Liquid::Template.parse( '{%for i in dummy%}{%for i in dummy%}{{ context.scopes }}{%endfor%}{%endfor%}'  ).render('context' => ContextDrop.new, 'dummy' => [1])
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_scope_though_proc
							 | 
						||
| 
								 | 
							
								    assert_equal '1', Liquid::Template.parse( '{{ s }}'  ).render('context' => ContextDrop.new, 's' => Proc.new{|c| c['context.scopes'] })    
							 | 
						||
| 
								 | 
							
								    assert_equal '2', Liquid::Template.parse( '{%for i in dummy%}{{ s }}{%endfor%}'  ).render('context' => ContextDrop.new, 's' => Proc.new{|c| c['context.scopes'] }, 'dummy' => [1])
							 | 
						||
| 
								 | 
							
								    assert_equal '3', Liquid::Template.parse( '{%for i in dummy%}{%for i in dummy%}{{ s }}{%endfor%}{%endfor%}'  ).render('context' => ContextDrop.new, 's' => Proc.new{|c| c['context.scopes'] }, 'dummy' => [1])
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_scope_with_assigns
							 | 
						||
| 
								 | 
							
								    assert_equal 'variable', Liquid::Template.parse( '{% assign a = "variable"%}{{a}}'  ).render('context' => ContextDrop.new)    
							 | 
						||
| 
								 | 
							
								    assert_equal 'variable', Liquid::Template.parse( '{% assign a = "variable"%}{%for i in dummy%}{{a}}{%endfor%}'  ).render('context' => ContextDrop.new, 'dummy' => [1])    
							 | 
						||
| 
								 | 
							
								    assert_equal 'test', Liquid::Template.parse( '{% assign header_gif = "test"%}{{header_gif}}'  ).render('context' => ContextDrop.new)    
							 | 
						||
| 
								 | 
							
								    assert_equal 'test', Liquid::Template.parse( "{% assign header_gif = 'test'%}{{header_gif}}"  ).render('context' => ContextDrop.new)    
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								  def test_scope_from_tags
							 | 
						||
| 
								 | 
							
								    assert_equal '1', Liquid::Template.parse( '{% for i in context.scopes_as_array %}{{i}}{% endfor %}'  ).render('context' => ContextDrop.new, 'dummy' => [1])    
							 | 
						||
| 
								 | 
							
								    assert_equal '12', Liquid::Template.parse( '{%for a in dummy%}{% for i in context.scopes_as_array %}{{i}}{% endfor %}{% endfor %}'  ).render('context' => ContextDrop.new, 'dummy' => [1])    
							 | 
						||
| 
								 | 
							
								    assert_equal '123', Liquid::Template.parse( '{%for a in dummy%}{%for a in dummy%}{% for i in context.scopes_as_array %}{{i}}{% endfor %}{% endfor %}{% endfor %}'  ).render('context' => ContextDrop.new, 'dummy' => [1])                
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_access_context_from_drop
							 | 
						||
| 
								 | 
							
								    assert_equal '123', Liquid::Template.parse( '{%for a in dummy%}{{ context.loop_pos }}{% endfor %}'  ).render('context' => ContextDrop.new, 'dummy' => [1,2,3])            
							 | 
						||
| 
								 | 
							
								  end             
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  def test_enumerable_drop         
							 | 
						||
| 
								 | 
							
								    assert_equal '123', Liquid::Template.parse( '{% for c in collection %}{{c}}{% endfor %}').render('collection' => EnumerableDrop.new)
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def test_enumerable_drop_size         
							 | 
						||
| 
								 | 
							
								    assert_equal '3', Liquid::Template.parse( '{{collection.size}}').render('collection' => EnumerableDrop.new)
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |