testability-driver 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -94,6 +94,7 @@ module TDriverReportCreator
94
94
  @fail_statuses=MobyUtil::Parameter[ :report_failed_statuses, "failed" ].split('|')
95
95
  @not_run_statuses=MobyUtil::Parameter[ :report_not_run_statuses, "not run" ].split('|')
96
96
  @report_editable=MobyUtil::Parameter[ :report_editable, "false" ]
97
+ @report_short_folders=MobyUtil::Parameter[ :report_short_folders, 'false']
97
98
  end
98
99
  #This method sets the test case user defined status
99
100
  #
@@ -806,14 +807,23 @@ module TDriverReportCreator
806
807
  link='',
807
808
  total_dump=0,
808
809
  total_sent=0,
809
- total_received=0 )
810
+ total_received=0,
811
+ user_data_rows=nil,
812
+ user_data_columns=nil)
810
813
  while $result_storage_in_use==true
811
814
  sleep 1
812
815
  end
813
816
  $result_storage_in_use=true
814
817
  begin
815
818
  storage_file=nil
816
- html_link=status+'_'+index.to_s+'_'+testcase+'/index.html' if link==''
819
+
820
+ if @report_short_folders=='true'
821
+ html_link=status+'_'+index.to_s+'/index.html' if link==''
822
+ else
823
+ html_link=status+'_'+index.to_s+'_'+testcase+'/index.html' if link==''
824
+ end
825
+
826
+
817
827
  storage_file='all_cases.xml'
818
828
 
819
829
  file=@report_folder+'/'+storage_file
@@ -881,6 +891,23 @@ module TDriverReportCreator
881
891
  test<<test_data
882
892
  end
883
893
 
894
+
895
+ if user_data_rows!=nil && !user_data_columns.empty?
896
+
897
+ test_data = Nokogiri::XML::Node.new("user_table_data",test)
898
+ #create the table rows
899
+ user_data_rows.each do |row_hash|
900
+ row_hash.sort{|a,b| a[0]<=>b[0]}.each do |value|
901
+ data_value=Nokogiri::XML::Node.new("column",test_data)
902
+ data_value.set_attribute("name",value[0].to_s)
903
+ data_value.content = value[1].to_s
904
+ test_data << data_value
905
+ end
906
+ end
907
+ test<<test_data
908
+ end
909
+
910
+
884
911
  xml_data.root.add_child(test)
885
912
  File.open(file, 'w') {|f| f.write(xml_data.to_xml) }
886
913
  test=nil
@@ -893,6 +920,7 @@ module TDriverReportCreator
893
920
  user_data_values = user_data.values
894
921
  counter = user_data_values.size-1
895
922
  end
923
+
896
924
  builder = Nokogiri::XML::Builder.new do |xml|
897
925
  xml.tests {
898
926
  xml.test {
@@ -911,6 +939,7 @@ module TDriverReportCreator
911
939
  xml.dump_count calculate_total_values_from_hash(total_dump)
912
940
  xml.sent_bytes calculate_total_values_from_hash(total_sent)
913
941
  xml.received_bytes calculate_total_values_from_hash(total_received)
942
+
914
943
  if user_data!=nil && !user_data.empty?
915
944
  xml.user_display_data {
916
945
  (0..counter).each { |i|
@@ -921,6 +950,21 @@ module TDriverReportCreator
921
950
  }
922
951
  }
923
952
  end
953
+
954
+ if user_data_rows!=nil && !user_data_columns.empty?
955
+
956
+ xml.user_table_data{
957
+ #create the table rows
958
+ user_data_rows.each do |row_hash|
959
+ row_hash.sort{|a,b| a[0]<=>b[0]}.each do |value|
960
+ xml.column("name"=>value[0].to_s){
961
+ xml.text value[1].to_s
962
+ }
963
+ end
964
+ end
965
+ }
966
+
967
+ end
924
968
  }
925
969
  }
