blather 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. data/LICENSE +1 -1
  2. data/README.rdoc +41 -12
  3. data/examples/echo.rb +1 -1
  4. data/examples/execute.rb +0 -5
  5. data/examples/pubsub/cli.rb +64 -0
  6. data/examples/pubsub/ping_pong.rb +18 -0
  7. data/examples/rosterprint.rb +14 -0
  8. data/examples/xmpp4r/echo.rb +35 -0
  9. data/lib/blather.rb +35 -12
  10. data/lib/blather/client.rb +1 -1
  11. data/lib/blather/client/client.rb +19 -13
  12. data/lib/blather/client/dsl.rb +16 -0
  13. data/lib/blather/client/dsl/pubsub.rb +133 -0
  14. data/lib/blather/core_ext/active_support.rb +1 -117
  15. data/lib/blather/core_ext/active_support/inheritable_attributes.rb +117 -0
  16. data/lib/blather/core_ext/nokogiri.rb +35 -0
  17. data/lib/blather/errors.rb +3 -20
  18. data/lib/blather/errors/sasl_error.rb +3 -1
  19. data/lib/blather/errors/stanza_error.rb +10 -17
  20. data/lib/blather/errors/stream_error.rb +11 -14
  21. data/lib/blather/jid.rb +1 -0
  22. data/lib/blather/roster.rb +9 -0
  23. data/lib/blather/roster_item.rb +6 -1
  24. data/lib/blather/stanza.rb +35 -18
  25. data/lib/blather/stanza/disco.rb +7 -1
  26. data/lib/blather/stanza/disco/disco_info.rb +45 -33
  27. data/lib/blather/stanza/disco/disco_items.rb +32 -21
  28. data/lib/blather/stanza/iq.rb +13 -8
  29. data/lib/blather/stanza/iq/query.rb +16 -8
  30. data/lib/blather/stanza/iq/roster.rb +33 -22
  31. data/lib/blather/stanza/message.rb +20 -31
  32. data/lib/blather/stanza/presence.rb +3 -5
  33. data/lib/blather/stanza/presence/status.rb +13 -21
  34. data/lib/blather/stanza/presence/subscription.rb +11 -16
  35. data/lib/blather/stanza/pubsub.rb +63 -0
  36. data/lib/blather/stanza/pubsub/affiliations.rb +50 -0
  37. data/lib/blather/stanza/pubsub/create.rb +43 -0
  38. data/lib/blather/stanza/pubsub/errors.rb +9 -0
  39. data/lib/blather/stanza/pubsub/event.rb +77 -0
  40. data/lib/blather/stanza/pubsub/items.rb +63 -0
  41. data/lib/blather/stanza/pubsub/publish.rb +58 -0
  42. data/lib/blather/stanza/pubsub/retract.rb +53 -0
  43. data/lib/blather/stanza/pubsub/subscribe.rb +42 -0
  44. data/lib/blather/stanza/pubsub/subscription.rb +66 -0
  45. data/lib/blather/stanza/pubsub/subscriptions.rb +55 -0
  46. data/lib/blather/stanza/pubsub/unsubscribe.rb +42 -0
  47. data/lib/blather/stanza/pubsub_owner.rb +41 -0
  48. data/lib/blather/stanza/pubsub_owner/delete.rb +34 -0
  49. data/lib/blather/stanza/pubsub_owner/purge.rb +34 -0
  50. data/lib/blather/stream.rb +76 -168
  51. data/lib/blather/stream/client.rb +1 -2
  52. data/lib/blather/stream/component.rb +9 -5
  53. data/lib/blather/stream/features.rb +53 -0
  54. data/lib/blather/stream/features/resource.rb +63 -0
  55. data/lib/blather/stream/{sasl.rb → features/sasl.rb} +53 -52
  56. data/lib/blather/stream/features/session.rb +44 -0
  57. data/lib/blather/stream/features/tls.rb +28 -0
  58. data/lib/blather/stream/parser.rb +70 -46
  59. data/lib/blather/xmpp_node.rb +113 -52
  60. data/spec/blather/client/client_spec.rb +44 -58
  61. data/spec/blather/client/dsl/pubsub_spec.rb +465 -0
  62. data/spec/blather/client/dsl_spec.rb +19 -6
  63. data/spec/blather/core_ext/nokogiri_spec.rb +83 -0
  64. data/spec/blather/errors/sasl_error_spec.rb +8 -8
  65. data/spec/blather/errors/stanza_error_spec.rb +25 -33
  66. data/spec/blather/errors/stream_error_spec.rb +21 -16
  67. data/spec/blather/errors_spec.rb +4 -11
  68. data/spec/blather/jid_spec.rb +31 -30
  69. data/spec/blather/roster_item_spec.rb +34 -23
  70. data/spec/blather/roster_spec.rb +27 -12
  71. data/spec/blather/stanza/discos/disco_info_spec.rb +61 -42
  72. data/spec/blather/stanza/discos/disco_items_spec.rb +47 -35
  73. data/spec/blather/stanza/iq/query_spec.rb +34 -11
  74. data/spec/blather/stanza/iq/roster_spec.rb +47 -30
  75. data/spec/blather/stanza/iq_spec.rb +19 -14
  76. data/spec/blather/stanza/message_spec.rb +30 -17
  77. data/spec/blather/stanza/presence/status_spec.rb +43 -20
  78. data/spec/blather/stanza/presence/subscription_spec.rb +41 -21
  79. data/spec/blather/stanza/presence_spec.rb +34 -21
  80. data/spec/blather/stanza/pubsub/affiliations_spec.rb +57 -0
  81. data/spec/blather/stanza/pubsub/create_spec.rb +56 -0
  82. data/spec/blather/stanza/pubsub/event_spec.rb +84 -0
  83. data/spec/blather/stanza/pubsub/items_spec.rb +79 -0
  84. data/spec/blather/stanza/pubsub/publish_spec.rb +83 -0
  85. data/spec/blather/stanza/pubsub/retract_spec.rb +75 -0
  86. data/spec/blather/stanza/pubsub/subscribe_spec.rb +61 -0
  87. data/spec/blather/stanza/pubsub/subscription_spec.rb +97 -0
  88. data/spec/blather/stanza/pubsub/subscriptions_spec.rb +59 -0
  89. data/spec/blather/stanza/pubsub/unsubscribe_spec.rb +61 -0
  90. data/spec/blather/stanza/pubsub_owner/delete_spec.rb +50 -0
  91. data/spec/blather/stanza/pubsub_owner/purge_spec.rb +50 -0
  92. data/spec/blather/stanza/pubsub_owner_spec.rb +27 -0
  93. data/spec/blather/stanza/pubsub_spec.rb +62 -0
  94. data/spec/blather/stanza_spec.rb +53 -38
  95. data/spec/blather/stream/client_spec.rb +231 -88
  96. data/spec/blather/stream/component_spec.rb +14 -5
  97. data/spec/blather/stream/parser_spec.rb +145 -0
  98. data/spec/blather/xmpp_node_spec.rb +192 -96
  99. data/spec/fixtures/pubsub.rb +311 -0
  100. data/spec/spec_helper.rb +5 -4
  101. metadata +54 -18
  102. data/Rakefile +0 -139
  103. data/ext/extconf.rb +0 -65
  104. data/ext/push_parser.c +0 -209
  105. data/lib/blather/core_ext/libxml.rb +0 -28
  106. data/lib/blather/stream/resource.rb +0 -48
  107. data/lib/blather/stream/session.rb +0 -36
  108. data/lib/blather/stream/stream_handler.rb +0 -39
  109. data/lib/blather/stream/tls.rb +0 -33
  110. data/spec/blather/core_ext/libxml_spec.rb +0 -58
