libastag 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. data/BUGS +10 -0
  2. data/CHANGES +8 -1
  3. data/MIT-LICENSE +2 -1
  4. data/README +7 -3
  5. data/Rakefile +3 -2
  6. data/TODO +4 -7
  7. data/doc/classes/Helpers.html +16 -20
  8. data/doc/classes/Helpers/REXML.html +4 -4
  9. data/doc/classes/Helpers/REXML/Attributes.html +10 -10
  10. data/doc/classes/Libastag.html +5 -5
  11. data/doc/classes/Libastag/Rabbit.html +56 -56
  12. data/doc/classes/Libastag/RabitEar.html +4 -4
  13. data/doc/classes/Libastag/RabitLed.html +4 -4
  14. data/doc/classes/Request.html +33 -37
  15. data/doc/classes/Request/Action.html +34 -34
  16. data/doc/classes/Request/AudioStream.html +313 -0
  17. data/doc/classes/Request/Base.html +13 -10
  18. data/doc/classes/Request/Base/Event.html +58 -23
  19. data/doc/classes/Request/Base/EventCollection.html +35 -32
  20. data/doc/classes/Request/Choregraphy.html +500 -0
  21. data/doc/classes/Request/Choregraphy/BadChorDesc.html +135 -0
  22. data/doc/classes/Request/Choregraphy/Ears.html +130 -0
  23. data/doc/classes/Request/Choregraphy/Ears/Directions.html +141 -0
  24. data/doc/classes/Request/Choregraphy/Ears/Positions.html +146 -0
  25. data/doc/classes/Request/Choregraphy/Leds.html +130 -0
  26. data/doc/classes/Request/Choregraphy/Leds/Colors.html +171 -0
  27. data/doc/classes/Request/Choregraphy/Leds/Positions.html +161 -0
  28. data/doc/classes/Request/GET_EARS_POSITION.html +17 -14
  29. data/doc/classes/Request/IdMessage.html +234 -0
  30. data/doc/classes/Request/Query.html +80 -55
  31. data/doc/classes/Request/SetEarsPosition.html +58 -36
  32. data/doc/classes/Request/TtsMessage.html +74 -50
  33. data/doc/classes/Response.html +55 -124
  34. data/doc/classes/Response/AbuseSending.html +34 -34
  35. data/doc/classes/Response/Base.html +34 -34
  36. data/doc/classes/Response/Base/BadServerRsp.html +34 -34
  37. data/doc/classes/Response/Base/GoodServerRsp.html +34 -34
  38. data/doc/classes/Response/Base/ServerRsp.html +53 -53
  39. data/doc/classes/Response/Blacklist.html +34 -34
  40. data/doc/classes/Response/ChorNotSend.html +34 -34
  41. data/doc/classes/Response/ChorSend.html +34 -34
  42. data/doc/classes/Response/CommandSend.html +34 -34
  43. data/doc/classes/Response/EarPositionNotSend.html +34 -34
  44. data/doc/classes/Response/EarPositionSend.html +34 -34
  45. data/doc/classes/Response/EmptyServerRsp.html +34 -34
  46. data/doc/classes/Response/LangListUser.html +34 -34
  47. data/doc/classes/Response/LinkPreview.html +34 -34
  48. data/doc/classes/Response/ListFriend.html +34 -34
  49. data/doc/classes/Response/ListReceivedMsg.html +34 -34
  50. data/doc/classes/Response/MessageNotSend.html +34 -34
  51. data/doc/classes/Response/MessageSend.html +34 -34
  52. data/doc/classes/Response/NabCastNotSend.html +34 -34
  53. data/doc/classes/Response/NabCastSend.html +34 -34
  54. data/doc/classes/Response/NoCorrectParameters.html +34 -34
  55. data/doc/classes/Response/NoGoodTokenOrSerial.html +34 -34
  56. data/doc/classes/Response/NotV2Rabbit.html +34 -34
  57. data/doc/classes/Response/PositionEar.html +34 -34
  58. data/doc/classes/Response/ProtocolExcepion.html +35 -35
  59. data/doc/classes/Response/RabbitName.html +34 -34
  60. data/doc/classes/Response/RabbitSleep.html +34 -34
  61. data/doc/classes/Response/RabbitVersion.html +34 -34
  62. data/doc/classes/Response/Signature.html +34 -34
  63. data/doc/classes/Response/Timezone.html +34 -34
  64. data/doc/classes/Response/TtsNotSend.html +34 -34
  65. data/doc/classes/Response/TtsSend.html +34 -34
  66. data/doc/classes/Response/VoiceListTts.html +34 -34
  67. data/doc/classes/Response/WebRadioNotSend.html +34 -34
  68. data/doc/classes/Response/WebRadioSend.html +34 -34
  69. data/doc/created.rid +1 -1
  70. data/doc/dot/f_0.png +0 -0
  71. data/doc/dot/f_5.dot +13 -445
  72. data/doc/dot/f_5.png +0 -0
  73. data/doc/dot/f_6.dot +445 -11
  74. data/doc/dot/f_6.png +0 -0
  75. data/doc/dot/f_7.dot +30 -5
  76. data/doc/dot/f_7.png +0 -0
  77. data/doc/dot/f_8.dot +39 -0
  78. data/doc/dot/f_8.png +0 -0
  79. data/doc/files/{lib/violet/violetapi_rb.html → BUGS.html} +17 -9
  80. data/doc/files/CHANGES.html +15 -2
  81. data/doc/files/MIT-LICENSE.html +2 -2
  82. data/doc/files/README.html +13 -3
  83. data/doc/files/TODO.html +5 -8
  84. data/doc/files/lib/libastag_rb.html +12 -10
  85. data/doc/files/lib/violet/helpers_rb.html +5 -5
  86. data/doc/files/lib/violet/request_rb.html +16 -12
  87. data/doc/files/lib/violet/response_rb.html +36 -35
  88. data/doc/fr_class_index.html +10 -1
  89. data/doc/fr_file_index.html +1 -1
  90. data/doc/fr_method_index.html +25 -12
  91. data/examples/morse.rb +72 -0
  92. data/lib/libastag.rb +6 -2
  93. data/lib/violet/helpers.rb +4 -2
  94. data/lib/violet/request.rb +501 -47
  95. data/lib/violet/response.rb +5 -2
  96. data/test/fake_violet_srv.rb +1 -1
  97. data/test/test_helpers.rb +3 -5
  98. data/test/{test_send.rb → test_query_and_actions.rb} +27 -10
  99. data/test/test_request_base.rb +76 -0
  100. data/test/test_request_chor.rb +162 -0
  101. data/test/test_request_stuff.rb +171 -0
  102. data/test/test_response.rb +3 -4
  103. metadata +45 -20
  104. data/doc/classes/VioletAPI.html +0 -118
  105. data/doc/dot/f_4.dot +0 -57
  106. data/doc/dot/f_4.png +0 -0
  107. data/lib/violet/violetapi.rb +0 -14
  108. data/test/test_request.rb +0 -20
