snarl-snp 0.1.1 → 0.2.0

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.
@@ -0,0 +1,105 @@
1
+ require 'yaml' # some users don't use rubygems
2
+ class Snarl
3
+ class SNP
4
+ module SNPProcedure
5
+ def is_app_available? ; self['app'] && !self['app'].empty? ; end
6
+ def auto_register
7
+ if is_app_available? then
8
+ register(self['app'])
9
+ end
10
+ end
11
+
12
+ def is_class_available? ; self['class'] && !self['class'].empty? ; end
13
+ def auto_add_class
14
+ if is_app_available? && is_class_available? then
15
+ add_classes(*self['class'])
16
+ end
17
+ end
18
+
19
+ def is_notification_available? ; self['notification'] && !self['notification'].empty? ; end
20
+ def auto_notification
21
+ _notify_arg_is_array = is_notification_available? && self['notification'].kind_of?(Array)
22
+ _notify_arg_is_arraied_notify_hashes = is_notification_available? && self['notification'].first.kind_of?(Hash)
23
+
24
+ if is_notification_available? then
25
+ if _notify_arg_is_array then
26
+ if _notify_arg_is_arraied_notify_hashes then
27
+ # [{notify_hash1}, {notify_hash2}, ...]
28
+ self['notification'].map{|h| notification(h)}
29
+ else
30
+ # [title, text, timeout, icon, class]
31
+ notification(*self['notification'])
32
+ end
33
+ else
34
+ # {notify_hash}
35
+ notification(self['notification'])
36
+ end
37
+ else # config has no 'notification' key
38
+ # build notify arg from config
39
+ h = {}
40
+ h[:app] = self['app'] if self['app']
41
+ h[:title] = self['title'] if self['title']
42
+ h[:text] = self['text'] if self['text']
43
+ h[:timeout] = self['timeout'] if self['timeout']
44
+ h[:icon] = self['icon'] if self['icon']
45
+ h[:class] = self['class'][0][0] if is_class_available? # snp['class'] == [['clsnam', 'clstit']]
46
+ notification(h) if (h.has_key?(:text)||h.has_key?(:title))
47
+ end
48
+ end
49
+
50
+ private :is_app_available?, :is_class_available?, :is_notification_available?
51
+
52
+ def auto_unregister
53
+ if self['unregister'] && is_app_available? then
54
+ unregister(self['app'])
55
+ end
56
+ end
57
+
58
+ def autoexecute_with_config!
59
+ [auto_register,
60
+ auto_add_class,
61
+ auto_notification]
62
+ end
63
+
64
+ def apply_yaml(yamldata)
65
+ YAML.load(yamldata).each do |k ,v|
66
+ self[k] = v
67
+ end
68
+ end
69
+
70
+ def set_logger(arg_logger)
71
+ # TODO: support for another Logger
72
+ if arg_logger then
73
+ require 'logger' # FIXME: oh twice?
74
+ arg_logger = Logger.new(arg_logger) unless arg_logger.respond_to?(:warn)
75
+ self.logger = arg_logger
76
+ elsif self['logfile'] then
77
+ require 'logger' # FIXME: oh ...
78
+ logger = Logger.new(self['logfile'])
79
+ logger.level = self['loglevel'] if self['loglevel']
80
+ self.logger = logger
81
+ else
82
+ # do nothing
83
+ end
84
+ end
85
+
86
+ def load(yamldata, logger = nil, &block)
87
+ apply_yaml(yamldata)
88
+ # apply/overwrite user Logger object
89
+ # yaml cannot make 'raw' Logger object
90
+ set_logger(logger)
91
+ begin
92
+ autoexecute_with_config!
93
+ block.call(self) if block_given?
94
+ ensure
95
+ auto_unregister
96
+ end
97
+ self
98
+ end
99
+ end
100
+
101
+ def self.load(*args, &block)
102
+ self.new.load(*args, &block)
103
+ end
104
+ end
105
+ end
@@ -5,42 +5,49 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{snarl-snp}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["kitamomonga"]
12
- s.date = %q{2010-04-23}
13
- s.description = %q{Snarl Network Protocol Client. Snarl is the notification program for Windows. You can send notification messages to Snarl with SNP over LAN.}
12
+ s.date = %q{2010-05-20}
13
+ s.default_executable = %q{snarl_snp}
14
+ s.description = %q{Snarl Network Protocol Client. Snarl is the notification program for Windows. You can send notification messages to Snarl with SNP on LAN.}
14
15
  s.email = %q{ezookojo@gmail.com}
