sdp 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. data/ChangeLog.rdoc +13 -0
  2. data/LICENSE.rdoc +1 -1
  3. data/README.rdoc +31 -11
  4. data/Rakefile +3 -10
  5. data/lib/sdp/description.rb +132 -16
  6. data/lib/sdp/parser.rb +4 -4
  7. data/lib/sdp/version.rb +1 -1
  8. data/sdp.gemspec +15 -15
  9. data/spec/integration/builds_descriptions_spec.rb +39 -0
  10. data/spec/integration/coverage/assets/0.7.1/application.css +1110 -0
  11. data/spec/integration/coverage/assets/0.7.1/application.js +626 -0
  12. data/spec/integration/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
  13. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
  14. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
  15. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
  16. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
  17. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
  18. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
  19. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
  20. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
  21. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
  22. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
  23. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
  24. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
  25. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
  26. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
  27. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
  28. data/spec/integration/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
  29. data/spec/integration/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
  30. data/spec/integration/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
  31. data/spec/integration/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
  32. data/spec/integration/coverage/assets/0.7.1/favicon_green.png +0 -0
  33. data/spec/integration/coverage/assets/0.7.1/favicon_red.png +0 -0
  34. data/spec/integration/coverage/assets/0.7.1/favicon_yellow.png +0 -0
  35. data/spec/integration/coverage/assets/0.7.1/loading.gif +0 -0
  36. data/spec/integration/coverage/assets/0.7.1/magnify.png +0 -0
  37. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  38. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  39. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  40. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  41. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  42. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  43. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  44. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  45. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  46. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  47. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  48. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  49. data/spec/integration/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  50. data/spec/integration/coverage/index.html +72 -0
  51. data/spec/integration/parses_descriptions_spec.rb +129 -0
  52. data/spec/spec_helper.rb +2 -1
  53. data/spec/support/parser_matcher.rb +33 -0
  54. data/{features → spec}/support/sdp_file.txt +0 -0
  55. data/spec/support/test_descriptions.rb +137 -0
  56. data/spec/unit/sdp/coverage/assets/0.7.1/application.css +1110 -0
  57. data/spec/unit/sdp/coverage/assets/0.7.1/application.js +626 -0
  58. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
  59. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
  60. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
  61. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
  62. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
  63. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
  64. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
  65. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
  66. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
  67. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
  68. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
  69. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
  70. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
  71. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
  72. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
  73. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
  74. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
  75. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
  76. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
  77. data/spec/unit/sdp/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
  78. data/spec/unit/sdp/coverage/assets/0.7.1/favicon_green.png +0 -0
  79. data/spec/unit/sdp/coverage/assets/0.7.1/favicon_red.png +0 -0
  80. data/spec/unit/sdp/coverage/assets/0.7.1/favicon_yellow.png +0 -0
  81. data/spec/unit/sdp/coverage/assets/0.7.1/loading.gif +0 -0
  82. data/spec/unit/sdp/coverage/assets/0.7.1/magnify.png +0 -0
  83. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  84. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  85. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  86. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  87. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  88. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  89. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  90. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  91. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  92. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  93. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  94. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  95. data/spec/unit/sdp/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  96. data/spec/unit/sdp/coverage/index.html +72 -0
  97. data/spec/unit/sdp/description_spec.rb +321 -0
  98. data/spec/unit/sdp/parser_spec.rb +154 -0
  99. data/spec/{sdp_spec.rb → unit/sdp_spec.rb} +2 -2
  100. metadata +189 -43
  101. data/features/accepts_description_text.feature +0 -12
  102. data/features/sdp_create.feature +0 -15
  103. data/features/sdp_get.feature +0 -37
  104. data/features/step_definitions/accepts_description_text_steps.rb +0 -15
  105. data/features/step_definitions/sdp_create_steps.rb +0 -48
  106. data/features/step_definitions/sdp_get_steps.rb +0 -23
  107. data/features/support/env.rb +0 -3
  108. data/lib/sdp/session_template.erb +0 -46
  109. data/spec/sdp/description_spec.rb +0 -392
  110. data/spec/sdp/parser_spec.rb +0 -207
