ruby_speech 2.1.0-java

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 (90) hide show
  1. data/.gitignore +12 -0
  2. data/.rspec +3 -0
  3. data/.travis.yml +17 -0
  4. data/CHANGELOG.md +144 -0
  5. data/Gemfile +3 -0
  6. data/Guardfile +9 -0
  7. data/LICENSE.md +20 -0
  8. data/README.md +314 -0
  9. data/Rakefile +34 -0
  10. data/assets/grammar-core.xsd +317 -0
  11. data/assets/grammar.xsd +37 -0
  12. data/assets/synthesis-core.xsd +445 -0
  13. data/assets/synthesis.xsd +63 -0
  14. data/assets/xml.xsd +287 -0
  15. data/ext/ruby_speech/RubySpeechGRXMLMatcher.java +64 -0
  16. data/ext/ruby_speech/RubySpeechService.java +23 -0
  17. data/ext/ruby_speech/extconf.rb +7 -0
  18. data/ext/ruby_speech/ruby_speech.c +97 -0
  19. data/lib/ruby_speech/generic_element.rb +169 -0
  20. data/lib/ruby_speech/grxml/element.rb +29 -0
  21. data/lib/ruby_speech/grxml/grammar.rb +189 -0
  22. data/lib/ruby_speech/grxml/item.rb +144 -0
  23. data/lib/ruby_speech/grxml/match.rb +16 -0
  24. data/lib/ruby_speech/grxml/matcher.rb +126 -0
  25. data/lib/ruby_speech/grxml/max_match.rb +6 -0
  26. data/lib/ruby_speech/grxml/no_match.rb +10 -0
  27. data/lib/ruby_speech/grxml/one_of.rb +31 -0
  28. data/lib/ruby_speech/grxml/potential_match.rb +10 -0
  29. data/lib/ruby_speech/grxml/rule.rb +73 -0
  30. data/lib/ruby_speech/grxml/ruleref.rb +69 -0
  31. data/lib/ruby_speech/grxml/tag.rb +29 -0
  32. data/lib/ruby_speech/grxml/token.rb +31 -0
  33. data/lib/ruby_speech/grxml.rb +39 -0
  34. data/lib/ruby_speech/nlsml/builder.rb +34 -0
  35. data/lib/ruby_speech/nlsml/document.rb +120 -0
  36. data/lib/ruby_speech/nlsml.rb +18 -0
  37. data/lib/ruby_speech/ruby_speech.jar +0 -0
  38. data/lib/ruby_speech/ssml/audio.rb +47 -0
  39. data/lib/ruby_speech/ssml/break.rb +62 -0
  40. data/lib/ruby_speech/ssml/desc.rb +24 -0
  41. data/lib/ruby_speech/ssml/element.rb +23 -0
  42. data/lib/ruby_speech/ssml/emphasis.rb +44 -0
  43. data/lib/ruby_speech/ssml/mark.rb +43 -0
  44. data/lib/ruby_speech/ssml/p.rb +25 -0
  45. data/lib/ruby_speech/ssml/phoneme.rb +72 -0
  46. data/lib/ruby_speech/ssml/prosody.rb +172 -0
  47. data/lib/ruby_speech/ssml/s.rb +25 -0
  48. data/lib/ruby_speech/ssml/say_as.rb +100 -0
  49. data/lib/ruby_speech/ssml/speak.rb +27 -0
  50. data/lib/ruby_speech/ssml/sub.rb +42 -0
  51. data/lib/ruby_speech/ssml/voice.rb +108 -0
  52. data/lib/ruby_speech/ssml.rb +39 -0
  53. data/lib/ruby_speech/version.rb +3 -0
  54. data/lib/ruby_speech/xml/language.rb +13 -0
  55. data/lib/ruby_speech/xml.rb +11 -0
  56. data/lib/ruby_speech.rb +36 -0
  57. data/ruby_speech.gemspec +42 -0
  58. data/spec/ruby_speech/grxml/grammar_spec.rb +341 -0
  59. data/spec/ruby_speech/grxml/item_spec.rb +192 -0
  60. data/spec/ruby_speech/grxml/match_spec.rb +15 -0
  61. data/spec/ruby_speech/grxml/matcher_spec.rb +688 -0
  62. data/spec/ruby_speech/grxml/max_match_spec.rb +17 -0
  63. data/spec/ruby_speech/grxml/no_match_spec.rb +17 -0
  64. data/spec/ruby_speech/grxml/one_of_spec.rb +49 -0
  65. data/spec/ruby_speech/grxml/potential_match_spec.rb +17 -0
  66. data/spec/ruby_speech/grxml/rule_spec.rb +125 -0
  67. data/spec/ruby_speech/grxml/ruleref_spec.rb +55 -0
  68. data/spec/ruby_speech/grxml/tag_spec.rb +41 -0
  69. data/spec/ruby_speech/grxml/token_spec.rb +62 -0
  70. data/spec/ruby_speech/grxml_spec.rb +339 -0
  71. data/spec/ruby_speech/nlsml_spec.rb +353 -0
  72. data/spec/ruby_speech/ssml/audio_spec.rb +121 -0
  73. data/spec/ruby_speech/ssml/break_spec.rb +100 -0
  74. data/spec/ruby_speech/ssml/desc_spec.rb +57 -0
  75. data/spec/ruby_speech/ssml/emphasis_spec.rb +110 -0
  76. data/spec/ruby_speech/ssml/mark_spec.rb +53 -0
  77. data/spec/ruby_speech/ssml/p_spec.rb +96 -0
  78. data/spec/ruby_speech/ssml/phoneme_spec.rb +65 -0
  79. data/spec/ruby_speech/ssml/prosody_spec.rb +309 -0
  80. data/spec/ruby_speech/ssml/s_spec.rb +92 -0
  81. data/spec/ruby_speech/ssml/say_as_spec.rb +71 -0
  82. data/spec/ruby_speech/ssml/speak_spec.rb +166 -0
  83. data/spec/ruby_speech/ssml/sub_spec.rb +57 -0
  84. data/spec/ruby_speech/ssml/voice_spec.rb +200 -0
  85. data/spec/ruby_speech/ssml_spec.rb +285 -0
  86. data/spec/ruby_speech_spec.rb +124 -0
  87. data/spec/spec_helper.rb +21 -0
  88. data/spec/support/match_examples.rb +43 -0
  89. data/spec/support/matchers.rb +46 -0
  90. metadata +405 -0
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+
3
+ module RubySpeech
4
+ module SSML
5
+ describe Audio do
6
+ its(:name) { should == 'audio' }
7
+
8
+ describe "setting options in initializers" do
9
+ subject { Audio.new :src => 'http://whatever.you-say-boss.com', :content => 'Hello' }
10
+
11
+ its(:src) { should == 'http://whatever.you-say-boss.com' }
12
+ its(:content) { should == 'Hello' }
13
+ end
14
+
15
+ it 'registers itself' do
16
+ Element.class_from_registration(:audio).should == Audio
17
+ end
18
+
19
+ describe "from a document" do
20
+ let(:document) { '<audio src="http://whatever.you-say-boss.com">Hello</audio>' }
21
+
22
+ subject { Element.import document }
23
+
24
+ it { should be_instance_of Audio }
25
+
26
+ its(:src) { should == 'http://whatever.you-say-boss.com' }
27
+ its(:content) { should == 'Hello' }
28
+ end
29
+
30
+ describe "#src" do
31
+ before { subject.src = 'http://whatever.you-say-boss.com' }
32
+
33
+ its(:src) { should == 'http://whatever.you-say-boss.com' }
34
+ end
35
+
36
+ describe "#content" do
37
+ context "with a valid value" do
38
+ before { subject.content = "Hello" }
39
+
40
+ its(:content) { should == "Hello" }
41
+ end
42
+ end
43
+
44
+ describe "<<" do
45
+ it "should accept String" do
46
+ lambda { subject << 'anything' }.should_not raise_error
47
+ end
48
+
49
+ it "should accept Audio" do
50
+ lambda { subject << Audio.new }.should_not raise_error
51
+ end
52
+
53
+ it "should accept Break" do
54
+ lambda { subject << Break.new }.should_not raise_error
55
+ end
56
+
57
+ it "should accept Desc" do
58
+ lambda { subject << Desc.new }.should_not raise_error
59
+ end
60
+
61
+ it "should accept Emphasis" do
62
+ lambda { subject << Emphasis.new }.should_not raise_error
63
+ end
64
+
65
+ it "should accept Mark" do
66
+ lambda { subject << Mark.new }.should_not raise_error
67
+ end
68
+
69
+ it "should accept P" do
70
+ lambda { subject << P.new }.should_not raise_error
71
+ end
72
+
73
+ it "should accept Phoneme" do
74
+ lambda { subject << Phoneme.new }.should_not raise_error
75
+ end
76
+
77
+ it "should accept Prosody" do
78
+ lambda { subject << Prosody.new }.should_not raise_error
79
+ end
80
+
81
+ it "should accept SayAs" do
82
+ lambda { subject << SayAs.new(:interpret_as => :foo) }.should_not raise_error
83
+ end
84
+
85
+ it "should accept Sub" do
86
+ lambda { subject << Sub.new }.should_not raise_error
87
+ end
88
+
89
+ it "should accept S" do
90
+ lambda { subject << S.new }.should_not raise_error
91
+ end
92
+
93
+ it "should accept Voice" do
94
+ lambda { subject << Voice.new }.should_not raise_error
95
+ end
96
+
97
+ it "should raise InvalidChildError with non-acceptable objects" do
98
+ lambda { subject << 1 }.should raise_error(InvalidChildError, "An Audio can only accept String, Audio, Break, Emphasis, Mark, P, Phoneme, Prosody, SayAs, Sub, S, Voice as children")
99
+ end
100
+ end
101
+
102
+ describe "comparing objects" do
103
+ it "should be equal if the content, and src are the same" do
104
+ Audio.new(:src => "one", :content => "Hello there").should == Audio.new(:src => "one", :content => "Hello there")
105
+ end
106
+
107
+ describe "when the content is different" do
108
+ it "should not be equal" do
109
+ Audio.new(:content => "Hello").should_not == Audio.new(:content => "Hello there")
110
+ end
111
+ end
112
+
113
+ describe "when the src is different" do
114
+ it "should not be equal" do
115
+ Audio.new(:src => 'one').should_not == Audio.new(:src => 'two')
116
+ end
117
+ end
118
+ end
119
+ end # Break
120
+ end # SSML
121
+ end # RubySpeech
@@ -0,0 +1,100 @@
1
+ require 'spec_helper'
2
+
3
+ module RubySpeech
4
+ module SSML
5
+ describe Break do
6
+ its(:name) { should == 'break' }
7
+
8
+ describe "setting options in initializers" do
9
+ subject { Break.new :strength => :strong, :time => 3.seconds }
10
+
11
+ its(:strength) { should == :strong }
12
+ its(:time) { should == 3.seconds }
13
+ end
14
+
15
+ it 'registers itself' do
16
+ Element.class_from_registration(:break).should == Break
17
+ end
18
+
19
+ describe "from a document" do
20
+ let(:document) { '<break strength="strong" time="3"/>' }
21
+
22
+ subject { Element.import document }
23
+
24
+ it { should be_instance_of Break }
25
+
26
+ its(:strength) { should == :strong }
27
+ its(:time) { should == 3.seconds }
28
+ end
29
+
30
+ describe "#strength" do
31
+ before { subject.strength = :strong }
32
+
33
+ its(:strength) { should == :strong }
34
+
35
+ it "with a valid level" do
36
+ lambda { subject.strength = :none }.should_not raise_error
37
+ lambda { subject.strength = :'x-weak' }.should_not raise_error
38
+ lambda { subject.strength = :weak }.should_not raise_error
39
+ lambda { subject.strength = :medium }.should_not raise_error
40
+ lambda { subject.strength = :strong }.should_not raise_error
41
+ lambda { subject.strength = :'x-strong' }.should_not raise_error
42
+ end
43
+
44
+ it "with an invalid strength" do
45
+ lambda { subject.strength = :something }.should raise_error(ArgumentError, "You must specify a valid strength (:none, :\"x-weak\", :weak, :medium, :strong, :\"x-strong\")")
46
+ end
47
+ end
48
+
49
+ describe "#time" do
50
+ context "with a valid value" do
51
+ before { subject.time = 3.seconds }
52
+
53
+ its(:time) { should == 3.seconds }
54
+ end
55
+
56
+ context "with a negative value" do
57
+ it do
58
+ lambda { subject.time = -3.seconds }.should raise_error(ArgumentError, "You must specify a valid time (positive float value in seconds)")
59
+ end
60
+ end
61
+
62
+ context "with an invalid value" do
63
+ it do
64
+ lambda { subject.time = 'blah' }.should raise_error(ArgumentError, "You must specify a valid time (positive float value in seconds)")
65
+ end
66
+ end
67
+ end
68
+
69
+ describe "<<" do
70
+ it "should always raise InvalidChildError" do
71
+ lambda { subject << 'anything' }.should raise_error(InvalidChildError, "A Break cannot contain children")
72
+ end
73
+ end
74
+
75
+ describe "comparing objects" do
76
+ it "should be equal if the content, strength and base uri are the same" do
77
+ Break.new(:strength => :strong, :time => 1.second, :content => "Hello there").should == Break.new(:strength => :strong, :time => 1.second, :content => "Hello there")
78
+ end
79
+
80
+ describe "when the content is different" do
81
+ it "should not be equal" do
82
+ Break.new(:content => "Hello").should_not == Break.new(:content => "Hello there")
83
+ end
84
+ end
85
+
86
+ describe "when the strength is different" do
87
+ it "should not be equal" do
88
+ Break.new(:strength => :strong).should_not == Break.new(:strength => :weak)
89
+ end
90
+ end
91
+
92
+ describe "when the time is different" do
93
+ it "should not be equal" do
94
+ Break.new(:time => 1.second).should_not == Break.new(:time => 2.seconds)
95
+ end
96
+ end
97
+ end
98
+ end # Break
99
+ end # SSML
100
+ end # RubySpeech
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ module RubySpeech
4
+ module SSML
5
+ describe Desc do
6
+ its(:name) { should == 'desc' }
7
+
8
+ describe "setting options in initializers" do
9
+ subject { Desc.new :language => 'foo' }
10
+
11
+ its(:language) { should == 'foo' }
12
+ end
13
+
14
+ it 'registers itself' do
15
+ Element.class_from_registration(:desc).should == Desc
16
+ end
17
+
18
+ describe "from a document" do
19
+ let(:document) { '<desc xml:lang="en"/>' }
20
+
21
+ subject { Element.import document }
22
+
23
+ it { should be_instance_of Desc }
24
+
25
+ its(:language) { should == 'en' }
26
+ end
27
+
28
+ describe "comparing objects" do
29
+ it "should be equal if the content and language are the same" do
30
+ Desc.new(:language => 'jp', :content => "Hello there").should == Desc.new(:language => 'jp', :content => "Hello there")
31
+ end
32
+
33
+ describe "when the content is different" do
34
+ it "should not be equal" do
35
+ Desc.new(:content => "Hello").should_not == Desc.new(:content => "Hello there")
36
+ end
37
+ end
38
+
39
+ describe "when the language is different" do
40
+ it "should not be equal" do
41
+ Desc.new(:language => 'jp').should_not == Desc.new(:language => 'en')
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "<<" do
47
+ it "should accept String" do
48
+ lambda { subject << 'anything' }.should_not raise_error
49
+ end
50
+
51
+ it "should raise InvalidChildError with non-acceptable objects" do
52
+ lambda { subject << Voice.new }.should raise_error(InvalidChildError, "A Desc can only accept Strings as children")
53
+ end
54
+ end
55
+ end # Desc
56
+ end # SSML
57
+ end # RubySpeech
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ module RubySpeech
4
+ module SSML
5
+ describe Emphasis do
6
+ its(:name) { should == 'emphasis' }
7
+
8
+ describe "setting options in initializers" do
9
+ subject { Emphasis.new :level => :strong }
10
+
11
+ its(:level) { should == :strong }
12
+ end
13
+
14
+ it 'registers itself' do
15
+ Element.class_from_registration(:emphasis).should == Emphasis
16
+ end
17
+
18
+ describe "from a document" do
19
+ let(:document) { '<emphasis level="strong"/>' }
20
+
21
+ subject { Element.import document }
22
+
23
+ it { should be_instance_of Emphasis }
24
+
25
+ its(:level) { should == :strong }
26
+ end
27
+
28
+ describe "#level" do
29
+ before { subject.level = :strong }
30
+
31
+ its(:level) { should == :strong }
32
+
33
+ it "with a valid level" do
34
+ lambda { subject.level = :strong }.should_not raise_error
35
+ lambda { subject.level = :moderate }.should_not raise_error
36
+ lambda { subject.level = :none }.should_not raise_error
37
+ lambda { subject.level = :reduced }.should_not raise_error
38
+ end
39
+
40
+ it "with an invalid level" do
41
+ lambda { subject.level = :something }.should raise_error(ArgumentError, "You must specify a valid level (:strong, :moderate, :none, :reduced)")
42
+ end
43
+ end
44
+
45
+ describe "comparing objects" do
46
+ it "should be equal if the content and level are the same" do
47
+ Emphasis.new(:level => :strong, :content => "Hello there").should == Emphasis.new(:level => :strong, :content => "Hello there")
48
+ end
49
+
50
+ describe "when the content is different" do
51
+ it "should not be equal" do
52
+ Emphasis.new(:content => "Hello").should_not == Emphasis.new(:content => "Hello there")
53
+ end
54
+ end
55
+
56
+ describe "when the level is different" do
57
+ it "should not be equal" do
58
+ Emphasis.new(:level => :strong).should_not == Emphasis.new(:level => :reduced)
59
+ end
60
+ end
61
+ end
62
+
63
+ describe "<<" do
64
+ it "should accept String" do
65
+ lambda { subject << 'anything' }.should_not raise_error
66
+ end
67
+
68
+ it "should accept Audio" do
69
+ lambda { subject << Audio.new }.should_not raise_error
70
+ end
71
+
72
+ it "should accept Break" do
73
+ lambda { subject << Break.new }.should_not raise_error
74
+ end
75
+
76
+ it "should accept Emphasis" do
77
+ lambda { subject << Emphasis.new }.should_not raise_error
78
+ end
79
+
80
+ it "should accept Mark" do
81
+ lambda { subject << Mark.new }.should_not raise_error
82
+ end
83
+
84
+ it "should accept Phoneme" do
85
+ lambda { subject << Phoneme.new }.should_not raise_error
86
+ end
87
+
88
+ it "should accept Prosody" do
89
+ lambda { subject << Prosody.new }.should_not raise_error
90
+ end
91
+
92
+ it "should accept SayAs" do
93
+ lambda { subject << SayAs.new(:interpret_as => :foo) }.should_not raise_error
94
+ end
95
+
96
+ it "should accept Sub" do
97
+ lambda { subject << Sub.new }.should_not raise_error
98
+ end
99
+
100
+ it "should accept Voice" do
101
+ lambda { subject << Voice.new }.should_not raise_error
102
+ end
103
+
104
+ it "should raise InvalidChildError with non-acceptable objects" do
105
+ lambda { subject << 1 }.should raise_error(InvalidChildError, "An Emphasis can only accept String, Audio, Break, Emphasis, Mark, Phoneme, Prosody, SayAs, Sub, Voice as children")
106
+ end
107
+ end
108
+ end # Emphasis
109
+ end # SSML
110
+ end # RubySpeech
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ module RubySpeech
4
+ module SSML
5
+ describe Mark do
6
+ its(:node_name) { should == 'mark' }
7
+
8
+ describe "setting options in initializers" do
9
+ subject { Mark.new :name => 'foo' }
10
+
11
+ its(:name) { should == 'foo' }
12
+ end
13
+
14
+ it 'registers itself' do
15
+ Element.class_from_registration(:mark).should == Mark
16
+ end
17
+
18
+ describe "from a document" do
19
+ let(:document) { '<mark name="foo"/>' }
20
+
21
+ subject { Element.import document }
22
+
23
+ it { should be_instance_of Mark }
24
+
25
+ its(:name) { should == 'foo' }
26
+ end
27
+
28
+ describe "#name" do
29
+ before { subject.name = 'foo' }
30
+
31
+ its(:name) { should == 'foo' }
32
+ end
33
+
34
+ describe "<<" do
35
+ it "should always raise InvalidChildError" do
36
+ lambda { subject << 'anything' }.should raise_error(InvalidChildError, "A Mark cannot contain children")
37
+ end
38
+ end
39
+
40
+ describe "comparing objects" do
41
+ it "should be equal if the name is the same" do
42
+ Mark.new(:name => "foo").should == Mark.new(:name => "foo")
43
+ end
44
+
45
+ describe "when the name is different" do
46
+ it "should not be equal" do
47
+ Mark.new(:name => "foo").should_not == Mark.new(:name => "bar")
48
+ end
49
+ end
50
+ end
51
+ end # Mark
52
+ end # SSML
53
+ end # RubySpeech
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ module RubySpeech
4
+ module SSML
5
+ describe P do
6
+ its(:name) { should == 'p' }
7
+
8
+ describe "setting options in initializers" do
9
+ subject { P.new :language => 'jp' }
10
+
11
+ its(:language) { should == 'jp' }
12
+ end
13
+
14
+ it 'registers itself' do
15
+ Element.class_from_registration(:p).should == P
16
+ end
17
+
18
+ describe "from a document" do
19
+ let(:document) { '<p>foo</p>' }
20
+
21
+ subject { Element.import document }
22
+
23
+ it { should be_instance_of P }
24
+ its(:content) { should == 'foo' }
25
+ end
26
+
27
+ describe "comparing objects" do
28
+ it "should be equal if the content and language are the same" do
29
+ P.new(:language => 'jp', :content => "Hello there").should == P.new(:language => 'jp', :content => "Hello there")
30
+ end
31
+
32
+ describe "when the content is different" do
33
+ it "should not be equal" do
34
+ P.new(:content => "Hello").should_not == P.new(:content => "Hello there")
35
+ end
36
+ end
37
+
38
+ describe "when the language is different" do
39
+ it "should not be equal" do
40
+ P.new(:language => 'jp').should_not == P.new(:language => 'en')
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "<<" do
46
+ it "should accept String" do
47
+ lambda { subject << 'anything' }.should_not raise_error
48
+ end
49
+
50
+ it "should accept Audio" do
51
+ lambda { subject << Audio.new }.should_not raise_error
52
+ end
53
+
54
+ it "should accept Break" do
55
+ lambda { subject << Break.new }.should_not raise_error
56
+ end
57
+
58
+ it "should accept Emphasis" do
59
+ lambda { subject << Emphasis.new }.should_not raise_error
60
+ end
61
+
62
+ it "should accept Mark" do
63
+ lambda { subject << Mark.new }.should_not raise_error
64
+ end
65
+
66
+ it "should accept Phoneme" do
67
+ lambda { subject << Phoneme.new }.should_not raise_error
68
+ end
69
+
70
+ it "should accept Prosody" do
71
+ lambda { subject << Prosody.new }.should_not raise_error
72
+ end
73
+
74
+ it "should accept SayAs" do
75
+ lambda { subject << SayAs.new(:interpret_as => :foo) }.should_not raise_error
76
+ end
77
+
78
+ it "should accept Sub" do
79
+ lambda { subject << Sub.new }.should_not raise_error
80
+ end
81
+
82
+ it "should accept S" do
83
+ lambda { subject << S.new }.should_not raise_error
84
+ end
85
+
86
+ it "should accept Voice" do
87
+ lambda { subject << Voice.new }.should_not raise_error
88
+ end
89
+
90
+ it "should raise InvalidChildError with non-acceptable objects" do
91
+ lambda { subject << 1 }.should raise_error(InvalidChildError, "A P can only accept String, Audio, Break, Emphasis, Mark, Phoneme, Prosody, SayAs, Sub, S, Voice as children")
92
+ end
93
+ end
94
+ end # P
95
+ end # SSML
96
+ end # RubySpeech
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ module RubySpeech
4
+ module SSML
5
+ describe Phoneme do
6
+ its(:name) { should == 'phoneme' }
7
+
8
+ describe "setting options in initializers" do
9
+ subject { Phoneme.new :alphabet => 'foo', :ph => 'bar' }
10
+
11
+ its(:alphabet) { should == 'foo' }
12
+ its(:ph) { should == 'bar' }
13
+ end
14
+
15
+ it 'registers itself' do
16
+ Element.class_from_registration(:phoneme).should == Phoneme
17
+ end
18
+
19
+ describe "from a document" do
20
+ let(:document) { '<phoneme alphabet="foo" ph="bar"/>' }
21
+
22
+ subject { Element.import document }
23
+
24
+ it { should be_instance_of Phoneme }
25
+
26
+ its(:alphabet) { should == 'foo' }
27
+ its(:ph) { should == 'bar' }
28
+ end
29
+
30
+ describe "comparing objects" do
31
+ it "should be equal if the content, ph and alphabet are the same" do
32
+ Phoneme.new(:alphabet => 'jp', :ph => 'foo', :content => "Hello there").should == Phoneme.new(:alphabet => 'jp', :ph => 'foo', :content => "Hello there")
33
+ end
34
+
35
+ describe "when the content is different" do
36
+ it "should not be equal" do
37
+ Phoneme.new(:content => "Hello").should_not == Phoneme.new(:content => "Hello there")
38
+ end
39
+ end
40
+
41
+ describe "when the ph is different" do
42
+ it "should not be equal" do
43
+ Phoneme.new(:ph => 'jp').should_not == Phoneme.new(:ph => 'en')
44
+ end
45
+ end
46
+
47
+ describe "when the alphabet is different" do
48
+ it "should not be equal" do
49
+ Phoneme.new(:alphabet => 'jp').should_not == Phoneme.new(:alphabet => 'en')
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "<<" do
55
+ it "should accept String" do
56
+ lambda { subject << 'anything' }.should_not raise_error
57
+ end
58
+
59
+ it "should raise InvalidChildError with non-acceptable objects" do
60
+ lambda { subject << Voice.new }.should raise_error(InvalidChildError, "A Phoneme can only accept Strings as children")
61
+ end
62
+ end
63
+ end # Desc
64
+ end # SSML
65
+ end # RubySpeech