@@ -1,11 +1,11 @@
1
1
  require File.join(File.dirname(__FILE__), *%w[.. .. spec_helper])
2
2
  require 'blather/client/dsl'
3
3
 
4
- describe 'Blather::DSL' do
4
+ describe Blather::DSL do
5
5
  before do
6
6
  @client = mock()
7
- @dsl = class MockDSL; include Blather::DSL; end.new
8
- Client.stubs(:new).returns(@client)
7
+ @dsl = Class.new { include Blather::DSL }.new
8
+ Blather::Client.stubs(:new).returns(@client)
9
9
  end
10
10
 
11
11
  it 'wraps the setup' do
@@ -55,6 +55,12 @@ describe 'Blather::DSL' do
55
55
  @dsl.my_roster
56
56
  end
57
57
 
58
+ it 'provides a << style writer that provides chaining' do
59
+ stanza = Blather::Stanza::Iq.new
60
+ @client.expects(:write).with stanza
61
+ (@dsl << stanza).must_equal @dsl
62
+ end
63
+
58
64
  it 'provides a writer' do
59
65
  stanza = Blather::Stanza::Iq.new
60
66
  @client.expects(:write).with stanza
@@ -64,7 +70,7 @@ describe 'Blather::DSL' do
64
70
  it 'provides a "say" helper' do