@@ -1,207 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
- require 'sdp/parser'
3
- require 'base64'
4
-
5
- describe SDP::Parser do
6
- before :each do
7
- @parser = SDP::Parser.new
8
- end
9
-
10
- it "handles descriptions missing time zone field" do
11
- lambda do
12
- @parser.parse SDP_MISSING_TIME
13
- end.should_not raise_error Parslet::ParseFailed
14
- end
15
-
16
- context "does NOT raise when missing required values" do
17
- it "version" do
18
- lambda do
19
- @parser.parse "o=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\nt=11111 22222\n"
20
- end.should_not raise_error Parslet::ParseFailed
21
- end
22
-
23
- it "origin" do
24
- lambda do
25
- @parser.parse "v=0\ns=This is a test session\nt=11111 22222\n"
26
- end.should_not raise_error Parslet::ParseFailed
27
- end
28
-
29
- it "name" do
30
- lambda do
31
- @parser.parse "v=0\no=steve 1234 5555 IN IP4 123.33.22.123\nt=11111 22222\n"
32
- end.should_not raise_error Parslet::ParseFailed
33
- end
34
-
35
- it "timing" do
36
- lambda do
37
- @parser.parse "v=0\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\n"
38
- end.should_not raise_error Parslet::ParseFailed
39
- end
40
- end
41
-
42
- context "parses" do
43
- it "required values" do
44
- sdp = "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\nt=11111 22222\nm=audio 49170 RTP/AVP 0\n"
45
- lambda { @parser.parse sdp }.should_not raise_error
46
- sdp_hash = @parser.parse sdp
47
- sdp_hash.should == {
48
- :session_section => {
49
- :protocol_version=>"1",
50
- :username=>"steve",
51
- :id=>"1234",
52
- :version=>"5555",
53
- :network_type=>"IN",
54
- :address_type=>"IP4",
55
- :unicast_address=>"123.33.22.123",
56
- :name=>"This is a test session",
57
- :start_time=>"11111",
58
- :stop_time=>"22222"
59
- },
60
- :media_sections=>[
61
- { :media=>"audio", :port=>"49170", :protocol=>"RTP/AVP", :format=>"0" }
62
- ]
63
- }
64
- end
65
-
66
- it "other combinations" do
67
- sdps = [
68
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=prompt\na=recvonly\na=bobo:the clown\nm=video 49170/2 RTP/AVP 31\na=hotness\na=attribute2:do stuff\nm=audio 12335 RTP/AVP 99\na=make:it now\n",
69
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=prompt\na=recvonly\na=bobo:the clown\n",
70
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=prompt\n",
71
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n\k=clear:password\n",
72
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h 2898848070 0\n",
73
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\nz=2882844526 -1h\n",
74
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\nr=7d 1h 0 25h\n",
75
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\nt=11111 22222\n",
76
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\nb=CT:1000\n",
77
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\nc=IN IP4 224.5.234.22/24\n",
78
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\np=+1 555 123 0987\n",
79
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\ne=bob@thing.com (Bob!)\n",
80
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\nu=http://bobo.net/thispdf.pdf\n",
81
- "v=1\no=steve 1234 5555 IN IP4 123.33.22.123\ns=This is a test session\ni=And here's some info\n"
82
- ]
83
-
84
- sdps.each do |sdp|
85
- lambda { @parser.parse sdp }.should_not raise_error
86
- end
87
- end
88
-
89
- it "alternate email address" do
90
- sdp = "e=Jane Doe <j.doe@example.com>\r\n"
91
- sdp_hash = @parser.parse sdp
92
- sdp_hash[:session_section][:email_address].should == "Jane Doe <j.doe@example.com>"
93
- end
94
-
95
- it "connection data that uses TTL value" do
96
- sdp = "c=IN IP4 224.2.36.42/127\r\n"
97
- sdp_hash = @parser.parse sdp
98
- sdp_hash[:session_section][:connection_address].should == "224.2.36.42/127"
99
- end
100
-
101
- it "connection data that uses IPv6 and address count" do
102
- sdp = "c=IN IP6 FF15::101/3\r\n"
103
- sdp_hash = @parser.parse sdp
104
- sdp_hash[:session_section][:connection_address].should == "FF15::101/3"
105
- end
106
-
107
- it "repeat times in seconds" do
108
- sdp = "r=604800 3600 0 90000\r\n"
109
- sdp_hash = @parser.parse sdp
110
- sdp_hash[:session_section][:repeat_interval].should == "604800"
111
- sdp_hash[:session_section][:active_duration].should == "3600"
112
- sdp_hash[:session_section][:offsets_from_start_time].should == "0 90000"
113
- end
114
-
115
- it "time zones" do
116
- sdp = "z=2882844526 -1h 2898848070 0\r\n"
117
- sdp_hash = @parser.parse sdp
118
- sdp_hash[:session_section][:time_zones].first[:adjustment_time].should == "2882844526"
119
- sdp_hash[:session_section][:time_zones].first[:offset].should == "-1h"
120
- sdp_hash[:session_section][:time_zones].last[:adjustment_time].should == "2898848070"
121
- sdp_hash[:session_section][:time_zones].last[:offset].should == "0"
122
- end
123
-
124
- context "encryption keys" do
125
- it "clear" do
126
- sdp = "k=clear:password\r\n"
127
- sdp_hash = @parser.parse sdp
128
- sdp_hash[:session_section][:encryption_method].should == "clear"
129
- sdp_hash[:session_section][:encryption_key].should == "password"
130
- end
131
-
132
- it "base64" do
133
- # #encode64 adds newlines every 60 chars; remove them--they're unnecessary
134
- password = Base64.encode64('password').gsub("\n", '')
135
- sdp = "k=base64:#{password}\r\n"
136
- sdp_hash = @parser.parse sdp
137
- sdp_hash[:session_section][:encryption_method].should == "base64"
138
- sdp_hash[:session_section][:encryption_key].should == password
139
- end
140
-
141
- it "uri" do
142
- uri = "http://aserver.com/thing.pdf"
143
- sdp = "k=uri:#{uri}\r\n"
144
- sdp_hash = @parser.parse sdp
145
- sdp_hash[:session_section][:encryption_method].should == "uri"
146
- sdp_hash[:session_section][:encryption_key].should == uri
147
- end
148
-
149
- it "prompt" do
150
- sdp = "k=prompt\r\n"
151
- sdp_hash = @parser.parse sdp
152
- sdp_hash[:session_section][:encryption_method].should == "prompt"
153
- sdp_hash[:session_section][:encryption_key].should be_nil
154
- end
155
- end
156
- end
157
-
158
- context "attributes" do
159
- it "attribute" do
160
- sdp = "a=x-qt-text-cmt:Orban Opticodec-PC\r\n"
161
- sdp_hash = @parser.parse sdp
162
- sdp_hash[:session_section][:attributes].first[:attribute].should ==
163
- "x-qt-text-cmt"
164
- sdp_hash[:session_section][:attributes].first[:value].should ==
165
- "Orban Opticodec-PC"
166
- end
167
- end
168
-
169
- context "media sections" do
170
- it "all possible fields in 1 section" do
171
- sdp = "m=audio 0 RTP/AVP 96\r\ni=Test info\r\nc=IN IP4 0.0.0.0\r\nb=AS:40\r\nk=prompt\r\na=rtpmap:96 MP4A-LATM/44100/2\r\na=fmtp:96 cpresent=0;config=400027200000\r\n"
172
- sdp_hash = @parser.parse sdp
173
- first_media_section = sdp_hash[:media_sections].first
174
- first_media_section[:media].should == "audio"
175
- first_media_section[:port].should == "0"
176
- first_media_section[:protocol].should == "RTP/AVP"
177
- first_media_section[:format].should == "96"
178
- first_media_section[:information].should == "Test info"
179
- first_media_section[:connection_network_type].should == "IN"
180
- first_media_section[:connection_address_type].should == "IP4"
181
- first_media_section[:connection_address].should == "0.0.0.0"
182
- first_media_section[:bandwidth_type].should == "AS"
183
- first_media_section[:bandwidth].should == "40"
184
- first_media_section[:encryption_method].should == "prompt"
185
- first_media_section[:attributes].first[:attribute].should == "rtpmap"
186
- first_media_section[:attributes].first[:value].should == "96 MP4A-LATM/44100/2"
187
- first_media_section[:attributes].last[:attribute].should == "fmtp"
188
- first_media_section[:attributes].last[:value].should == "96 cpresent=0;config=400027200000"
189
- end
190
- end
191
-
192
- context "parses EOLs" do
193
- it "parses \\r\\n" do
194
- sdp = "v=123\r\n"
195
- lambda { @parser.parse sdp }.should_not raise_error
196
- sdp_hash = @parser.parse sdp
197
- sdp_hash[:session_section][:protocol_version].should == "123"
198
- end
199
-
200
- it "parses \\n" do
201
- sdp = "v=456\n"
202
- lambda { @parser.parse sdp }.should_not raise_error
203
- sdp_hash = @parser.parse sdp
204
- sdp_hash[:session_section][:protocol_version].should == "456"
205
- end
206
- end
207
- end