require 'test_helper'
unless Module.const_defined?(:ActiveRecord)
# blank definition from active_support/core_ext/blank.rb
class String #:nodoc:
def blank?
empty? || strip.empty?
end
end
end
module ZafuTestTags
def r_hello
'hello world!'
end
def r_only_hello
expand_with(:only=>['hello'])
end
def r_only_string
out expand_with(:only=>[:string])
end
def r_text
@params[:text]
end
def r_repeat
count = @params[:count] || 2
count.to_i.times do
out expand_with
end
end
def r_set_context
params = @params.dup
if ignore = @params[:ignore]
params[:ignore] = @params[:ignore].split(',').map {|e| e.strip}
end
expand_with(params)
end
def r_missing
return '' unless check_params(:good, :night)
"nothing missing"
end
def r_textarea
res = "<#{@html_tag}#{params_to_html(@params)}"
@html_tag_done = true
inner = expand_with
if inner == ''
res + "/>"
else
res + ">#{inner}"
end
end
def r_test
self.inspect
end
end
class String
def pseudo_id(*args)
self
end
end
class ParserTest < Test::Unit::TestCase
module Mock
def find_node_by_pseudo(*args)
args[0]
end
end
class ParserTestHelper < Zena::Parser::DummyHelper
include ParserTest::Mock
end
yamltest :files => [:zafu, :zafu_asset, :zafu_insight, :zazen] #, :options => {:latex => {:module => :zazen, :output => 'latex'}}
MODULES = {
:zafu => [Zena::Parser::ZafuRules, Zena::Parser::ZafuTags, ZafuTestTags],
:zafu_asset => [Zena::Parser::ZafuRules, Zena::Parser::ZafuTags, ZafuTestTags],
:zafu_insight => [Zena::Parser::ZafuRules, Zena::Parser::ZafuTags, ZafuTestTags],
:zazen => [Zena::Parser::ZazenRules, Zena::Parser::ZazenTags],
}
@@test_parsers = {}
@@test_options = {}
@@file_list.each do |file, file_path, opts|
@@test_parsers[file] = Zena::Parser.parser_with_rules(MODULES[file.to_sym], Mock)
@@test_options[file] = opts
end
def yt_do_test(file, test)
res = @@test_parsers[file].new_with_url("/#{test.gsub('_', '/')}",
:helper => ParserTestHelper.new(@@test_strings[file])
).render(@@test_options[file])
if should_be = yt_get('res', file, test)
yt_assert should_be, res
end
end
def test_single
yt_do_test('zafu', 'only_hello')
end
def test_zazen_image_no_image
file = 'zazen'
test = 'image_no_image'
res = @@test_parsers[file].new_with_url("/#{test.gsub('_', '/')}",
:helper => ParserTestHelper.new(@@test_strings[file])
).render(:images=>false)
assert_equal @@test_strings[file][test]['res'], res
end
def test_all_descendants
block = @@test_parsers['zafu'].new(
"
",
:helper => ParserTestHelper.new(@@test_strings['basic'])
)
assert_equal ['add', 'add_link', 'each', 'pages', 'test', 'title'], block.all_descendants.keys.sort
assert_equal 2, block.all_descendants['title'].size
assert_equal ['add_link', 'title'], block.descendant('add').all_descendants.keys.sort
end
def test_descendants
block = @@test_parsers['zafu'].new(
"
",
:helper => ParserTestHelper.new(@@test_strings['basic'])
)
assert_equal 2, block.descendants('title').size
assert_equal ['test'], block.descendants('each')[0].descendants('test').map {|n| n.method}
assert_equal [], block.descendants('each')[0].descendants('foo')
end
def test_ancestor
block = @@test_parsers['zafu'].new(
"
",
:helper => ParserTestHelper.new(@@test_strings['basic'])
)
sub_block = block.descendant('add_link')
assert_equal ['void', 'pages', 'add'], sub_block.ancestors.map{|a| a.method}
assert_equal sub_block.ancestor('pages'), block.descendant('pages')
end
def test_public_descendants
block = @@test_parsers['zafu'].new(
"
",
:helper => ParserTestHelper.new(@@test_strings['basic'])
)
block.all_descendants.merge('self'=>[block]).each do |k,blocks|
blocks.each do |b|
b.send(:remove_instance_variable, :@all_descendants)
class << b
def public_descendants
if ['each'].include?(@method)
{}
else
super
end
end
end
end
end
assert_equal ['add', 'add_link', 'each', 'pages', 'title'], block.all_descendants.keys.sort
assert_equal ['test'], block.descendant('each').all_descendants.keys.sort
end
def test_root
block = @@test_parsers['zafu'].new(
"
",
:helper => ParserTestHelper.new(@@test_strings['basic'])
)
sub_block = block.descendant('add_link')
assert_equal 'add_link', sub_block.method
assert_equal 'add', sub_block.parent.method
assert_equal block, sub_block.root
end
yt_make
end