@@ -48,13 +48,16 @@ if you want to access to the REXML::Document object of a ServerRsp you can eithe
48
48
 
49
49
  =end
50
50
 
51
+ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) or $:.include?(File.expand_path(File.dirname(__FILE__)))
52
+
53
+ require 'helpers.rb'
54
+
51
55
  module Response
52
- require File.join(File.dirname(__FILE__), 'helpers.rb')
53
56
 
54
57
  # ProtocolExcepion are raised if server return a unknown response.
55
58
  #
56
59
  # see http://api.nabaztag.com/docs/home.html#messages
57
- class ProtocolExcepion < Exception; end
60
+ class ProtocolExcepion < StandardError; end
58
61
 
59
62
 
60
63
  # contains some basic stuff, abstract class etc. they're used internaly and you should not access this module.
@@ -70,7 +70,7 @@ module FakeVioletSrv
70
70
 
71
71
 
72
72
 
73
- def FakeVioletSrv.start(port=3000, logfile=false)
73
+ def FakeVioletSrv.start(port=3_000, logfile=false)
74
74
  if logfile
75
75
  log = File.open(logfile, 'w')
76
76
  $stderr = log
@@ -1,12 +1,10 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
-
4
- def from_this_file_path *args
5
- File.join( File.dirname(__FILE__), *args )
6
- end
3
+ MY_PATH = File.join( File.dirname(__FILE__), '..', 'lib', 'violet' )
4
+ $:.unshift(MY_PATH) unless $:.include?(MY_PATH)
7
5
 
