1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
#!/usr/bin/ruby
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
require 'tempfile'
require 'test/unit'
require 'socket'
require 'xmpp4r'
include Jabber
class MockListener
attr_reader :received
def receive(element)
@received = element
end
def parse_failure(exception)
raise exception
end
end
class StreamParserTest < Test::Unit::TestCase
STREAM = '<stream:stream xmlns:stream="http://etherx.jabber.org/streams">'
def setup
@listener = MockListener.new
end
def teardown
@listener = nil
end
def parse_simple_helper(fixture)
parser = StreamParser.new(STREAM + fixture, @listener)
begin
parser.parse
rescue Jabber::ServerDisconnected => e
end
yield parse_with_rexml(fixture)
end
def parse_with_rexml(fixture)
REXML::Document.new(fixture).root
end
def test_simple_text
parse_simple_helper( "<a>text</a>" ) do |desired|
assert_equal desired.name, @listener.received.name
assert_equal desired.text, @listener.received.text
assert_equal desired.cdatas, @listener.received.cdatas
end
end
def test_simple_cdata
parse_simple_helper( "<a><![CDATA[<cdata>]]></a>" ) do |desired|
assert_equal desired.name, @listener.received.name
assert_equal desired.text, @listener.received.text
assert_equal desired.cdatas, @listener.received.cdatas
end
end
def test_composite_text_cdata
parse_simple_helper( "<a>text<![CDATA[<cdata>]]></a>" ) do |desired|
assert_equal desired.name, @listener.received.name
assert_equal desired.text, @listener.received.text
assert_equal desired.cdatas, @listener.received.cdatas
end
end
def test_composite_cdata_text
parse_simple_helper( "<a><![CDATA[<cdata>]]>text</a>" ) do |desired|
assert_equal desired.name, @listener.received.name
assert_equal desired.text, @listener.received.text
assert_equal desired.cdatas, @listener.received.cdatas
end
end
def test_complex_composite_cdata_text
parse_simple_helper( "<a><![CDATA[<cdata>]]>text<![CDATA[<cdata>]]>text</a>" ) do |desired|
assert_equal desired.name, @listener.received.name
assert_equal desired.text, @listener.received.text
assert_equal desired.cdatas, @listener.received.cdatas
end
end
def test_entity_escaping1
parse_simple_helper( "<a>'&"</a>" ) do |desired|
assert_equal "'&\"", @listener.received.text
assert_equal "<a>'&"</a>", @listener.received.to_s
end
end
def test_entity_escaping2
parse_simple_helper( "<a>&amp;amp;</a>" ) do |desired|
assert_equal "&amp;", @listener.received.text
assert_equal "<a>&amp;amp;</a>", @listener.received.to_s
end
end
def test_entity_escaping3
parse_simple_helper( "<a href='http://google.com?p=1&p=2'>text</a>" ) do |desired|
assert_equal "text", @listener.received.text
assert_equal "<a href='http://google.com?p=1&p=2'>text</a>", @listener.received.to_s
end
end
=begin
##
# FIXME:
# http://www.germane-software.com/projects/rexml/ticket/165
def test_unbound_prefix
fixture = "<message><soe:instantMessage/></message>"
parser = StreamParser.new(STREAM + fixture, @listener)
assert_nothing_raised { parser.parse }
end
=end
def test_stream_restart
parser = StreamParser.new(STREAM + "<stream:stream xmlns:stream='http://etherx.jabber.org/streams' to='foobar'>", @listener)
begin
parser.parse
rescue Jabber::ServerDisconnected => e
end
assert_equal 'foobar', @listener.received.attributes['to']
end
end
|