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 | ||
|  | 
 | ||
|  | 
 |