926
970
  end
@@ -379,12 +379,35 @@ background: black; /*background of tabs for hover state, plus tab with "selected
379
379
  }
380
380
 
381
381
 
382
- img
383
- {
384
- width:50%;
385
- height:50%;
386
- }
387
- .togList
382
+ div.img
383
+ {
384
+ margin:2px;
385
+ border:0px;
386
+ height:auto;
387
+ width:auto;
388
+ text-align:left;
389
+ }
390
+ div.img img
391
+ {
392
+ display:inline;
393
+ margin:3px;
394
+ border:0px;
395
+ }
396
+ div.img a:hover img
397
+ {
398
+ border:1px solid #0000ff;
399
+ height:20%;
400
+ width:20%;
401
+ }
402
+ div.desc
403
+ {
404
+ text-align:left;
405
+ font-weight:normal;
406
+ width:120px;
407
+ margin:3px;
408
+ }
409
+
410
+ .togList
388
411
  {
389
412
 
390
413
  }
@@ -651,7 +674,7 @@ display: block;
651
674
  else
652
675
  stylesheet='<link rel="stylesheet" title="TDriverReportStyle" href="../../tdriver_report_style.css"/>'
653
676
  end
654
-
677
+
655
678
  end
656
679
  html_start='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' <<
657
680
  '<html xmlns="http://www.w3.org/1999/xhtml">'<<
@@ -872,8 +895,7 @@ display: block;
872
895
  html_body=nil
873
896
  @test_case_execution_log=nil
874
897
  @test_case_behaviour_log=nil
875
- @test_case_user_data=nil
876
- @test_case_user_data_columns=nil
898
+
877
899
  end
878
900
  def tog_list_begin(name)
879
901
  html_body='<dl class="togList">'<<
@@ -902,7 +924,7 @@ display: block;
902
924
  end
903
925
  tdriver_group = nil
904
926
  html_body=nil
905
-
927
+
906
928
  end
907
929
  def write_test_case_summary_body(page,status,tc_arr,chronological_page=nil,report_page=nil,test_case_name=nil)
908
930
  html_body=Array.new
@@ -920,7 +942,7 @@ display: block;
920
942
  html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
921
943
  tdriver_group=nil
922
944
  html_result=nil
923
- elsif @fail_statuses.include?(status) || status == "failed"
945
+ elsif @fail_statuses.include?(status) || status == "failed"
924
946
  title='<div class="page_title"><center><h1>Failed</h1></center></div>'<<
925
947
  '<div class="summary_failed">' <<
926
948
  '<form action="save_total_run_results" >'
@@ -1026,13 +1048,13 @@ display: block;
1026
1048
  chronological_html_body=nil
1027
1049
  end # case
1028
1050
  end # if
1029
-
1051
+
1030
1052
  html_body << '</div>'
1031
1053
  File.open(page, 'a') do |f2|
1032
1054
  f2.puts html_body
1033
1055
  end
1034
1056
  html_body=nil
1035
-
1057
+
1036
1058
  end
1037
1059
 
1038
1060
  def write_summary_body(page,start_time,end_time,run_time,total_run,total_passed,total_failed,total_not_run,total_crash_files,total_device_resets,summary_arr=nil)
@@ -147,5 +147,8 @@ $parameters.init
147
147
  # enable logging engine
148
148
  $logger.enable_logging
149
149
 
150
+ # reporting modules
151
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'report/report.rb' ) ) if MobyUtil::Parameter[ :enable_reporter, 'true' ]=='true'
152
+
150
153
  # initialization done, everything is ready
151
154
  $TDRIVER_INITIALIZED = true
@@ -17,38 +17,83 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
- module MobyUtil
20
+ module TDriver
21
21
 
22
- # Plugin service implementation
23
22
  class PluginService
24
23
 
25
- include Singleton
24
+ # private methods and variables
25
+ class << self
26
26
 
27
- # intialize plugin service
28
- def initialize
27
+ private
29
28
 
30
- @@registered_plugins = {}
29
+ # TODO: document me
30
+ def initialize_class
31
31
 
32
- end
32
+ reset_plugins_list
33
+
34
+ end
35
+
36
+ # TODO: document me
37
+ def reset_plugins_list
38
+
39
+ # list of registered plugins
40
+ @registered_plugins = {}
41
+
42
+ # list of enabled plugins
43
+ @enabled_plugins = []
44
+
45
+ end
46
+
47
+ # TODO: document me
48
+ def delete_plugin( plugin_name )
49
+
50
+ # remove from the plugins hash
51
+ @registered_plugins.delete( plugin_name )
33
52
 
34
- # return all or plugins of given type
35
- def registered_plugins( type = nil )
53
+ # remove plugin from enabled plugins list
54
+ @enabled_plugins.delete( plugin_name )
55
+
56
+ end
57
+
58
+ # TODO: document me
59
+ def plugin_data_value( plugin_module, value_name, optional = false )
60
+
61
+ begin
62
+
63
+ plugin_module.send( value_name.to_sym )
64
+
65
+ rescue NoMethodError
66
+
67
+ raise RuntimeError, "Plugin must have #{ value_name.to_s } value defined" if !optional
68
+
69
+ rescue Exception
70
+
71
+ raise
72
+
73
+ end
74
+
75
+ end
76
+
77
+ end # self
78
+
79
+ # TODO: document me
80
+ def self.registered_plugins( type = nil )
36
81
 
37
82
  # return all or plugins of given type
38
- Hash[ @@registered_plugins.select{ | key, value | type.nil? || value[ :type ] == type } ]
83
+ Hash[ @registered_plugins.select{ | key, value | type.nil? || value[ :type ] == type } ]
39
84
 
40
85
  end
41
86
 
42
87
  # returns true if plugin is registered, plugin type can be given as optional parameter
43
- def plugin_registered?( plugin_name, type = nil )
88
+ def self.plugin_registered?( plugin_name, type = nil )
44
89
 
45
90
  # check if given plugin is registered
46
- if @@registered_plugins.has_key?( plugin_name )
91
+ if @registered_plugins.has_key?( plugin_name )
47
92
 
48
93
  unless type.nil?
49
94
 
50
95
  # plugin registered, compare that given plugin type matches
51
- @@registered_plugins[ plugin_name ][ :type ] == type
96
+ @registered_plugins[ plugin_name ][ :type ] == type
52
97
 
53
98
  else
54
99
 
@@ -59,142 +104,189 @@ module MobyUtil
59
104
 
60
105
  else
61
106
 
62
- # plugin not registered, not found from @@registered_plugins hash
107
+ # plugin not registered, not found from registered_plugins list
63
108
  false
64
109
 
65
110
  end
66
111
 
67
112
  end
68
113
 
69
- def enable_plugin( plugin_name )
70
-
71
- ( @@registered_plugins[ plugin_name ][ :enabled ] = true ) rescue Kernel::raise( ArgumentError.new( "No such plugin registered %s" % [ plugin_name ] ) )
114
+ # TODO: document me
115
+ def self.enabled_plugins
116
+
117
+ @enabled_plugins
118
+
119
+ end
120
+
121
+ # TODO: document me
122
+ def self.enable_plugin( plugin_name )
72
123
 
124
+ begin
125
+
126
+ # enable plugin
127
+ @registered_plugins[ plugin_name ][ :enabled ] = true
128
+
129
+ # add name to enabled plugins list
130
+ @enabled_plugins << plugin_name unless @enabled_plugins.include?( plugin_name )
131
+
132
+ rescue
133
+
134
+ raise ArgumentError, "No such plugin registered #{ plugin_name }"
135
+
136
+ end
137
+
73
138
  end
74
139
 
75
- def disable_plugin( plugin_name )
140
+ # TODO: document me
141
+ def self.disable_plugin( plugin_name )
142
+
143
+ begin
144
+
145
+ # disable plugin
146
+ @registered_plugins[ plugin_name ][ :enabled ] = false
147
+
148
+ # remove name from enabled plugins list
149
+ @enabled_plugins.delete( plugin_name )
76
150
 
77
- ( @@registered_plugins[ plugin_name ][ :enabled ] = false ) rescue Kernel::raise( ArgumentError.new( "No such plugin registered %s" % [ plugin_name ] ) )
151
+ rescue
152
+
153
+ raise ArgumentError, "No such plugin registered #{ plugin_name }"
154
+
155
+ end
78
156
 
79
157
  end
80
158
 
81
- def plugin_enabled?( plugin_name )
159
+ # TODO: document me
160
+ def self.plugin_enabled?( plugin_name )
82
161
 
83
- ( @@registered_plugins[ plugin_name ][ :enabled ] ) rescue false
84
-
162
+ @enabled_plugins.include?( plugin_name )
163
+
85
164
  end
86
165
 
87
- def register_plugin( plugin_module )
166
+ # TODO: document me
167
+ def self.register_plugin( plugin_module )
88
168
 
89
- # retrieve plugin name
169
+ # retrieve plugin name
90
170
  plugin_name = plugin_data_value( plugin_module, :plugin_name )
91
171
 
92
172
  # throw exception if plugin is already registered
93
- Kernel::raise ArgumentError.new( "Plugin %s is already registered" % [ plugin_name ] ) if @@registered_plugins.has_key?( plugin_name )
173
+ raise ArgumentError, "Plugin #{ plugin_name } is already registered" if @registered_plugins.has_key?( plugin_name )
94
174
 
95
175
  # plugin configuration
96
- @@registered_plugins[ plugin_name ] = {
176
+ @registered_plugins[ plugin_name ] = {
177
+
178
+ # store plugin type
97
179
  :type => plugin_data_value( plugin_module, :plugin_type ),
180
+
181
+ # store plugin implementation module name
98
182
  :plugin_module => plugin_module,
183
+
184
+ # set plugin to enabled state
99
185
  :enabled => true
186
+
100
187
  }
101
188
 
102
189
  # register plugin
103
190
  plugin_module.register_plugin
104
191
 
105
- end
106
-
107
- def unregister_plugin( plugin_name )
108
-
109
- # unregister plugin, raise exception if plugin is not registered
110
- ( @@registered_plugins[ plugin_name ][ :plugin_module ].unregister_plugin ) rescue Kernel::raise( ArgumentError.new( "Unregister failed due to plugin %s is not registered" % [ plugin_name ] ) )
111
-
112
- # remove from the plugins hash
113
- @@registered_plugins.delete( plugin_name )
192
+ # add name to enabled plugins list
193
+ @enabled_plugins << plugin_name unless @enabled_plugins.include?( plugin_name )
114
194
 
115
195
  end
116
196
 
117
- def load_plugin( plugin_name )
197
+ # TODO: document me
198
+ def self.unregister_plugin( plugin_name )
118
199
 
119
200
  begin
120
201
 
121
- # load plugin implementation
122
- require plugin_name
202
+ # call plugin unregister mechanism
203
+ @registered_plugins[ plugin_name ][ :plugin_module ].unregister_plugin
123
204
 
124
- rescue LoadError => exception
205
+ # remove from the plugins hash
206
+ @registered_plugins.delete( plugin_name )
125
207
 
126
- Kernel::raise RuntimeError.new(
208
+ # remove from the plugins hash
209
+ @enabled_plugins.delete( plugin_name )
127
210
 
128
- "Error while loading plugin %s. Please verify that the plugin is installed properly (%s: %s)" % [ plugin_name, exception.class, exception.message ]
211
+ rescue
129
212
 
130
- )
213
+ raise ArgumentError, "Failed to unregister plugin due to plugin #{ plugin_name.inspect } is not registered"
131
214
 
132
215
  end
133
216
 
134
217
  end
135
218
 
136
- def call_plugin_method( plugin_name, method_name, *args )
219
+ # TODO: document me
220
+ def self.load_plugin( plugin_name )
137
221
 
138
222
  begin
139
223
 
140
- plugin_module = @@registered_plugins[ plugin_name ][ :plugin_module ]
141
-
142
- rescue
143
-
144
- Kernel::raise( ArgumentError.new( "No such plugin registered %s" % [ plugin_name ] ) )
224
+ # load plugin implementation
225
+ require plugin_name
226
+
227
+ rescue LoadError
228
+
229
+ raise RuntimeError, "Error while loading plugin #{ plugin_name.to_s }. Please verify that the plugin is installed properly (#{ $!.class }: #{ $!.message })"
145
230
 
146
231
  end
147
232
 
233
+ end
234
+
235
+ # TODO: document me
236
+ def self.call_plugin_method( plugin_name, method_name, *args )
237
+
148
238
  begin
149
239
 
150
- plugin_module.send( method_name.to_sym, *args )
240
+ @registered_plugins.fetch( plugin_name ){
151
241
 
152
- rescue Exception => exception
242
+ # in case if plugin not found from registered plugins list
243
+ raise ArgumentError, "No such plugin registered #{ plugin_name }"
153
244
 
154
- raise PluginError.new( "Error occured during calling %s method for %s (%s: %s)" % [ method_name, plugin_name, exception.class, exception.message ] )
245
+ }[ :plugin_module ].send( method_name.to_sym, *args )
155
246
 
156
- end
247
+ rescue ArgumentError
157
248
 
158
- end
249
+ # raise argument errors as is
250
+ raise
159
251
 
160
- private
252
+ rescue
161
253
 
162
- def reset_plugins_list
254
+ # raise all other exceptions as PluginError
255
+ raise PluginError, "Error occured during calling #{ method_name } method for #{ plugin_name } (#{ $!.class }: #{ $!.message })"
163
256
 
164
- @@registered_plugins = {}
257
+ end
165
258
 
166
259
  end
167
260
 
168
- def delete_plugin( plugin_name )
169
-
170
- # remove from the plugins hash
171
- @@registered_plugins.delete( plugin_name )
261
+ # initialize plugin service
262
+ initialize_class
172
263
 
173
- end
264
+ # enable hooking for performance measurement & debug logging
265
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
174
266
 
175
- def plugin_data_value( plugin_module, value_name, optional = false )
176
-
177
- begin
267
+ end # PluginService
178
268
 
179
- result = plugin_module.send( value_name.to_sym )
269
+ end
180
270
 
181
- rescue NoMethodError
271
+ module MobyUtil
182
272
 
183
- Kernel::raise RuntimeError.new( "Plugin must have %s value defined" % [ value_name.to_s ] ) if !optional
273
+ # deprecated plugin service implementation; please use TDriver::PluginService instead of this
274
+ class PluginService
184
275
 
185
- rescue => exception
276
+ # deprecated
277
+ def self.instance
186
278
 
187
- Kernel::raise exception
279
+ # retrieve caller information
280
+ file, line = caller.first.split(":")
188
281
 
189
- end
282
+ # show warning
283
+ warn "#{ file }:#{ line } warning: deprecated method MobyUtil::PluginService.instance#method; please use static class TDriver::PluginService#method instead"
190
284
 
191
- result
285
+ # redirect to new implementation
286
+ TDriver::PluginService
192
287
 
193
288
  end
194
289
 
195
- # enable hooking for performance measurement & debug logging
196
- TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
197
-
198
- end # PluginService
290
+ end
199
291
 
200
- end # MobyUtil
292
+ end