$:.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( " 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 [ :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