65
71
  to, msg = 'me@me.com', 'hello!'
66
72
  Blather::Stanza::Message.stubs(:next_id).returns 0
67
- @client.expects(:write).with Blather::Stanza::Message.new(to, msg)
73
+ @client.expects(:write).with { |n| n.to_s.must_equal Blather::Stanza::Message.new(to, msg).to_s }
68
74
  @dsl.say to, msg
69
75
  end
70
76
 
@@ -80,7 +86,7 @@ describe 'Blather::DSL' do
80
86
  expected_stanza = Blather::Stanza::Disco::DiscoItems.new
81
87
  expected_stanza.to = who
82
88
  expected_stanza.node = where
83
- @client.expects(:write).with expected_stanza
89
+ @client.expects(:write).with { |n| n.to_s.must_equal expected_stanza.to_s }
84
90
  @dsl.discover what, who, where
85
91
  end
86
92
 
@@ -91,7 +97,7 @@ describe 'Blather::DSL' do
91
97
  expected_stanza = Blather::Stanza::Disco::DiscoInfo.new
92
98
  expected_stanza.to = who
93
99
  expected_stanza.node = where
94
- @client.expects(:write).with expected_stanza
100
+ @client.expects(:write).with { |n| n.to_s.must_equal expected_stanza.to_s }
95
101
  @dsl.discover what, who, where
96
102
  end
97
103
 
@@ -102,4 +108,11 @@ describe 'Blather::DSL' do
102
108
  @dsl.__send__(handler_method, *guards)
103
109
  end
104
110
  end
111
+
112
+ it 'has a pubsub helper set to the jid domain' do
113
+ jid = Blather::JID.new('jid@domain/resource')
114
+ @client.stubs(:jid).returns jid
115
+ @dsl.pubsub.must_be_instance_of Blather::DSL::PubSub
116
+ @dsl.pubsub.host.must_equal jid.domain
117
+ end
105
118
  end
@@ -0,0 +1,83 @@
1
+ require File.join(File.dirname(__FILE__), *%w[.. .. spec_helper])
2
+
3
+ describe 'Nokogiri::XML::Node' do
4
+ before { @doc = Nokogiri::XML::Document.new }
5
+
6
+ it 'aliases #name to #element_name' do
7
+ node = Nokogiri::XML::Node.new 'foo', @doc
8
+ node.must_respond_to :element_name
9
+ node.element_name.must_equal node.name
10
+ end
11
+
12
+ it 'aliases #name= to #element_name=' do
13
+ node = Nokogiri::XML::Node.new 'foo', @doc
14
+ node.must_respond_to :element_name=
15
+ node.element_name.must_equal node.name
16
+ node.element_name = 'bar'
17
+ node.element_name.must_equal 'bar'
18
+ end
19
+
20
+ it 'allows symbols as hash keys for attributes' do
21
+ attrs = Nokogiri::XML::Node.new('foo', @doc)
22
+ attrs['foo'] = 'bar'
23
+
24
+ attrs['foo'].must_equal 'bar'
25
+ attrs[:foo].must_equal 'bar'
26
+ end
27
+
28
+ it 'ensures a string is passed to the attribute setter' do
29
+ attrs = Nokogiri::XML::Node.new('foo', @doc)
30
+ attrs[:foo] = 1
31
+ attrs[:foo].must_equal '1'
32
+
33
+ attrs[:jid] = Blather::JID.new('n@d/r')
34
+ attrs[:jid].must_equal 'n@d/r'
35
+ end
36
+
37
+ it 'removes an attribute when set to nil' do
38
+ attrs = Nokogiri::XML::Node.new('foo', @doc)
39
+ attrs['foo'] = 'bar'
40
+
41
+ attrs['foo'].must_equal 'bar'
42
+ attrs['foo'] = nil
43
+ attrs['foo'].must_be_nil
44
+ end
45
+
46
+ it 'allows attribute values to change' do
47
+ attrs = Nokogiri::XML::Node.new('foo', @doc)
48
+ attrs['foo'] = 'bar'
49
+
50
+ attrs['foo'].must_equal 'bar'
51
+ attrs['foo'] = 'baz'
52
+ attrs['foo'].must_equal 'baz'
53
+ end
54
+
55
+ it 'allows symbols as the path in #xpath' do
56
+ node = Nokogiri::XML::Node.new('foo', @doc)
57
+ node.must_respond_to :find
58
+ @doc.root = node
59
+ @doc.xpath(:foo).first.wont_be_nil
60
+ @doc.xpath(:foo).first.must_equal @doc.xpath('/foo').first
61
+ end
62
+
63
+ it 'allows symbols as namespace names in #xpath' do
64
+ node = Nokogiri::XML::Node.new('foo', @doc)
65
+ node.namespace = node.add_namespace('bar', 'baz')
66
+ @doc.root = node
67
+ node.xpath('/bar:foo', :bar => 'baz').first.wont_be_nil
68
+ end
69
+
70
+ it 'aliases #xpath to #find' do
71
+ node = Nokogiri::XML::Node.new('foo', @doc)
72
+ node.must_respond_to :find
73
+ @doc.root = node
74
+ node.find('/foo').first.wont_be_nil
75
+ end
76
+
77
+ it 'has a helper function #find_first' do
78
+ node = Nokogiri::XML::Node.new('foo', @doc)
79
+ node.must_respond_to :find
80
+ @doc.root = node
81
+ node.find_first('/foo').must_equal node.find('/foo').first
82
+ end
83
+ end
@@ -1,18 +1,18 @@
1
1
  require File.join(File.dirname(__FILE__), *%w[.. .. spec_helper])
