#!/usr/bin/ruby $:.unshift '../lib' require 'test/unit' require 'socket' require 'xmpp4r/rexmladdons' require 'xmpp4r/presence' require 'xmpp4r/errors' include Jabber class PresenceTest < Test::Unit::TestCase def test_create x = Presence.new() assert_equal("presence", x.name) assert_equal("jabber:client", x.namespace) assert_equal(nil, x.to) assert_equal(nil, x.show) assert_equal(nil, x.status) assert_equal(nil, x.priority) x = Presence.new(:away, "I am away", 23) assert_equal("presence", x.name) assert_equal(:away, x.show) assert_equal("away", x.show.to_s) assert_equal("I am away", x.status) assert_equal(23, x.priority) end def test_show x = Presence.new() assert_equal(nil, x.show) assert_raise(RuntimeError) { x.show = "a" } assert_equal(nil, x.show) assert_raise(RuntimeError) { x.show = 'away' } assert_equal(nil, x.show) x.show = :away assert_equal(:away, x.show) x.each_element('show') { |e| assert(e.class == REXML::Element, " is not REXML::Element") } x.show = nil assert_equal(nil, x.show) x.each_element('show') { |e| assert(true, " exists after 'show=nil'") } x.show = nil assert_equal(nil, x.show) showelement = REXML::Element.new('show') showelement.text = 'chat' x.add(showelement) assert_equal(:chat, x.show) end def test_status x = Presence.new() assert_equal(nil, x.status) x.status = "b" assert_equal("b", x.status) x.each_element('status') { |e| assert(e.class == REXML::Element, " is not REXML::Element") } x.status = nil assert_equal(nil, x.status) x.each_element('status') { |e| assert(true, " exists after 'status=nil'") } x.status = nil assert_equal(nil, x.status) end def test_priority x = Presence.new() assert_equal(nil, x.priority) x.priority = 5 assert_equal(5, x.priority) x.each_element('priority') { |e| assert(e.class == REXML::Element, " is not REXML::Element") } x.priority = "5" assert_equal(5, x.priority) x.priority = nil assert_equal(nil, x.priority) x.each_element('priority') { |e| assert(true, " exists after 'priority=nil'") } end def test_type x = Presence.new() assert_equal(nil, x.type) x.type = :delete assert_equal(nil, x.type) x.type = nil assert_equal(nil, x.type) x.type = nil assert_equal(nil, x.type) [:error, :probe, :subscribe, :subscribed, :unavailable, :unsubscribe, :unsubscribed, nil].each { |type| x.type = type assert_equal(type, x.type) } end def test_chaining x = Presence.new() x.set_show(:xa).set_status("Plundering the fridge.").set_priority(0) assert_equal(:xa, x.show) assert_equal("Plundering the fridge.", x.status) assert_equal(0, x.priority) end def test_error x = Presence.new() e = REXML::Element.new('error') x.add(e) x2 = Presence.new.import(x) # test if, after an import, the error element is successfully changed # into an ErrorResponse object. assert_equal(ErrorResponse, x2.first_element('error').class) end def test_sample x = Presence.new require 'rexml/document' d = REXML::Document.new("\n xa\n I am the evil fingerprinting robot\n ") x.import(d.root) num = 0 x.each_element('show') { num += 1 } assert_equal(1, num) assert_equal(:xa, x.show) assert_equal('I am the evil fingerprinting robot', x.status) end def test_xpathbug require 'rexml/document' d = REXML::Document.new("xa") x = d.root num = 0 x.each_element('tada') { num += 1 } assert_equal(1, num) end def test_compare_prio assert_equal(0, Presence.new(:chat, '', 5) <=> Presence.new(:chat, '', 5)) assert_equal(-1, Presence.new(:chat, '', 4) <=> Presence.new(:chat, '', 5)) assert_equal(1, Presence.new(:chat, '', 4) <=> Presence.new(:chat, '', 3)) assert_equal(-1, Presence.new(:chat, '', nil) <=> Presence.new(:chat, '', 3)) assert_equal(1, Presence.new(:chat, '', 10) <=> Presence.new(:chat, '', nil)) assert_equal(0, Presence.new(:chat, '', nil) <=> Presence.new(:chat, '', nil)) end def test_compare_interest unav = Presence.new.set_type(:unavailable) assert_equal(0, unav.cmp_interest(unav)) assert_equal(1, unav.cmp_interest(Presence.new)) assert_equal(-1, Presence.new.cmp_interest(unav)) assert_equal(1, Presence.new(:chat).cmp_interest(Presence.new)) assert_equal(-1, Presence.new(:away).cmp_interest(Presence.new(:dnd))) end end