16
+ s.executables = ["snarl_snp"]
15
17
  s.extra_rdoc_files = [
16
- "README.rdoc",
17
- "README.rdoc.ja"
18
+ "README.rdoc"
18
19
  ]
19
20
  s.files = [
20
- "GUIDE.rdoc.ja",
21
- "MIT-LICENSE",
21
+ "MIT-LICENSE",
22
22
  "README.rdoc",
23
- "README.rdoc.ja",
24
23
  "Rakefile",
25
24
  "VERSION",
25
+ "YAML.rdoc",
26
+ "bin/snarl_snp",
27
+ "doc-ja/GUIDE.rdoc.ja",
28
+ "doc-ja/README.rdoc.ja",
29
+ "doc-ja/YAML.rdoc.ja",
26
30
  "exsample/ping.rb",
27
31
  "exsample/winamp_nowplaying.rb",
28
32
  "exsample/yahoo_weather.rb",
29
33
  "lib/snarl/autotest.rb",
30
34
  "lib/snarl/snp.rb",
31
35
  "lib/snarl/snp/action.rb",
36
+ "lib/snarl/snp/autosnp.rb",
32
37
  "lib/snarl/snp/config.rb",
33
38
  "lib/snarl/snp/error.rb",
34
39
  "lib/snarl/snp/request.rb",
35
40
  "lib/snarl/snp/response.rb",
36
41
  "lib/snarl/snp/snp.rb",
42
+ "lib/snarl/snp/snp_procedure.rb",
37
43
  "snarl-snp.gemspec",
38
- "spec/exsample/data/weather_yahoo_co_jp.html",
39
- "spec/exsample/yahoo_weather_spec.rb",
44
+ "spec/bin/snarl_snp_spec.rb",
40
45
  "spec/snp/action_spec.rb",
41
46
  "spec/snp/config_spec.rb",
47
+ "spec/snp/real_connection_spec.rb",
42
48
  "spec/snp/request_spec.rb",
43
49
  "spec/snp/response_sprc.rb",
50
+ "spec/snp/snp_procedure_spec.rb",
44
51
  "spec/snp/snp_spec.rb",
45
52
  "spec/spec_helper.rb"
46
53
  ]
@@ -48,12 +55,14 @@ Gem::Specification.new do |s|
48
55
  s.rdoc_options = ["--charset=UTF-8"]
49
56
  s.require_paths = ["lib"]
50
57
  s.rubygems_version = %q{1.3.6}