2
2
 
3
3
  def sasl_error_node(err_name = 'aborted')
4
- node = XMPPNode.new 'failure'
5
- node.namespace = 'urn:ietf:params:xml:ns:xmpp-sasl'
4
+ node = Blather::XMPPNode.new 'failure'
5
+ node.namespace = Blather::SASLError::SASL_ERR_NS
6
6
 
7
- node << XMPPNode.new(err_name)
7
+ node << Blather::XMPPNode.new(err_name, node.document)
8
8
  node
9
9
  end
10
10
 
11
- describe 'Blather::SASLError' do
11
+ describe Blather::SASLError do
12
12
  it 'can import a node' do
13
- SASLError.must_respond_to :import
14
- e = SASLError.import sasl_error_node
15
- e.must_be_kind_of SASLError
13
+ Blather::SASLError.must_respond_to :import
14
+ e = Blather::SASLError.import sasl_error_node
15
+ e.must_be_kind_of Blather::SASLError
16
16
  end
17
17
 
18
18
  describe 'each XMPP SASL error type' do
@@ -25,7 +25,7 @@ describe 'Blather::SASLError' do
25
25
  temporary-auth-failure
26
26
  ].each do |error_type|
27
27
  it "handles the name for #{error_type}" do
28
- e = SASLError.import sasl_error_node(error_type)
28
+ e = Blather::SASLError.import sasl_error_node(error_type)
29
29
  e.name.must_equal error_type.gsub('-','_').to_sym
30
30
  end
31
31
  end
@@ -1,47 +1,42 @@
1
1
  require File.join(File.dirname(__FILE__), *%w[.. .. spec_helper])
2
2
 
3
3
  def stanza_error_node(type = 'cancel', error = 'internal-server-error', msg = nil)
4
- node = Stanza::Message.new 'error@jabber.local', 'test message', :error
5
- XML::Document.new.root = node
4
+ node = Blather::Stanza::Message.new 'error@jabber.local', 'test message', :error
6
5
 
7
- error_node = XMPPNode.new('error')
6
+ node << (error_node = Blather::XMPPNode.new('error'))
8
7
  error_node['type'] = type.to_s
9
8
 
10
- err = XMPPNode.new(error)
9
+ error_node << (err = Blather::XMPPNode.new(error, error_node.document))
11
10
  err.namespace = 'urn:ietf:params:xml:ns:xmpp-stanzas'
12
- error_node << err
13
11
 
14
12
  if msg
