$:.unshift File.dirname(__FILE__) +"/../../lib"
require 'test/unit'
require 'syntax/lang/xml'
class TC_Syntax_XML < Test::Unit::TestCase
def setup
@xml = Syntax::XML.new
end
def test_empty
called = false
@xml.tokenize( "" ) { |tok| called = true }
assert !called
end
def test_no_tag
tok = []
@xml.tokenize( "foo bar baz" ) { |t| tok << t }
assert_equal [ :normal, "foo bar baz" ], [ tok.first.group, tok.shift ]
end
def test_entity_outside_tag
tok = []
@xml.tokenize( "&
&x157; &nosemi & foo;" ) { |t| tok << t }
assert_equal [ :entity, "&" ], [ tok.first.group, tok.shift ]
tok.shift
assert_equal [ :entity, "
" ], [ tok.first.group, tok.shift ]
tok.shift
assert_equal [ :entity, "&x157;" ], [ tok.first.group, tok.shift ]
assert_equal [ :normal, " &nosemi & foo;" ], [ tok.first.group, tok.shift ]
end
def test_start_tag
tok = []
@xml.tokenize( "" ) { |t| tok << t }
assert_equal [ :normal, "/>" ], [ tok.first.group, tok.shift ]
end
def test_start_namespaced_tag
tok = []
@xml.tokenize( " \\' here" ], [ tok.first.group, tok.shift ]
assert_equal [ :punct, "'" ], [ tok.first.group, tok.shift ]
end
def test_attribute_with_dquote_value
tok = []
@xml.tokenize( ' \" here' ], [ tok.first.group, tok.shift ]
assert_equal [ :punct, '"' ], [ tok.first.group, tok.shift ]
end
def test_entity_in_string
tok = []
@xml.tokenize( ' foo' ) { |t| tok << t }
assert_equal [ :punct, "<" ], [ tok.first.group, tok.shift ]
assert_equal [ :tag, "name" ], [ tok.first.group, tok.shift ]
assert_equal [ :punct, ">" ], [ tok.first.group, tok.shift ]
assert_equal [ :normal, " foo" ], [ tok.first.group, tok.shift ]
end
def test_close_self_tag
tok = []
@xml.tokenize( ' foo' ) { |t| tok << t }
assert_equal [ :punct, "<" ], [ tok.first.group, tok.shift ]
assert_equal [ :tag, "name" ], [ tok.first.group, tok.shift ]
assert_equal [ :normal, " " ], [ tok.first.group, tok.shift ]
assert_equal [ :punct, "/>" ], [ tok.first.group, tok.shift ]
assert_equal [ :normal, " foo" ], [ tok.first.group, tok.shift ]
end
def test_close_decl_tag
tok = []
@xml.tokenize( ' foo' ) { |t| tok << t }
assert_equal [ :punct, "" ], [ tok.first.group, tok.shift ]
assert_equal [ :tag, "name" ], [ tok.first.group, tok.shift ]
assert_equal [ :normal, " " ], [ tok.first.group, tok.shift ]
assert_equal [ :punct, "?>" ], [ tok.first.group, tok.shift ]
assert_equal [ :normal, " foo" ], [ tok.first.group, tok.shift ]
end
def test_comment
tok = []
@xml.tokenize( "foo bar" ) { |t| tok << t }
assert_equal [ :normal, "foo " ], [ tok.first.group, tok.shift ]
assert_equal [ :comment, "" ], [ tok.first.group, tok.shift ]
assert_equal [ :normal, " bar" ], [ tok.first.group, tok.shift ]
end
def test_comment_unterminated
tok = []
@xml.tokenize( "foo