8
6
 
9
- require from_this_file_path('..', 'lib', 'violet', 'helpers.rb')
7
+ require 'helpers.rb'
10
8
 
11
9
  require 'rexml/document'
12
10
  require 'test/unit'
@@ -1,14 +1,12 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
-
4
- def from_this_file_path *args
5
- File.join( File.dirname(__FILE__), *args )
6
- end
3
+ MY_PATH = File.join( File.dirname(__FILE__), '..', 'lib', 'violet' )
4
+ $:.unshift(MY_PATH) unless $:.include?(MY_PATH)
7
5
 
8
6
 
9
- require from_this_file_path('fake_violet_srv.rb')
10
- require from_this_file_path('..', 'lib', 'violet', 'request.rb')
11
- require from_this_file_path('..', 'lib', 'violet', 'response.rb')
7
+ require File.join( File.dirname(__FILE__), 'fake_violet_srv.rb' )
8
+ require 'request.rb'
9
+ require 'response.rb'
12
10
 
13
11
  require 'test/unit'
14
12
  require 'open-uri'
@@ -20,12 +18,12 @@ require 'open-uri'
20
18
  #
21
19
 
22
20
  t = Thread.new do
23
- FakeVioletSrv.start 3000, from_this_file_path('testsend_log.tmp')
21
+ FakeVioletSrv.start 3_000, File.join( File.dirname(__FILE__), 'testsend_log.tmp' )
24
22
  end
25
23
  sleep 1 # wait for server start.
26
24
 
27
25
 
28
- class ActionTest < Test::Unit::TestCase
26
+ class QueryAndActionTest < Test::Unit::TestCase
29
27
  require 'rexml/document'
30
28
 
31
29
  GOOD_SERIAL = '1234567890AB'
@@ -33,7 +31,7 @@ class ActionTest < Test::Unit::TestCase
33
31
  BAD_SERIAL = '1X34U67890AB'
34
32
  BAD_TOKEN = '123456789A'
35
33
 
36
- LOCAL_URI = 'http://localhost:3000/api.jsp?'
34
+ LOCAL_URI = 'http://localhost:3000/api.jsp'
37
35
 
38
36
  # Hacky ! yes !
39
37
  Request::API_URL = LOCAL_URI
@@ -46,6 +44,25 @@ class ActionTest < Test::Unit::TestCase
46
44
  end
47
45
 
48
46
 
47
+ def test_query_new
48
+ assert_nothing_raised { Request::Query.new :token => GOOD_TOKEN, :serial => GOOD_SERIAL, :event => Request::GET_SIGNATURE }
49
+ assert_raise(ArgumentError) { Request::Query.new :serial => GOOD_SERIAL, :event => Request::GET_SIGNATURE }
50
+ assert_raise(ArgumentError) { Request::Query.new :token => GOOD_TOKEN, :event => Request::GET_SIGNATURE }
51
+ assert_raise(ArgumentError) { Request::Query.new :token => GOOD_TOKEN, :serial => GOOD_SERIAL }
52
+ end
53
+
54
+
55
+ def test_query_to_url
56
+ [ Request::GET_RABBIT_NAME,
57
+ Request::GET_FRIENDS_LIST,
58
+ Request::GET_EARS_POSITION
59
+ ].each do |e|
60
+ q = Request::Query.new :event => e, :serial => GOOD_SERIAL, :token => GOOD_TOKEN
61
+ assert_equal "#{Request::API_URL}?sn=#{GOOD_SERIAL}&token=#{GOOD_TOKEN}&#{e.to_url}", q.to_url
62
+ end
63
+ end
64
+
65
+
49
66
  def test_xml_response
50
67
  rsp = Request::Query.new(:event => Request::GET_RABBIT_NAME, :serial => GOOD_SERIAL, :token => GOOD_TOKEN).send!(:xml)