15
- text = XMPPNode.new('text')
13
+ error_node << (text = Blather::XMPPNode.new('text', error_node.document))
16
14
  text.namespace = 'urn:ietf:params:xml:ns:xmpp-stanzas'
17
- text << msg
18
- error_node << text
15
+ text.content = msg
19
16
  end
20
17
 
21
- extra = XMPPNode.new('extra-error')
18
+ error_node << (extra = Blather::XMPPNode.new('extra-error', error_node.document))
22
19
  extra.namespace = 'blather:stanza:error'
23
- extra << 'Blather Error'
24
- error_node << extra
20
+ extra.content = 'Blather Error'
25
21
 
26
- node << error_node
27
22
  node
28
23
  end
29
24
 
30
- describe 'Blather::StanzaError' do
25
+ describe Blather::StanzaError do
31
26
  it 'can import a node' do
32
- StanzaError.must_respond_to :import
33
- e = StanzaError.import stanza_error_node
34
- e.must_be_kind_of StanzaError
27
+ Blather::StanzaError.must_respond_to :import
28
+ e = Blather::StanzaError.import stanza_error_node
29
+ e.must_be_kind_of Blather::StanzaError
35
30
  end
36
31
 
37
32
  describe 'valid types' do
38
- before { @original = Stanza::Message.new 'error@jabber.local', 'test message', :error }
33
+ before { @original = Blather::Stanza::Message.new 'error@jabber.local', 'test message', :error }
39
34
 
40
35
  it 'ensures type is one of Stanza::Message::VALID_TYPES' do
41
- lambda { StanzaError.new @original, :gone, :invalid_type_name }.must_raise(Blather::ArgumentError)
36
+ lambda { Blather::StanzaError.new @original, :gone, :invalid_type_name }.must_raise(Blather::ArgumentError)
42
37
 
43
- StanzaError::VALID_TYPES.each do |valid_type|
44
- msg = StanzaError.new @original, :gone, valid_type
38
+ Blather::StanzaError::VALID_TYPES.each do |valid_type|
39
+ msg = Blather::StanzaError.new @original, :gone, valid_type
45
40
  msg.type.must_equal valid_type
46
41
  end
47
42
  end
@@ -52,7 +47,7 @@ describe 'Blather::StanzaError' do
52
47
  @type = 'cancel'
53
48
  @err_name = 'internal-server-error'
54
49
  @msg = 'the server has experienced a misconfiguration'
55
- @err = StanzaError.import stanza_error_node(@type, @err_name, @msg)
50
+ @err = Blather::StanzaError.import stanza_error_node(@type, @err_name, @msg)
56
51
  end
57
52
 
58
53
  it 'provides a type attribute' do
@@ -72,7 +67,7 @@ describe 'Blather::StanzaError' do
72
67
 
73
68
  it 'provides a reader to the original node' do
74
69
  @err.must_respond_to :original
75
- @err.original.must_be_instance_of Stanza::Message
70
+ @err.original.must_be_instance_of Blather::Stanza::Message
76
71
  end
77
72
 
78
73
  it 'provides an extras attribute' do
@@ -91,14 +86,13 @@ describe 'Blather::StanzaError' do
91
86
 
92
87
  it 'can be turned into xml' do
93
88
  @err.must_respond_to :to_xml
94
- control = "<body>test message</body>\n<error>\n<internal-server-error xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/>\n<text xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\">the server has experienced a misconfiguration</text>\n<extra-error xmlns=\"blather:stanza:error\">Blather Error</extra-error>\n</error>\n</message>".split("\n")
95
- test = @err.to_xml.split("\n")
96
- test_msg = test.shift
97
- test.must_equal control
98
-
99
- test_msg.must_match(/<message[^>]*id="#{@err.original.id}"/)
100
- test_msg.must_match(/<message[^>]*from="error@jabber\.local"/)
101
- test_msg.must_match(/<message[^>]*type="error"/)
89
+ doc = parse_stanza @err.to_xml
90
+
91
+ doc.xpath("/message[@from='error@jabber.local' and @type='error']").wont_be_empty
92
+ doc.xpath("/message/error").wont_be_empty
93
+ doc.xpath("/message/error/err_ns:internal-server-error", :err_ns => Blather::StanzaError::STANZA_ERR_NS).wont_be_empty
94
+ doc.xpath("/message/error/err_ns:text[.='the server has experienced a misconfiguration']", :err_ns => Blather::StanzaError::STANZA_ERR_NS).wont_be_empty
95
+ doc.xpath("/message/error/extra_ns:extra-error[.='Blather Error']", :extra_ns => 'blather:stanza:error').wont_be_empty
102
96
  end
