#!/usr/bin/env ruby $:.unshift '../lib' require 'test/unit' require 'xmpp4r' require 'xmpp4r/rexmladdons' require 'xmpp4r/message' include Jabber class ServerErrorTest < Test::Unit::TestCase def test_create_with_empty_error e = ErrorResponse.new() ee = ServerError.new(e) assert_equal(nil, e.error) end def test_create_with_error_code e = ErrorResponse.new('payment-required') ee = ServerError.new(e) assert_equal("payment-required: ", ee.to_s) end def test_create_invalid assert_raise(Jabber::ArgumentError) { e = ErrorResponse.new('invalid error') ee = ServerError.new(e) } end def test_to_s_with_error_code_but_no_text e = ErrorResponse.new('payment-required') ee = ServerError.new(e) assert_equal("payment-required: ", ee.to_s) assert_equal('payment-required', e.error) assert_equal(402, ee.error.code) assert_equal(:auth, ee.error.type) assert_equal(nil, ee.error.text) end def test_to_s_with_error_code_and_text e = ErrorResponse.new('payment-required', 'cuz you are a deadbeat.') ee = ServerError.new(e) assert_equal("payment-required: cuz you are a deadbeat.", ee.to_s) assert_equal('payment-required', e.error) assert_equal(402, ee.error.code) assert_equal(:auth, ee.error.type) assert_equal("cuz you are a deadbeat.", ee.error.text) end end class ErrorTest < Test::Unit::TestCase def test_create e = ErrorResponse.new assert_equal(nil, e.error) assert_equal(nil, e.code) assert_equal(nil, e.type) assert_equal(nil, e.text) end def test_create2 e = ErrorResponse.new('payment-required') assert_equal('payment-required', e.error) assert_equal(402, e.code) assert_equal(:auth, e.type) assert_equal(nil, e.text) end def test_create3 e = ErrorResponse.new('gone', 'User moved to afterlife.gov') assert_equal('gone', e.error) assert_equal(302, e.code) assert_equal(:modify, e.type) assert_equal('User moved to afterlife.gov', e.text) end def test_create_invalid assert_raise(Jabber::ArgumentError) { e = ErrorResponse.new('invalid error') } end def test_type e = ErrorResponse.new assert_nil(e.type) e.type = :auth assert_equal(:auth, e.type) e.type = :cancel assert_equal(:cancel, e.type) e.type = :continue assert_equal(:continue, e.type) e.type = :modify assert_equal(:modify, e.type) e.type = :wait assert_equal(:wait, e.type) e.type = nil assert_nil(e.type) end def test_code e = ErrorResponse.new assert_nil(e.code) e.code = 404 assert_equal(404, e.code) assert_equal("<error code='404'/>", e.to_s) e.code = nil assert_nil(e.code) end def test_error e = ErrorResponse.new assert_nil(e.error) e.error = 'gone' assert_equal('gone', e.error) assert_raise(RuntimeError) { e.error = nil } end def test_stanzas m = Message.new assert_equal(nil, m.error) m.typed_add(ErrorResponse.new) assert_equal('<error/>', m.error.to_s) end def test_sample_normal src = '<error code="302" type="modify"><gone xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">...</text></error>' e = ErrorResponse.new.import(REXML::Document.new(src).root) assert_equal(:modify, e.type) assert_equal(302, e.code) assert_equal('gone', e.error) assert_equal('...', e.text) end def test_sample_muc src = '<error code="409">Please choose a different nickname.</error>' e = ErrorResponse.new.import(REXML::Document.new(src).root) assert_equal(nil, e.type) assert_equal(409, e.code) assert_equal(nil, e.error) assert_equal('Please choose a different nickname.', e.text) end end