152 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
|  | require File.expand_path(File.dirname(__FILE__) + '/test_helper') | ||
|  | 
 | ||
|  | class QuickstartTest < Test::Unit::TestCase | ||
|  | 
 | ||
|  |   def test_hello_world | ||
|  |     context = Radius::Context.new | ||
|  |     context.define_tag "hello" do |tag| | ||
|  |       "Hello #{tag.attr['name'] || 'World'}!" | ||
|  |     end | ||
|  |     parser = Radius::Parser.new(context) | ||
|  |     assert_equal "<p>Hello World!</p>", parser.parse('<p><radius:hello /></p>') | ||
|  |     assert_equal "<p>Hello John!</p>", parser.parse('<p><radius:hello name="John" /></p>') | ||
|  |   end | ||
|  |    | ||
|  |   def test_example_2 | ||
|  |     require 'redcloth' | ||
|  |     context = Radius::Context.new | ||
|  |     context.define_tag "textile" do |tag| | ||
|  |       contents = tag.expand | ||
|  |       RedCloth.new(contents).to_html | ||
|  |     end | ||
|  |     parser = Radius::Parser.new(context) | ||
|  |     assert_equal "<p>Hello <b>World</b>!</p>", parser.parse('<radius:textile>Hello **World**!</radius:textile>') | ||
|  |   end | ||
|  |    | ||
|  |   def test_nested_example | ||
|  |     context = Radius::Context.new | ||
|  |      | ||
|  |     context.define_tag "stooge" do |tag| | ||
|  |       content = '' | ||
|  |       ["Larry", "Moe", "Curly"].each do |name| | ||
|  |         tag.locals.name = name | ||
|  |         content << tag.expand | ||
|  |       end | ||
|  |       content | ||
|  |     end | ||
|  |      | ||
|  |     context.define_tag "stooge:name" do |tag| | ||
|  |       tag.locals.name | ||
|  |     end | ||
|  |      | ||
|  |     parser = Radius::Parser.new(context) | ||
|  |      | ||
|  |     template = <<-TEMPLATE
 | ||
|  | <ul> | ||
|  | <radius:stooge> | ||
|  |   <li><radius:name /></li> | ||
|  | </radius:stooge>
 | ||
|  | </ul>
 | ||
|  |     TEMPLATE | ||
|  |      | ||
|  |     output = <<-OUTPUT
 | ||
|  | <ul> | ||
|  | 
 | ||
|  |   <li>Larry</li>
 | ||
|  | 
 | ||
|  |   <li>Moe</li>
 | ||
|  | 
 | ||
|  |   <li>Curly</li>
 | ||
|  | 
 | ||
|  | </ul>
 | ||
|  |     OUTPUT | ||
|  |      | ||
|  |     assert_equal output, parser.parse(template) | ||
|  |   end | ||
|  |    | ||
|  |   class User | ||
|  |     attr_accessor :name, :age, :email | ||
|  |   end | ||
|  |   def test_exposing_objects_example | ||
|  |     parser = Radius::Parser.new | ||
|  |      | ||
|  |     parser.context.define_tag "count", :for => 1
 | ||
|  |     assert_equal "1", parser.parse("<radius:count />") | ||
|  |      | ||
|  |     user = User.new | ||
|  |     user.name, user.age, user.email = "John", 29, "john@example.com" | ||
|  |     parser.context.define_tag "user", :for => user, :expose => [ :name, :age, :email ] | ||
|  |     assert_equal "John", parser.parse("<radius:user><radius:name /></radius:user>") | ||
|  |      | ||
|  |     assert_equal "John", parser.parse("<radius:user:name />") | ||
|  |   end | ||
|  |    | ||
|  |   class LazyContext < Radius::Context | ||
|  |     def tag_missing(tag, attr, &block) | ||
|  |       "<strong>ERROR: Undefined tag `#{tag}' with attributes #{attr.inspect}</strong>" | ||
|  |     end | ||
|  |   end | ||
|  |   def test_tag_missing_example | ||
|  |     parser = Radius::Parser.new(LazyContext.new, :tag_prefix => 'lazy') | ||
|  |     output = %{<strong>ERROR: Undefined tag `weird' with attributes {"value"=>"true"}</strong>} | ||
|  |     assert_equal output, parser.parse('<lazy:weird value="true" />') | ||
|  |   end | ||
|  |    | ||
|  |   def test_tag_globals_example | ||
|  |     parser = Radius::Parser.new | ||
|  |      | ||
|  |     parser.context.define_tag "inc" do |tag| | ||
|  |       tag.globals.count ||= 0
 | ||
|  |       tag.globals.count += 1
 | ||
|  |       "" | ||
|  |     end | ||
|  |      | ||
|  |     parser.context.define_tag "count" do |tag| | ||
|  |       tag.globals.count || 0
 | ||
|  |     end | ||
|  |      | ||
|  |     assert_equal "0 1", parser.parse("<radius:count /> <radius:inc /><radius:count />") | ||
|  |   end | ||
|  |    | ||
|  |   class Person | ||
|  |     attr_accessor :name, :friend | ||
|  |     def initialize(name) | ||
|  |       @name = name | ||
|  |     end | ||
|  |   end | ||
|  |   def test_tag_locals_and_globals_example | ||
|  |     jack = Person.new('Jack') | ||
|  |     jill = Person.new('Jill') | ||
|  |     jack.friend = jill | ||
|  |     jill.friend = jack | ||
|  |      | ||
|  |     context = Radius::Context.new do |c| | ||
|  |       c.define_tag "jack" do |tag| | ||
|  |         tag.locals.person = jack | ||
|  |         tag.expand | ||
|  |       end | ||
|  |       c.define_tag "jill" do |tag| | ||
|  |         tag.locals.person = jill | ||
|  |         tag.expand | ||
|  |       end | ||
|  |       c.define_tag "name" do |tag| | ||
|  |         tag.locals.person.name rescue tag.missing! | ||
|  |       end | ||
|  |       c.define_tag "friend" do |tag| | ||
|  |         tag.locals.person = tag.locals.person.friend rescue tag.missing! | ||
|  |         tag.expand | ||
|  |       end | ||
|  |     end | ||
|  |      | ||
|  |     parser = Radius::Parser.new(context, :tag_prefix => 'r') | ||
|  |      | ||
|  |     assert_equal "Jack", parser.parse('<r:jack:name />') #=> "Jack" | ||
|  |     assert_equal "Jill", parser.parse('<r:jill:name />') #=> "Jill" | ||
|  |     assert_equal "Jack", parser.parse('<r:jill:friend:name />') #=> "Jack" | ||
|  |     assert_equal "Jack", parser.parse('<r:jack:friend:friend:name />') #=> "Jack" | ||
|  |     assert_equal "Jack and Jill", parser.parse('<r:jill><r:friend:name /> and <r:name /></r:jill>') #=> "Jack and Jill" | ||
|  |     assert_raises(Radius::UndefinedTagError) { parser.parse('<r:name />') } # raises a Radius::UndefinedTagError exception | ||
|  |   end | ||
|  |    | ||
|  | end |