103
97
  end
104
98
 
@@ -127,11 +121,9 @@ describe 'Blather::StanzaError' do
127
121
  unexpected-request
128
122
  ].each do |error_type|
129
123
  it "handles the name for #{error_type}" do
130
- e = StanzaError.import stanza_error_node(:cancel, error_type)
124
+ e = Blather::StanzaError.import stanza_error_node(:cancel, error_type)
131
125
  e.name.must_equal error_type.gsub('-','_').to_sym
132
126
  end
133
127
  end
134
128
  end
135
129
  end
136
-
137
-
@@ -1,33 +1,35 @@
1
1
  require File.join(File.dirname(__FILE__), *%w[.. .. spec_helper])
2
2
 
3
3
  def stream_error_node(error = 'internal-server-error', msg = nil)
4
- node = XMPPNode.new('stream:error')
5
- XML::Document.new.root = node
4
+ node = Blather::XMPPNode.new('error')
5
+ node.namespace = {'stream' => Blather::Stream::STREAM_NS}
6
6
 
7
- err = XMPPNode.new(error)
7
+ node << (err = Blather::XMPPNode.new(error, node.document))
8
8
  err.namespace = 'urn:ietf:params:xml:ns:xmpp-streams'
9
- node << err
10
9
 
11
10
  if msg
12
- text = XMPPNode.new('text')
11
+ node << (text = Blather::XMPPNode.new('text', node.document))
13
12
  text.namespace = 'urn:ietf:params:xml:ns:xmpp-streams'
14
- text << msg
15
- node << text
13
+ text.content = msg
16
14
  end
17
15
 
18
- extra = XMPPNode.new('extra-error')
16
+ node << (extra = Blather::XMPPNode.new('extra-error', node.document))
19
17
  extra.namespace = 'blather:stream:error'
20
- extra << 'Blather Error'
18
+ extra.content = 'Blather Error'
21
19
 
22
- node << extra
23
20
  node
24
21
  end
25
22
 
26
23
  describe 'Blather::StreamError' do
27
24
  it 'can import a node' do
28
- StreamError.must_respond_to :import
29
- e = StreamError.import stream_error_node
30
- e.must_be_kind_of StreamError
25
+ err = stream_error_node 'internal-server-error', 'the message'
26
+ Blather::StreamError.must_respond_to :import
27
+ e = Blather::StreamError.import err
28
+ e.must_be_kind_of Blather::StreamError
29
+
30
+ e.name.must_equal :internal_server_error
31
+ e.text.must_equal 'the message'
32
+ e.extras.must_equal err.find('descendant::*[name()="extra-error"]', 'blather:stream:error').map {|n|n}
31
33
  end
32
34
  end
33
35
 
@@ -35,7 +37,7 @@ describe 'Blather::StreamError when instantiated' do
35
37
  before do
36
38
  @err_name = 'internal-server-error'
37
39
  @msg = 'the server has experienced a misconfiguration'
38
- @err = StreamError.import stream_error_node(@err_name, @msg)
40
+ @err = Blather::StreamError.import stream_error_node(@err_name, @msg)
39
41
  end
40
42
 
41
43
  it 'provides a err_name attribute' do
@@ -65,7 +67,10 @@ describe 'Blather::StreamError when instantiated' do
65
67
 
66
68
  it 'can be turned into xml' do
67
69
  @err.must_respond_to :to_xml
68
- @err.to_xml.must_equal "<stream:error>\n<internal-server-error xmlns=\"urn:ietf:params:xml:ns:xmpp-streams\"/>\n<text xmlns=\"urn:ietf:params:xml:ns:xmpp-streams\">the server has experienced a misconfiguration</text>\n<extra-error xmlns=\"blather:stream:error\">Blather Error</extra-error>\n</stream:error>"
70
+ doc = parse_stanza @err.to_xml
71
+ doc.xpath("//err_ns:internal-server-error", :err_ns => Blather::StreamError::STREAM_ERR_NS).wont_be_empty
72
+ doc.xpath("//err_ns:text[.='the server has experienced a misconfiguration']", :err_ns => Blather::StreamError::STREAM_ERR_NS).wont_be_empty
73
+ doc.xpath("//err_ns:extra-error[.='Blather Error']", :err_ns => 'blather:stream:error').wont_be_empty
69
74
  end