51
68
  assert_nothing_raised { REXML::Document.new(rsp) }
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/ruby
2
+
3
+
4
+ MY_PATH = File.join( File.dirname(__FILE__), '..', 'lib', 'violet' )
5
+ $:.unshift(MY_PATH) unless $:.include?(MY_PATH)
6
+
7
+
8
+ require 'request.rb'
9
+ require 'response.rb'
10
+
11
+ require 'test/unit'
12
+
13
+
14
+
15
+
16
+ class RequestBaseTest < Test::Unit::TestCase
17
+ include Request
18
+
19
+ class EventTestFake < Base::Event
20
+ # nothin'
21
+ end
22
+
23
+ class EventTestSimple < Base::Event
24
+ def initialize str
25
+ @val = str
26
+ end
27
+ def to_url
28
+ @val.to_s
29
+ end
30
+ end
31
+
32
+ # make sure that Event is an abstract class and that all class that
33
+ # inherit of Event has to redefine initialize and to_url.
34
+ def test_class_Event
35
+ assert_raise(NotImplementedError) { Base::Event.new }
36
+ assert_raise(NotImplementedError) { EventTestFake.new }
37
+
38
+ EventTestFake.class_eval do
39
+ def initialize
40
+ end
41
+ end
42
+ assert_nothing_raised { EventTestFake.new }
43
+ assert_raise(NotImplementedError) { EventTestFake.new.to_url }
44
+ end
45
+
46
+
47
+ def test_EventCollection_new_and_add
48
+ assert_raise(ArgumentError) { Base::EventCollection.new(1,2) }
49
+
50
+ class << (s = String.new)
51
+ def to_url
52
+ self
53
+ end
54
+ end
55
+ assert_nothing_raised { Base::EventCollection.new(s,s) }
56
+ assert_nothing_raised { Base::EventCollection.new(EventTestSimple.new(1),EventTestSimple.new(2)) }
57
+
58
+ gou = EventTestSimple.new 'gou'
59
+ foo = EventTestSimple.new 'foo'
60
+ assert_equal Base::EventCollection.new(gou,foo).to_url, (gou+foo).to_url
61
+
62
+ end
63
+
64
+
65
+ def test_EventCollection_to_url
66
+ one = EventTestSimple.new 1
67
+ two = EventTestSimple.new 2
68
+ three = EventTestSimple.new 3
69
+ all = nil
70
+
71
+ assert_nothing_raised { all = one + two + three }
72
+
73
+ expected_uri = [ one.to_url, two.to_url, three.to_url ]
74
+ assert_equal expected_uri, all.to_url
75
+ end
76
+ end
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/ruby
2
+
3
+
4
+ MY_PATH = File.join( File.dirname(__FILE__), '..', 'lib', 'violet' )
5
+ $:.unshift(MY_PATH) unless $:.include?(MY_PATH)
6
+
7
+
8
+ require 'request.rb'
9
+ require 'response.rb'
10
+
11
+ require 'test/unit'
12
+
13
+
14
+
15
+
16
+ class ChorTrinity < Struct.new :code, :strcode, :result
17
+ end
18
+
19
+ class ChoregraphyTest < Test::Unit::TestCase
20
+ include Request
21
+
22
+ SIMPLES_CHORS = [
23
+ ChorTrinity.new(Proc.new { set top led red },
24
+ 'set top led red',
25
+ 'chor=10,0,led,4,255,0,0'),
26
+ ChorTrinity.new(Proc.new { move right ear forward of degrees 10 },
27
+ 'move right ear forward of degrees 10',
28
+ 'chor=10,0,motor,0,10,0,0')
29
+ ]
30
+
31
+ ALL_CHORS = SIMPLES_CHORS
32
+
33
+
34
+ def test_creating_simple_choregraphy
35
+ SIMPLES_CHORS.each do |chor|
36
+ assert_equal [chor.result], Choregraphy.new(&chor.code).to_url
37
+ assert_equal [chor.result, 'chortitle=foo'], Choregraphy.new({:name => :foo},&chor.code).to_url
38
+ end
39
+ # <bugfix:001>
40
+ c = Choregraphy.new { set left right off }
41
+ assert_equal 'chor=10,0,led,1,0,0,0,0,led,3,0,0,0', c.to_url.first
42
+ end
43
+
44
+
45
+ def test_protected_and_private_methods
46
+ c = Choregraphy.new
47
+ %w[chor __choreval__ at time right left both all top bottom middle led leds ear ears to rgb red green blue cyan magenta yellow white off forward backward of degrees].each do |sym|
48
+ assert_raise(NoMethodError) { eval "c.#{sym}" }
49
+ end
50
+ end
51
+
52
+
53
+ def test_creating_with_strings
54
+ ALL_CHORS.each do |chor|
55
+ assert_equal Choregraphy.new(&chor.code), Choregraphy.new(:code => chor.strcode)
56
+ end
57
+ end
58
+
59
+
60
+ def test_creating_with_multiple_args
61
+ chors = ALL_CHORS.collect { |c| c.strcode }
62
+ assert_equal Choregraphy.new(:code => chors), Choregraphy.new(:code => chors.join("\n"))
63
+ end
64
+
65
+
66
+ def test_at_time_syntax
67
+ ary = Array.new
68
+ ary << Choregraphy.new do
69
+ at time 0
70
+ set right led to green
71
+ at time 1
72
+ set left led to red
73
+ end
74
+ ary << Choregraphy.new do
75
+ at time 0 do set right led to green end
76
+ at time 1 do set left led to red end
77
+ end
78
+ ary << Choregraphy.new do
79
+ set right led to green at time 0
80
+ set left led to red at time 1
81
+ end
82
+
83
+ element = ary.pop
84
+ ary.each { |e| assert_equal element, e }
85
+ end
86
+
87
+
88
+ def test_move_syntax
89
+ ary = Array.new
90
+ ary << Choregraphy.new { move both ears forward degrees 130 }
91
+ ary << Choregraphy.new { move both forward degrees 130 }
92
+ ary << Choregraphy.new { move both forward of degrees 130 }
93
+ ary << Choregraphy.new { move both ears forward of degrees 130 }
94
+ ary << Choregraphy.new { move left ear forward of degrees 130
95
+ move right ear forward of degrees 130 }
96
+
97
+ element = ary.pop
98
+ ary.each { |e| assert_equal element, e }
99
+ end
100
+
101
+
102
+ def test_set_syntax
103
+ ary = Array.new
104
+ ary << Choregraphy.new { set left led green
105
+ set right led green }
106
+ ary << Choregraphy.new { set left right led to green }
107
+ ary << Choregraphy.new { set right left rgb(0,255,0) }
108
+ ary << Choregraphy.new { set right left to 0,255,0 }
109
+
110
+ element = ary.pop
111
+ ary.each { |e| assert_equal element, e }
112
+ end
113
+
114
+
115
+ def test_operators
116
+ one = Choregraphy.new { move left ear forward of degrees 42 }
117
+ two = Choregraphy.new { move right ear forward of degrees 42 }
118
+ onetwo = Choregraphy.new { move both ears forward of degrees 42 }
119
+
120
+ assert_equal one | two, one + two
121
+ assert_equal one & two, Choregraphy.new
122
+ assert_equal one - two, one
123
+ assert_equal two - one, two
124
+ assert_equal onetwo, one + two
125
+ assert_equal onetwo & two, two
126
+ assert_equal onetwo & one, one
127
+ assert_equal onetwo - two, one
128
+ assert_equal onetwo - one, two
129
+ assert_equal onetwo | two, onetwo
130
+ assert_equal onetwo | one, onetwo
131
+ end
132
+
133
+
134
+ def test_low_level_EarCommandStruct
135
+ expected = Choregraphy.new { at time 0 do move left ear forward of degrees 120 end }
136
+
137
+ e = Choregraphy::EarCommandStruct.new
138
+ e.element = Choregraphy::Ears::Positions::LEFT
139
+ e.direction = Choregraphy::Ears::Directions::FORWARD
140
+ e.angle = 120
141
+ e.time = 0 * 10
142
+
143
+ c = Choregraphy.new
144
+ c.move(e)
145
+ assert_equal expected, c
146
+ end
147
+
148
+
149
+ def test_low_level_LedCommandStruct
150
+ expected = Choregraphy.new { at time 2 do set right top red end }
151
+
152
+ l = Choregraphy::LedCommandStruct.new
153
+ l.elements = [ Choregraphy::Leds::Positions::RIGHT,
154
+ Choregraphy::Leds::Positions::TOP ]
155
+ l.color = Choregraphy::Leds::Colors::RED
156
+ l.time = 2 * 10
157
+
158
+ c = Choregraphy.new
159
+ c.set(l)
160
+ assert_equal expected, c
161
+ end
162
+ end
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/ruby
2
+
3
+
4
+ MY_PATH = File.join( File.dirname(__FILE__), '..', 'lib', 'violet' )
5
+ $:.unshift(MY_PATH) unless $:.include?(MY_PATH)
6
+
7
+
8
+ require 'request.rb'
9
+ require 'response.rb'
10
+
11
+ require 'test/unit'
12
+
13
+
14
+
15
+
16
+ class RequestStuffTest < Test::Unit::TestCase
17
+ include Request
18
+
19
+ def test_SetEarsPosition_new
20
+ assert_equal 0, SetEarsPosition::MIN_POS
21
+ assert_equal 16, SetEarsPosition::MAX_POS
22
+
23
+ min, max = SetEarsPosition::MIN_POS, SetEarsPosition::MAX_POS
24
+
25
+
26
+ [:posleft, :posright].each do |sym|
27
+ assert_raise(ArgumentError) { SetEarsPosition.new }
28
+ assert_raise(ArgumentError) { SetEarsPosition.new sym => (min-1) }
29
+ assert_raise(ArgumentError) { SetEarsPosition.new sym => (max+1) }
30
+ end
31
+
32
+ assert_nothing_raised do
33
+ SetEarsPosition.new :posleft => min
34
+ SetEarsPosition.new :posright => max
35
+ SetEarsPosition.new :posright => min, :posleft => max
36
+ end
37
+ end
38
+
39
+
40
+ def test_SetEarsPosition
41
+ e = SetEarsPosition.new :posleft => 12, :posright => 1.1
42
+ assert_equal ['posleft=12','posright=1'], e.to_url
43
+ end
44
+
45
+
46
+ def test_TtsMessage_new
47
+ assert_equal 1, TtsMessage::MIN_PITCH
48
+ assert_equal 32000, TtsMessage::MAX_PITCH
49
+ assert_equal 1, TtsMessage::MIN_PITCH
50
+ assert_equal 32000, TtsMessage::MAX_PITCH
51
+
52
+ assert_raise(ArgumentError) { TtsMessage.new }
53
+ assert_raise(ArgumentError) { TtsMessage.new :tts => '', :speed => (TtsMessage::MAX_SPEED) +1 }
54
+ assert_raise(ArgumentError) { TtsMessage.new :tts => '', :speed => (TtsMessage::MIN_SPEED) -1 }
55
+ assert_raise(ArgumentError) { TtsMessage.new :tts => '', :pitch => (TtsMessage::MAX_PITCH) +1 }
56
+ assert_raise(ArgumentError) { TtsMessage.new :tts => '', :pitch => (TtsMessage::MIN_PITCH) -1 }
57
+
58
+ assert_nothing_raised do
59
+ TtsMessage.new :tts => 'foo'
60
+ TtsMessage.new :tts => 'foo', :pitch => TtsMessage::MIN_PITCH
61
+ TtsMessage.new :tts => 'foo', :pitch => TtsMessage::MAX_PITCH
62
+ TtsMessage.new :tts => 'foo', :speed => TtsMessage::MIN_PITCH
63
+ TtsMessage.new :tts => 'foo', :speed => TtsMessage::MAX_PITCH
64
+ end
65
+ end
66
+
67
+
68
+ def test_TtsMessage
69
+ e = nil
70
+ tts = 'Hello world'
71
+ assert_nothing_raised { e = TtsMessage.new :tts => tts }
72
+ assert_equal ["tts=#{URI.escape(tts)}"], e.to_url
73
+
74
+ pitch = 12
75
+ speed = 11.1
76
+ assert_nothing_raised do
77
+ e = TtsMessage.new :tts => tts,
78
+ :speed => speed,
79
+ :pitch => pitch
80
+ end
81
+ assert_equal ["pitch=#{pitch}","speed=#{speed.to_i}","tts=#{URI.escape(tts)}"], e.to_url
82
+ end
83
+
84
+
85
+ def test_TtsMessage_with_nabcast
86
+ title = 'this is a test'
87
+ msg = 'wow ! a message !'
88
+ t = nil
89
+
90
+ assert_nothing_raised do
91
+ TtsMessage.new :tts => msg, :nabcast => 12
92
+ TtsMessage.new :tts => msg, :nabcast => 12, :nabcasttitle => title
93
+ t = TtsMessage.new :tts => msg, :nabcast => 12, :nabcasttitle => title, :pitch => 42, :speed => 120
94
+ end
95
+
96
+ expected = ['nabcast=12',"nabcasttitle=#{URI.escape(title)}",'pitch=42','speed=120',"tts=#{URI.escape(msg)}"]
97
+ assert_equal expected, t.to_url
98
+ end
99
+
100
+
101
+ def test_IdMessage_new
102
+ assert_equal 1, IdMessage::MIN_IDMESSAGE
103
+
104
+ assert_raise(ArgumentError) { IdMessage.new }
105
+ assert_raise(ArgumentError) { IdMessage.new :idmessage => (IdMessage::MIN_IDMESSAGE)-1 }
106
+ assert_nothing_raised { IdMessage.new :idmessage => IdMessage::MIN_IDMESSAGE }
107
+ end
108
+
109
+
110
+ def test_IdMessage_with_nabcast
111
+ id = 1337
112
+ nabcast = 118218
113
+ title = "it's gonna rain"
114
+
115
+ assert_equal ['idmessage=1337'], IdMessage.new(:idmessage => id).to_url
116
+
117
+ i = IdMessage.new :idmessage => id, :nabcast => nabcast, :nabcasttitle => title
118
+ assert_equal [ 'idmessage=1337', "nabcast=#{nabcast}", "nabcasttitle=#{URI.escape(title)}"].sort, i.to_url.sort
119
+ end
120
+
121
+
122
+ def test_AudioStream_new
123
+ assert_raise(ArgumentError) { AudioStream.new }
124
+ assert_raise(ArgumentError) { AudioStream.new('') }
125
+ assert_raise(ArgumentError) { AudioStream.new([]) }
126
+ assert_raise(ArgumentError) { AudioStream.new(Hash.new) }
127
+ assert_raise(ArgumentError) { AudioStream.new(:foo => "bar") }
128
+
129
+ assert_nothing_raised { AudioStream.new 'foo' }
130
+ assert_nothing_raised { AudioStream.new %w[foo] }
131
+ assert_nothing_raised { AudioStream.new :url_list => 'foo' }
132
+ assert_nothing_raised { AudioStream.new :url_list => %w[foo] }
133
+ end
134
+
135
+
136
+ def test_AudioStream_to_url
137
+ assert_equal 'urlList=one', AudioStream.new('one').to_url
138
+ assert_equal 'urlList=two', AudioStream.new('two').to_url
139
+ assert_equal 'urlList=two|one', AudioStream.new(%w[two one]).to_url
140
+ assert_equal 'urlList=one|two', AudioStream.new(%w[one two]).to_url
141
+ assert_equal 'urlList=one|two|three', AudioStream.new(%w[one two], 'three').to_url
142
+ assert_equal 'urlList=one|two|three', AudioStream.new(%w[one], 'two', ['three']).to_url
143
+ end
144
+
145
+
146
+ def test_AudioStream_equals
147
+ one = AudioStream.new('one')
148
+ assert_equal one, AudioStream.new('one')
149
+ assert_equal one, AudioStream.new(%w[one])
150
+ assert_equal one, AudioStream.new(:url_list => %w[one])
151
+ assert_equal one, AudioStream.new(:url_list => 'one')
152
+ assert_not_equal one, AudioStream.new('two')
153
+
154
+ onetwo = AudioStream.new('one', 'two')
155
+ assert_equal onetwo, AudioStream.new('one', 'two')
156
+ assert_equal onetwo, AudioStream.new(['one', 'two'])
157
+ assert_equal onetwo, AudioStream.new('one', %w[two])
158
+ assert_equal onetwo, AudioStream.new(:url_list => ['one', 'two'])
159
+ assert_not_equal onetwo, AudioStream.new('two' 'one')
160
+ end
161
+
162
+
163
+ def test_AudioStream_add
164
+ one = AudioStream.new('one')
165
+ two = AudioStream.new('two')
166
+
167
+ assert_equal one + two, AudioStream.new('one', 'two')
168
+ assert_equal two + one, AudioStream.new('two', 'one')
169
+ end
170
+ end
171
+