121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
#!/usr/bin/env ruby
 | 
						|
require File.dirname(__FILE__) + '/helper'
 | 
						|
 | 
						|
module FunnyFilter
 | 
						|
  
 | 
						|
  def make_funny(input)
 | 
						|
    'LOL'             
 | 
						|
  end
 | 
						|
 | 
						|
  def cite_funny(input)
 | 
						|
    "LOL: #{input}"
 | 
						|
  end             
 | 
						|
 | 
						|
  def add_smiley(input, smiley = ":-)")
 | 
						|
    "#{input} #{smiley}"
 | 
						|
  end
 | 
						|
  
 | 
						|
  def add_tag(input, tag = "p", id = "foo")
 | 
						|
    %|<#{tag} id="#{id}">#{input}</#{tag}>|
 | 
						|
  end
 | 
						|
 | 
						|
  def paragraph(input)
 | 
						|
    "<p>#{input}</p>"
 | 
						|
  end
 | 
						|
  
 | 
						|
  def link_to(name, url)
 | 
						|
    %|<a href="#{url}">#{name}</a>|
 | 
						|
  end
 | 
						|
end                 
 | 
						|
 | 
						|
 | 
						|
class OutputTest < Test::Unit::TestCase
 | 
						|
  include Liquid
 | 
						|
 | 
						|
  def setup
 | 
						|
    @assigns = {     
 | 
						|
      'best_cars' => 'bmw',
 | 
						|
      'car' => {'bmw' => 'good', 'gm' => 'bad'}
 | 
						|
      }
 | 
						|
 | 
						|
  end
 | 
						|
 | 
						|
  def test_variable  
 | 
						|
    text = %| {{best_cars}} |
 | 
						|
 | 
						|
    expected = %| bmw |
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_variable_traversing
 | 
						|
    text = %| {{car.bmw}} {{car.gm}} {{car.bmw}} |
 | 
						|
 | 
						|
    expected = %| good bad good |
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns)
 | 
						|
  end               
 | 
						|
  
 | 
						|
  def test_variable_piping
 | 
						|
    text = %( {{ car.gm | make_funny }} )
 | 
						|
    expected = %| LOL |               
 | 
						|
    
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
 | 
						|
  def test_variable_piping_with_input
 | 
						|
    text = %( {{ car.gm | cite_funny }} )
 | 
						|
    expected = %| LOL: bad |               
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
  
 | 
						|
  def test_variable_piping_with_args
 | 
						|
    text = %! {{ car.gm | add_smiley : ':-(' }} !
 | 
						|
    expected = %| bad :-( |
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
  
 | 
						|
  def test_variable_piping_with_no_args
 | 
						|
    text = %! {{ car.gm | add_smiley }} !
 | 
						|
    expected = %| bad :-) |
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
  
 | 
						|
  def test_multiple_variable_piping_with_args
 | 
						|
    text = %! {{ car.gm | add_smiley : ':-(' | add_smiley : ':-('}} !
 | 
						|
    expected = %| bad :-( :-( |
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
 | 
						|
  def test_variable_piping_with_args
 | 
						|
    text = %! {{ car.gm | add_tag : 'span', 'bar'}} !
 | 
						|
    expected = %| <span id="bar">bad</span> |
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
 | 
						|
  def test_variable_piping_with_variable_args
 | 
						|
    text = %! {{ car.gm | add_tag : 'span', car.bmw}} !
 | 
						|
    expected = %| <span id="good">bad</span> |
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
 | 
						|
  def test_multiple_pipings
 | 
						|
    text = %( {{ best_cars | cite_funny | paragraph }} )
 | 
						|
    expected = %| <p>LOL: bmw</p> |               
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])
 | 
						|
  end
 | 
						|
  
 | 
						|
  def test_link_to
 | 
						|
    text = %( {{ 'Typo' | link_to: 'http://typo.leetsoft.com' }} )
 | 
						|
    expected = %| <a href="http://typo.leetsoft.com">Typo</a> |               
 | 
						|
 | 
						|
    assert_equal expected, Template.parse(text).render(@assigns, :filters => [FunnyFilter])    
 | 
						|
  end
 | 
						|
  
 | 
						|
 | 
						|
end  |