70
75
  end
71
76
 
@@ -96,7 +101,7 @@ describe 'Each XMPP stream error type' do
96
101
  xml-not-well-formed
97
102
  ].each do |error_type|
98
103
  it "handles the name for #{error_type}" do
99
- e = StreamError.import stream_error_node(error_type)
104
+ e = Blather::StreamError.import stream_error_node(error_type)
100
105
  e.name.must_equal error_type.gsub('-','_').to_sym
101
106
  end
102
107
  end
@@ -1,13 +1,13 @@
1
1
  require File.join(File.dirname(__FILE__), *%w[.. spec_helper])
2
2
 
3
- describe 'Blather::BlatherError' do
3
+ describe Blather::BlatherError do
4
4
  it 'is handled by :error' do
5
- BlatherError.new.handler_heirarchy.must_equal [:error]
5
+ Blather::BlatherError.new.handler_heirarchy.must_equal [:error]
6
6
  end
7
7
  end
8
8
 
9
9
  describe 'Blather::ParseError' do
10
- before { @error = ParseError.new('</generate-parse-error>"') }
10
+ before { @error = Blather::ParseError.new('</generate-parse-error>"') }
11
11
 
12
12
  it 'is registers with the handler heirarchy' do
13
13
  @error.handler_heirarchy.must_equal [:parse_error, :error]
@@ -19,14 +19,8 @@ describe 'Blather::ParseError' do
19
19
  end
20
20
  end
21
21
 
22
- describe 'Blather::TLSFailure' do
23
- it 'is registers with the handler heirarchy' do
24
- TLSFailure.new.handler_heirarchy.must_equal [:tls_failure, :error]
25
- end
26
- end
27
-
28
22
  describe 'Blather::UnknownResponse' do
29
- before { @error = UnknownResponse.new(XMPPNode.new('foo-bar')) }
23
+ before { @error = Blather::UnknownResponse.new(Blather::XMPPNode.new('foo-bar')) }
30
24
 
31
25
  it 'is registers with the handler heirarchy' do
32
26
  @error.handler_heirarchy.must_equal [:unknown_response_error, :error]
@@ -37,4 +31,3 @@ describe 'Blather::UnknownResponse' do
37
31
  @error.node.element_name.must_equal 'foo-bar'
38
32
  end
39
33
  end
40
-
@@ -1,83 +1,84 @@
1
1
  require File.join(File.dirname(__FILE__), *%w[.. spec_helper])
2
2
 
3
- describe 'Blather::JID' do
4
- it 'does nothing if creaded from JID' do
5
- jid = JID.new 'n@d/r'
6
- JID.new(jid).object_id.must_equal jid.object_id
3
+ describe Blather::JID do
4
+ it 'does nothing if creaded from Blather::JID' do
5
+ jid = Blather::JID.new 'n@d/r'
6
+ Blather::JID.new(jid).object_id.must_equal jid.object_id
7
7
  end
8
8
 
9
- it 'creates a new JID from (n,d,r)' do
10
- jid = JID.new('n', 'd', 'r')
9
+ it 'creates a new Blather::JID from (n,d,r)' do
10
+ jid = Blather::JID.new('n', 'd', 'r')
11
11
  jid.node.must_equal 'n'
12
12
  jid.domain.must_equal 'd'
13
13
  jid.resource.must_equal 'r'
14
14
  end
15
15
 
16
- it 'creates a new JID from (n,d)' do
17
- jid = JID.new('n', 'd')
16
+ it 'creates a new Blather::JID from (n,d)' do
17
+ jid = Blather::JID.new('n', 'd')
18
18
  jid.node.must_equal 'n'
19
19
  jid.domain.must_equal 'd'
20
20
  end
21
21
 
22
- it 'creates a new JID from (n@d)' do
23
- jid = JID.new('n@d')
22
+ it 'creates a new Blather::JID from (n@d)' do
23
+ jid = Blather::JID.new('n@d')
24
24
  jid.node.must_equal 'n'
25
25
  jid.domain.must_equal 'd'
26
26
  end
