#!/usr/bin/ruby $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') require 'tempfile' require 'test/unit' require 'socket' require 'xmpp4r/streamparser' require 'xmpp4r/semaphore' 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 = '' def setup @listener = MockListener.new end def teardown @listener = nil end def parse_simple_helper(fixture) parser = StreamParser.new(STREAM + fixture, @listener) parser.parse yield parse_with_rexml(fixture) end def parse_with_rexml(fixture) REXML::Document.new(fixture).root end def test_simple_text parse_simple_helper( "text" ) 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( "]]>" ) 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( "text]]>" ) 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( "]]>text" ) 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( "]]>text]]>text" ) 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( "'&"" ) do |desired| assert_equal "'&\"", @listener.received.text assert_equal "'&"", @listener.received.to_s end end def test_entity_escaping2 parse_simple_helper( "&amp;amp;" ) do |desired| assert_equal "&amp;", @listener.received.text assert_equal "&amp;amp;", @listener.received.to_s end end =begin ## # FIXME: # http://www.germane-software.com/projects/rexml/ticket/165 def test_unbound_prefix fixture = "" parser = StreamParser.new(STREAM + fixture, @listener) assert_nothing_raised { parser.parse } end =end def test_stream_restart parser = StreamParser.new(STREAM + "", @listener) parser.parse assert_equal 'foobar', @listener.received.attributes['to'] end end