51
- s.summary = %q{Snarl Network Protocol Client. You can notify to Snarl over LAN.}
58
+ s.summary = %q{Snarl Network Protocol Client. You can notify to Snarl on LAN.}
52
59
  s.test_files = [
53
- "spec/exsample/yahoo_weather_spec.rb",
60
+ "spec/bin/snarl_snp_spec.rb",
54
61
  "spec/spec_helper.rb",
55
62
  "spec/snp/config_spec.rb",
56
63
  "spec/snp/response_sprc.rb",
64
+ "spec/snp/snp_procedure_spec.rb",
65
+ "spec/snp/real_connection_spec.rb",
57
66
  "spec/snp/request_spec.rb",
58
67
  "spec/snp/snp_spec.rb",
59
68
  "spec/snp/action_spec.rb"
@@ -65,14 +74,11 @@ Gem::Specification.new do |s|
65
74
 
66
75
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
67
76
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
68
- s.add_development_dependency(%q<webmock>, [">= 0"])
69
77
  else
70
78
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
71
- s.add_dependency(%q<webmock>, [">= 0"])
72
79
  end
73
80
  else
74
81
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
75
- s.add_dependency(%q<webmock>, [">= 0"])
76
82
  end
77
83
  end
78
84
 
@@ -0,0 +1,91 @@
1
+ # -*- coding:utf-8 -*-
2
+ require 'tempfile'
3
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
4
+
5
+ if defined?(TEST_SNARL_SNP_BIN_SPEC) then
6
+ class SNPBin
7
+ remove_const :"BINCMD_OPTION"
8
+ end
9
+ else
10
+ TEST_SNARL_SNP_BIN_SPEC=true
11
+ end
12
+ load File.expand_path(File.dirname(__FILE__) + '/../../bin/snarl_snp')
13
+
14
+ describe "SNPBin" do
15
+
16
+ before :all do
17
+ @argv_bak = ARGV.dup
18
+ end
19
+ after :all do
20
+ ARGV.replace(@argv_bak)
21
+ end
22
+
23
+ describe "initialize" do
24
+ before do
25
+ @snpbin = SNPBin.new
26
+ end
27
+ it "initialize data" do
28
+ @snpbin.argv_option.should eql({})
29
+ @snpbin.config.should eql({})
30
+ end
31
+ end
32
+
33
+ describe "parse_argv" do
34
+ SNPBin::BINCMD_OPTION.each do |optname, opthash|
35
+ before do
36
+ ARGV.clear
37
+ @snpbin = SNPBin.new
38
+ end
39
+ # opthash[:opt] == ['-a app', '--app=app']
40
+ arg = opthash[:opt][0].split(/\s+|=/) # ['-a', 'app']
41
+ value = if arg[1] then "'#{arg[1]}'" else true end # ''app''
42
+ instance_eval(<<EOS)
43
+ it "when ARGV[1] = '#{opthash[:opt][0]}', set {'#{optname}' => #{value}} to @argv_option" do
44
+ ARGV.replace([__FILE__] + arg)
45
+ @snpbin.parse_argv
46
+ @snpbin.argv_option.should eql({'#{optname}' => #{value}})
47
+ end
48
+ EOS
49
+ end
50
+ end
51
+
52
+ describe "merge_yaml_from_argvopt" do
53
+ before do
54
+ @yamlfile = Tempfile.new('snarlsnpbinsnarlsnpspecrb')
55
+ File.open(@yamlfile.path, 'w'){|f| f.write("data : yaml!")}
56
+ @snpbin = SNPBin.new
57
+ @snpbin.argv_option.update({'yaml' => @yamlfile.path})
58
+ end
59
+ after do
60
+ @yamlfile.close
61
+ end
62
+
63
+ it "do nothing when @argv_option has no 'yaml' key" do
64
+ @snpbin.argv_option.delete('yaml')
65
+ lambda{@snpbin.merge_yaml_from_argvopt}.should_not change(@snpbin, :config)
66
+ end
67
+
68
+ it "picks and deletes {'yaml' => yamlpath} from @argv_option and update @config by yamlpath-yaml" do
69
+ # FIXME: rewrite with change matcher
70
+ @snpbin.config.should be_empty
71
+ @snpbin.merge_yaml_from_argvopt
72
+ @snpbin.config.should eql({'data' => 'yaml!'})
73
+ @snpbin.argv_option.should_not have_key('yaml')
74
+ end
75
+ end
76
+
77
+ describe "#merge_all_argvopt_to_config" do
78
+ before do
79
+ @snpbin = SNPBin.new
80
+ @data = {'key' => 'value'}
81
+ end
82
+ it "copys @argv_option to @config" do
83
+ @snpbin.instance_variable_set(:@argv_option, @data)
84
+ @snpbin.merge_all_argvopt_to_config
85
+ @snpbin.config.should eql(@data)
86
+ end
87
+ end
88
+
89
+ # tests for SNPBin#exec_snplib and #run are in ../snp/real_connection_spec.rb
90
+
91
+ end
@@ -1,4 +1,3 @@
1
- # -*- coding:utf-8 -*-
2
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
2
 
4
3
  describe "SNP" do
@@ -8,120 +7,114 @@ describe "SNP" do
8
7
  @port = 9887
9
8
  @app = Snarl::SNP::DEFAULT_TITLE
10
9
  @class = '1'
11
- Snarl::SNP::Config.reset
10
+ end
11
+
12
+ def snp_open(&block)
13
+ snp = Snarl::SNP.new(@host, @port)
14
+ snp.stub!(:send).and_return('SNP/1.1/0/OK/1234/')
15
+ block.call(snp)
12
16
  end
13
17
 
14
18
  describe "#register" do
15
- it "everything goes well" do
16
- lambda{
17
- Snarl::SNP.open(@host, @port) do |snp|
18
- snp.register(@app)
19
- snp.unregister(@app)
20
- end
21
- }.should_not raise_error
22
- end
23
- it "twice raises error on verbose" do
24
- Snarl::SNP.open(@host, @port) do |snp|
25
- snp.verbose = true
26
- snp.register(@app)
27
- lambda{snp.register(@app)}.should raise_error(Snarl::SNP::Error::SNP_ERROR_ALREADY_REGISTERED)
28
- snp.unregister(@app)
29
- end
30
- Snarl::SNP.open(@host, @port) do |snp|
31
- snp.register(@app)
32
- lambda{snp.register(@app)}.should_not raise_error(Snarl::SNP::Error::SNP_ERROR_ALREADY_REGISTERED)
33
- snp.unregister(@app)
19
+ it "makes valid SNP command string" do
20
+ expected = "type=SNP#?version=1.0#?action=register#?app=#{@app}\r\n"
21
+ snp_open do |snp|
22
+ snp.register(@app).request_str.should eql(expected)
34
23
  end
35
24
  end
36
25
  end
37
26
 
38
27
  describe "#unregister" do
39
- # it "everything goes well" is done in #register
40
- it "unregister before register raises error on verbose" do
41
- Snarl::SNP.open(@host, @port) do |snp|
42
- snp.verbose = true
43
- lambda{snp.unregister(@app)}.should raise_error(Snarl::SNP::Error::SNP_ERROR_NOT_REGISTERED)
28
+ it "makes valid SNP command string" do
29
+ expected = "type=SNP#?version=1.0#?action=unregister#?app=#{@app}\r\n"
30
+ snp_open do |snp|
31
+ snp.unregister(@app).request_str.should eql(expected)
44
32
  end
45
- Snarl::SNP.open(@host, @port) do |snp|
46
- lambda{snp.unregister(@app)}.should_not raise_error(Snarl::SNP::Error::SNP_ERROR_NOT_REGISTERED)
33
+ end
34
+ it "raises error when snp has no @app yet" do
35
+ snp_open do |snp|
36
+ lambda{snp.unregister}.should raise_error(RuntimeError)
47
37
  end
48
38
  end
49
39
  end
50
40
 
51
41
  describe "#add_class" do
52
- it "everything goes well" do
53
- lambda{
54
- Snarl::SNP.open(@host, @port) do |snp|
42
+ describe "makes valid SNP command string" do
43
+ it "snp.add_class(clsname) has class=clsname" do
44
+ expected = "type=SNP#?version=1.0#?action=add_class#?app=#{@app}#?class=#{@class}\r\n"
45
+ snp_open do |snp|
55
46
  snp.register(@app)
56
- snp.add_class(@class)
57
- snp.unregister(@app)
47
+ snp.add_class(@class).request_str.should eql(expected)
48
+ end
49
+ end
50
+ it "snp.add_class(clsname, clstitle) has class=clsname#?title=clstitle" do
51
+ clstitle = 'classtitle'
52
+ expected = "type=SNP#?version=1.0#?action=add_class#?app=#{@app}#?class=#{@class}#?title=#{clstitle}\r\n"
53
+ snp_open do |snp|
54
+ snp.register(@app)
55
+ snp.add_class(@class, clstitle).request_str.should eql(expected)
58
56
  end
59
- }.should_not raise_error
60
- end
61
- it "add same class raises error on verbose" do
62
- Snarl::SNP.open(@host, @port) do |snp|
63
- snp.verbose = true
64
- snp.register(@app)
65
- snp.add_class(@class)
66
- lambda{snp.add_class(@class)}.should raise_error(Snarl::SNP::Error::SNP_ERROR_CLASS_ALREADY_EXISTS)
67
- snp.unregister(@app)
68
57
  end
69
- Snarl::SNP.open(@host, @port) do |snp|
70
- snp.register(@app)
71
- snp.add_class(@class)
72
- lambda{snp.add_class(@app)}.should_not raise_error(Snarl::SNP::Error::SNP_ERROR_CLASS_ALREADY_EXISTS)
73
- snp.unregister(@app)
58
+ end
59
+ it "raises error when snp has no @app yet" do
60
+ clstitle = 'classtitle'
61
+ snp_open do |snp|
62
+ lambda{snp.add_class(@class, clstitle)}.should raise_error(RuntimeError)
74
63
  end
75
64
  end
76
65
  end
77
66
 
78
67
  describe "#notification" do
79
- it "sends title, text, icon, timeout, class" do
80
- Snarl::SNP.open(@host) do |snp|
81
- snp.register(@app)
82
- snp.add_class(@class)
83
- res = snp.notification('tit', 'tex(4 no icon popups)', 'ico', 9, 'cls')
68
+ describe "makes valid SNP command string" do
69
+ it "sends title, text, icon, timeout, class" do
84
70
  expected = "type=SNP#?version=1.0#?action=notification#?app=Ruby-Snarl#?class=cls#?title=tit#?text=tex(4 no icon popups)#?timeout=9#?icon=ico\r\n"
85
- res.request.to_s.should eql(expected)
71
+ snp_open do |snp|
72
+ snp.register(@app)
73
+ snp.add_class(@class)
74
+ res = snp.notification('tit', 'tex(4 no icon popups)', 'ico', 9, 'cls')
75
+ res.request_str.should eql(expected)
76
+ end
86
77
  end
87
- end
88
- it "sends keyword-hash, keys=[:title, :text, :icon, :timeout, :class]" do
89
- Snarl::SNP.open(@host) do |snp|
90
- snp.register(@app)
91
- snp.add_class(@class)
92
- res = snp.notification(:title => 'tit', :text => 'tex', :icon => 'ico', :timeout => 9, :class => 'cls')
78
+ it "sends keyword-hash, keys=[:title, :text, :icon, :timeout, :class]" do
93
79
  expected = "type=SNP#?version=1.0#?action=notification#?app=Ruby-Snarl#?class=cls#?title=tit#?text=tex#?timeout=9#?icon=ico\r\n"
94
- res.request.to_s.should eql(expected)
80
+ snp_open do |snp|
81
+ snp.register(@app)
82
+ snp.add_class(@class)
83
+ res = snp.notification(:title => 'tit', :text => 'tex', :icon => 'ico', :timeout => 9, :class => 'cls')
84
+ res.request_str.should eql(expected)
85
+ end
95
86
  end
96
- end
97
- it "sends 'anonymous' message if not registered yet" do
98
- Snarl::SNP.open(@host) do |snp|
99
- res = snp.notification('tit', 'tex', 'ico', 9)
87
+ it "sends 'anonymous' message if not registered yet" do
100
88
  expected = "type=SNP#?version=1.0#?action=notification#?title=tit#?text=tex#?timeout=9#?icon=ico\r\n"
101
- res.request.to_s.should eql(expected)
89
+ snp_open do |snp|
90
+ res = snp.notification('tit', 'tex', 'ico', 9)
91
+ res.request_str.should eql(expected)
92
+ end
102
93
  end
103
- end
104
- it "sends 'anonymous' message if keyhash has {:app => nil} pair" do
105
- Snarl::SNP.open(@host) do |snp|
106
- res = snp.notification(:app => nil, :title => 'tit', :text => 'tex', :icon => 'ico', :timeout => 9)
94
+ it "sends 'anonymous' message if keyhash has {:app => nil} pair" do
107
95
  expected = "type=SNP#?version=1.0#?action=notification#?title=tit#?text=tex#?timeout=9#?icon=ico\r\n"
108
- res.request.to_s.should eql(expected)
96
+ snp_open do |snp|
97
+ res = snp.notification(:app => nil, :title => 'tit', :text => 'tex', :icon => 'ico', :timeout => 9)
98
+ res.request_str.should eql(expected)
99
+ end
109
100
  end
110
101
  end
111
102
  end
112
103
 
113
104
  describe "#hello" do
114
- it "returns Snarl release identifier" do
115
- Snarl::SNP.open(@host) do |snp|
116
- snp.hello.infomation.should match(/\ASnarl /)
105
+ it "makes valid SNP command string" do
106
+ expected = "type=SNP#?version=1.0#?action=hello\r\n"
107
+ snp_open do |snp|
108
+ snp.hello.request_str.should eql(expected)
117
109
  end
118
110
  end
119
111
  end
120
112
 
121
113
  describe "#version" do
122
- it "returns Snarl (inner) version" do
123
- Snarl::SNP.open(@host) do |snp|
124
- snp.version.infomation.should match(/[\d\.]+/)
114
+ it "makes valid SNP command string" do
115
+ expected = "type=SNP#?version=1.0#?action=version\r\n"
116
+ snp_open do |snp|
117
+ snp.version.request_str.should eql(expected)
125
118
  end
126
119
  end
127
120
  end
@@ -141,10 +134,10 @@ describe "SNP" do
141
134
  expected = {:action => 'notification', :title => @default_title, :text => "text", :timeout => @default_timeout}
142
135
  normalize_notification_params(params).should eql(expected)
143
136
  end
144
- it "['text'] returns {:title => snp.title, :text => 'text', :timeout => DEFAULT_TIMEOUT}, when snp.title is set" do
137
+ it "['text'] returns {:title => snp.title, :text => 'text', :timeout => DEFAULT_TIMEOUT}, when snp['title'] is set" do
145
138
  params = ['text']
146
139
  snp = Snarl::SNP.new
147
- snp.title = 'snp.title'
140
+ snp['title'] = 'snp.title'
148
141
  expected = {:action => 'notification', :title => 'snp.title', :text => "text", :timeout => @default_timeout}
149
142
  snp.__send__(:normalize_notification_params, params).should eql(expected)
150
143
  end
@@ -153,10 +146,10 @@ describe "SNP" do
153
146
  expected = {:action => 'notification', :title => @default_title, :text => "text", :timeout => 9}
154
147
  normalize_notification_params(params).should eql(expected)
155
148
  end
156
- it "['text', 9] returns {:title => snp.title, :text => 'text', :timeout => 9}, when snp.title is set" do
149
+ it "['text', 9] returns {:title => snp.title, :text => 'text', :timeout => 9}, when snp['title'] is set" do
157
150
  params = ['text', 9]
158
151
  snp = Snarl::SNP.new
159
- snp.title = 'snp.title'
152
+ snp['title'] = 'snp.title'
160
153
  expected = {:action => 'notification', :title => 'snp.title', :text => "text", :timeout => 9}
161
154
  snp.__send__(:normalize_notification_params, params).should eql(expected)
162
155
  end
@@ -180,19 +173,89 @@ describe "SNP" do
180
173
  end
181
174
  it "when already registered, app is @app" do
182
175
  params = [{:text => 'text'}]
176
+ app = 'app'
183
177
  snp = Snarl::SNP.new
184
- snp.instance_variable_set(:@app, 'app')
185
- expected = {:action => 'notification', :app => 'app', :title => @default_title, :text => "text", :timeout => @default_timeout}
178
+ snp['app'] = app
179
+ expected = {:action => 'notification', :app => app, :title => @default_title, :text => "text", :timeout => @default_timeout}
186
180
  snp.__send__(:normalize_notification_params, params).should eql(expected)
187
181
  end
188
- it "if @app is :anonymous, app is nil" do
182
+ it "if @app is nil, app is unset" do
189
183
  params = [{:text => 'text'}]
190
184
  snp = Snarl::SNP.new
191
- snp.instance_variable_set(:@app, :anonymous)
192
- expected = {:action => 'notification', :app => nil, :title => @default_title, :text => "text", :timeout => @default_timeout}
185
+ snp['app'] = nil
186
+ expected = {:action => 'notification', :title => @default_title, :text => "text", :timeout => @default_timeout}
193
187
  snp.__send__(:normalize_notification_params, params).should eql(expected)
194
188
  end
189
+ it "title == param['title'] || snp['title'] || 'Ruby-Snarl'" do
190
+ param_title = 'param_title'
191
+ snp_title = 'snp_title'
192
+
193
+ params = [{:title => param_title}]
194
+ Snarl::SNP.new do |snp|
195
+ snp['title'] = snp_title
196
+ snp.__send__(:normalize_notification_params, params)[:title].should eql(param_title)
197
+ end
198
+
199
+ params = [{}]
200
+ Snarl::SNP.new do |snp|
201
+ snp['title'] = snp_title
202
+ snp.__send__(:normalize_notification_params, params)[:title].should eql(snp_title)
203
+ end
204
+
205
+ params = [{}]
206
+ Snarl::SNP.new do |snp|
207
+ snp.__send__(:normalize_notification_params, params)[:title].should eql(Snarl::SNP::DEFAULT_TITLE)
208
+ end
209
+ end
210
+ it "timeout == param['timeout'] || snp['timeout'] || 10" do
211
+ param_timeout = 11
212
+ snp_timeout = 12
213
+
214
+ params = [{:timeout => param_timeout}]
215
+ Snarl::SNP.new do |snp|
216
+ snp['timeout'] = snp_timeout
217
+ snp.__send__(:normalize_notification_params, params)[:timeout].should eql(param_timeout)
218
+ end
219
+
220
+ params = [{}]
221
+ Snarl::SNP.new do |snp|
222
+ snp['timeout'] = snp_timeout
223
+ snp.__send__(:normalize_notification_params, params)[:timeout].should eql(snp_timeout)
224
+ end
225
+
226
+ params = [{}]
227
+ Snarl::SNP.new do |snp|
228
+ snp.__send__(:normalize_notification_params, params)[:timeout].should eql(Snarl::SNP::DEFAULT_TIMEOUT)
229
+ end
230
+ end
231
+ it "icon == iconset(param['icon']) || param['icon'] || snp['icon'] || #unset" do
232
+ set_icon = ':set_icon'
233
+ param_icon = 'param_icon'
234
+ snp_icon = 'snp_icon'
235
+
236
+ params = [{:icon => :set_icon}]
237
+ Snarl::SNP.new do |snp|
238
+ snp['iconset'] = {:set_icon => set_icon}
239
+ snp['icon'] = snp_icon
240
+ snp.__send__(:normalize_notification_params, params)[:icon].should eql(set_icon)
241
+ end
242
+
243
+ params = [{:icon => param_icon}]
244
+ Snarl::SNP.new do |snp|
245
+ snp['icon'] = snp_icon
246
+ snp.__send__(:normalize_notification_params, params)[:icon].should eql(param_icon)
247
+ end
248
+
249
+ params = [{}]
250
+ Snarl::SNP.new do |snp|
251
+ snp['icon'] = snp_icon
252
+ snp.__send__(:normalize_notification_params, params)[:icon].should eql(snp_icon)
253
+ end
195
254
 
255
+ params = [{}]
256
+ Snarl::SNP.new do |snp|
257
+ snp.__send__(:normalize_notification_params, params).should_not have_key(:icon)
258
+ end
259
+ end
196
260
  end
197
261
  end
198
-