27
27
 
28
- it 'creates a new JID from (n@d/r)' do
29
- jid = JID.new('n@d/r')
28
+ it 'creates a new Blather::JID from (n@d/r)' do
29
+ jid = Blather::JID.new('n@d/r')
30
30
  jid.node.must_equal 'n'
31
31
  jid.domain.must_equal 'd'
32
32
  jid.resource.must_equal 'r'
33
33
  end
34
34
 
35
35
  it 'requires at least a node' do
36
- proc { JID.new }.must_raise ArgumentError
36
+ proc { Blather::JID.new }.must_raise ::ArgumentError
37
37
  end
38
38
 
39
39
  it 'ensures length of node is no more than 1023 characters' do
40
- proc { JID.new('n'*1024) }.must_raise Blather::ArgumentError
40
+ proc { Blather::JID.new('n'*1024) }.must_raise Blather::ArgumentError
41
41
  end
42
42
 
43
43
  it 'ensures length of domain is no more than 1023 characters' do
44
- proc { JID.new('n', 'd'*1024) }.must_raise Blather::ArgumentError
44
+ proc { Blather::JID.new('n', 'd'*1024) }.must_raise Blather::ArgumentError
45
45
  end
46
46
 
47
47
  it 'ensures length of resource is no more than 1023 characters' do
48
- proc { JID.new('n', 'd', 'r'*1024) }.must_raise Blather::ArgumentError
48
+ proc { Blather::JID.new('n', 'd', 'r'*1024) }.must_raise Blather::ArgumentError
49
49
  end
50
50
 
51
- it 'compares JIDs' do
52
- (JID.new('a@b/c') <=> JID.new('d@e/f')).must_equal -1
53
- (JID.new('a@b/c') <=> JID.new('a@b/c')).must_equal 0
54
- (JID.new('d@e/f') <=> JID.new('a@b/c')).must_equal 1
51
+ it 'compares Blather::JIDs' do
52
+ (Blather::JID.new('a@b/c') <=> Blather::JID.new('d@e/f')).must_equal -1
53
+ (Blather::JID.new('a@b/c') <=> Blather::JID.new('a@b/c')).must_equal 0
54
+ (Blather::JID.new('d@e/f') <=> Blather::JID.new('a@b/c')).must_equal 1
55
55
  end
56
56
 
57
57
  it 'checks for equality' do
58
- (JID.new('n@d/r') == JID.new('n@d/r')).must_equal true
58
+ (Blather::JID.new('n@d/r') == Blather::JID.new('n@d/r')).must_equal true
59
+ Blather::JID.new('n@d/r').eql?(Blather::JID.new('n@d/r')).must_equal true
59
60
  end
60
61
 
61
62
  it 'will strip' do
62
- jid = JID.new('n@d/r')
63
- jid.stripped.must_equal JID.new('n@d')
64
- jid.must_equal JID.new('n@d/r')
63
+ jid = Blather::JID.new('n@d/r')
64
+ jid.stripped.must_equal Blather::JID.new('n@d')
65
+ jid.must_equal Blather::JID.new('n@d/r')
65
66
  end
66
67
 
67
68
  it 'will strip itself' do
68
- jid = JID.new('n@d/r')
69
+ jid = Blather::JID.new('n@d/r')
69
70
  jid.strip!
70
- jid.must_equal JID.new('n@d')
71
+ jid.must_equal Blather::JID.new('n@d')
71
72
  end
72
73
 
73
74
  it 'has a string representation' do
74
- JID.new('n@d/r').to_s.must_equal 'n@d/r'
75
- JID.new('n', 'd', 'r').to_s.must_equal 'n@d/r'
76
- JID.new('n', 'd').to_s.must_equal 'n@d'
75
+ Blather::JID.new('n@d/r').to_s.must_equal 'n@d/r'
76
+ Blather::JID.new('n', 'd', 'r').to_s.must_equal 'n@d/r'
77
+ Blather::JID.new('n', 'd').to_s.must_equal 'n@d'
77
78
  end
78
79
 
79
80
  it 'provides a #stripped? helper' do
80
- jid = JID.new 'a@b/c'
81
+ jid = Blather::JID.new 'a@b/c'
81
82
  jid.must_respond_to :stripped?
82
83
  jid.stripped?.wont_equal true
83
84
  jid.strip!