testability-driver 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/tdriver-devtools +0 -0
- data/ext/native_extensions.c +165 -6
- data/lib/tdriver-devtools/behaviour/old/xml/update +0 -0
- data/lib/tdriver-devtools/behaviour/xml/generate.rb +0 -0
- data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +15 -1
- data/lib/tdriver-devtools/doc/update +0 -0
- data/lib/tdriver-devtools/doc/xslt/template.xsl +24 -14
- data/lib/tdriver-devtools/doc/xslt/update +0 -0
- data/lib/tdriver-devtools/tdriver-devtools.rb +0 -0
- data/lib/tdriver-devtools/tests/feature_tests/update +0 -0
- data/lib/tdriver/base/behaviour/{behaviour.rb → abstract.rb} +3 -6
- data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +2 -2
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +47 -37
- data/lib/tdriver/base/behaviour/factory.rb +260 -382
- data/lib/tdriver/base/behaviour/loader.rb +22 -4
- data/lib/tdriver/base/controller/abstraction.rb +56 -0
- data/lib/tdriver/base/controller/loader.rb +21 -0
- data/lib/tdriver/base/loader.rb +3 -1
- data/lib/tdriver/base/sut/controller.rb +91 -74
- data/lib/tdriver/base/sut/factory.rb +8 -8
- data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
- data/lib/tdriver/base/sut/generic/behaviours/sut.rb +116 -96
- data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
- data/lib/tdriver/base/sut/sut.rb +10 -8
- data/lib/tdriver/base/test_object/abstract.rb +25 -24
- data/lib/tdriver/base/test_object/adapter.rb +67 -44
- data/lib/tdriver/base/test_object/behaviours/test_object.rb +79 -20
- data/lib/tdriver/base/test_object/factory.rb +45 -15
- data/lib/tdriver/base/test_object/xml/adapter.rb +80 -57
- data/lib/tdriver/env.rb +0 -0
- data/lib/tdriver/loader.rb +0 -0
- data/lib/tdriver/matti.rb +0 -0
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +1 -0
- data/lib/tdriver/report/report.rb +2 -1
- data/lib/tdriver/report/report_crash_file_capture.rb +12 -0
- data/lib/tdriver/report/report_creator.rb +6 -2
- data/lib/tdriver/report/report_execution_statistics.rb +27 -11
- data/lib/tdriver/report/report_graph_generator.rb +59 -0
- data/lib/tdriver/report/report_test_case_run.rb +34 -2
- data/lib/tdriver/report/report_writer.rb +12 -0
- data/lib/tdriver/tdriver.rb +12 -1
- data/lib/tdriver/util/agent/loader.rb +22 -0
- data/lib/tdriver/util/agent/service.rb +107 -0
- data/lib/tdriver/util/common/crc16.rb +17 -10
- data/lib/tdriver/util/common/hash.rb +4 -1
- data/lib/tdriver/util/common/kernel.rb +11 -0
- data/lib/tdriver/util/common/numeric.rb +48 -0
- data/lib/tdriver/util/common/object.rb +5 -2
- data/lib/tdriver/util/common/string.rb +8 -1
- data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
- data/lib/tdriver/util/filters/loader.rb +29 -0
- data/lib/tdriver/util/fixture/loader.rb +22 -0
- data/lib/tdriver/util/fixture/service.rb +157 -0
- data/lib/tdriver/util/loader.rb +8 -2
- data/lib/tdriver/util/logger/logger.rb +12 -6
- data/lib/tdriver/util/other/config.rb +0 -0
- data/lib/tdriver/util/parameter/parameter.rb +221 -152
- data/lib/tdriver/util/plugin/error.rb +0 -0
- data/lib/tdriver/util/video/camera_linux.rb +36 -22
- data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +3 -13
- data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +13 -8
- data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +51 -9
- data/lib/tdriver/util/xml/xml.rb +4 -2
- data/lib/tdriver/verify/verify.rb +280 -621
- data/lib/tdriver/version.rb +1 -1
- data/xml/behaviours/generic.xml +34 -0
- data/xml/templates/generic.xml +20 -3
- metadata +168 -240
- data/lib/tdriver-devtools/tests/feature_tests/output/application_closable_0x3f.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/application_close.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/application_environment.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/application_executable_name.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/application_uid.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/created.rid +0 -1
- data/lib/tdriver-devtools/tests/feature_tests/output/find_find.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash_images.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_application.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_capture_screen.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_child.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_clear_verify_blocks.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_connect.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order_0x3d.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_current_application_id.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_disconnect.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_dump_count.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_freeze.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_frozen.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_application_id.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_object.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_operator_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_ui_dump.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_user_information.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_input.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_parameter.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_press_key.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_received_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh.feature +0 -20
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_timeout.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_tries.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_ui_dump.feature +0 -20
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_run.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_sent_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_state.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_translate.feature +0 -30
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_type.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_version.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_unfreeze.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_update.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_always.feature +0 -20
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_blocks.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_x_path.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_0x3d.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_crc.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_down.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_status.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_up.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_reset.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/verification_test_object_exists_0x3f.feature +0 -15
- data/lib/tdriver/base/behaviour/factory_new.rb +0 -409
- data/lib/tdriver/base/test_object/identificator.rb +0 -518
- data/lib/tdriver/util/filters/dynamic_attributes.rb +0 -189
@@ -0,0 +1,59 @@
|
|
1
|
+
############################################################################
|
2
|
+
##
|
3
|
+
## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
4
|
+
## All rights reserved.
|
5
|
+
## Contact: Nokia Corporation (testabilitydriver@nokia.com)
|
6
|
+
##
|
7
|
+
## This file is part of Testability Driver.
|
8
|
+
##
|
9
|
+
## If you have questions regarding the use of this file, please contact
|
10
|
+
## Nokia at testabilitydriver@nokia.com .
|
11
|
+
##
|
12
|
+
## This library is free software; you can redistribute it and/or
|
13
|
+
## modify it under the terms of the GNU Lesser General Public
|
14
|
+
## License version 2.1 as published by the Free Software Foundation
|
15
|
+
## and appearing in the file LICENSE.LGPL included in the packaging
|
16
|
+
## of this file.
|
17
|
+
##
|
18
|
+
############################################################################
|
19
|
+
|
20
|
+
class ReportGraphGenerator
|
21
|
+
def initialize(columns,data)
|
22
|
+
@columns=columns
|
23
|
+
@data=data
|
24
|
+
end
|
25
|
+
|
26
|
+
def generate_graph(file_name)
|
27
|
+
|
28
|
+
begin
|
29
|
+
require 'gruff'
|
30
|
+
rescue LoadError
|
31
|
+
$stderr.puts "Can't load the Gruff gem. If its missing from your system please run 'gem install gruff' to install it."
|
32
|
+
end
|
33
|
+
|
34
|
+
begin
|
35
|
+
g = Gruff::Line.new()
|
36
|
+
|
37
|
+
data_rows = Hash.new #Create hash for data
|
38
|
+
@columns.each do |title|
|
39
|
+
data_rows[title] = Array.new #Create array for data
|
40
|
+
end
|
41
|
+
|
42
|
+
@data.each do |value|
|
43
|
+
value.each_key do |key|
|
44
|
+
data_rows[key].push(value[key].to_f) #Put values in the row data
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
data_rows.each_key do |key|
|
49
|
+
g.data(key, data_rows[key])
|
50
|
+
end
|
51
|
+
|
52
|
+
g.write(file_name)
|
53
|
+
|
54
|
+
rescue Exception => e
|
55
|
+
puts "Graph creation failed #{e.message} from data: "
|
56
|
+
p data_rows
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -324,7 +324,31 @@ module TDriverReportCreator
|
|
324
324
|
def set_test_case_behaviour_log(value,test_case)
|
325
325
|
@test_case_behaviour_log << [value.to_s,test_case]
|
326
326
|
end
|
327
|
-
|
327
|
+
|
328
|
+
#This methods checks the available video devices
|
329
|
+
#
|
330
|
+
# === params
|
331
|
+
#
|
332
|
+
# === returns
|
333
|
+
# nil
|
334
|
+
def each_video_device
|
335
|
+
|
336
|
+
if $parameters[:report_video, nil] != nil
|
337
|
+
|
338
|
+
device_index = 0
|
339
|
+
$parameters[:report_video].split("|").each do | video_device |
|
340
|
+
if !video_device.strip.empty?
|
341
|
+
yield video_device.strip, device_index.to_s
|
342
|
+
device_index += 1
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
end
|
347
|
+
|
348
|
+
end
|
349
|
+
|
350
|
+
|
351
|
+
#This methods sets video recording of the test case
|
328
352
|
#
|
329
353
|
# === params
|
330
354
|
# rec_name: String, name of video file to create
|
@@ -338,6 +362,7 @@ module TDriverReportCreator
|
|
338
362
|
tc_video_width = 640
|
339
363
|
tc_video_height = 480
|
340
364
|
tc_video_fps = 30
|
365
|
+
tc_max_time = '99:00:00'
|
341
366
|
|
342
367
|
begin
|
343
368
|
tc_video_width = $parameters[ :report_video_width ].to_i
|
@@ -354,6 +379,11 @@ module TDriverReportCreator
|
|
354
379
|
rescue
|
355
380
|
# parameter not loaded, do nothing
|
356
381
|
end
|
382
|
+
begin
|
383
|
+
tc_max_time = $parameters[ :report_video_max_time ].to_i
|
384
|
+
rescue
|
385
|
+
# parameter not loaded, do nothing
|
386
|
+
end
|
357
387
|
|
358
388
|
|
359
389
|
@tc_video_recorders = []
|
@@ -549,7 +579,9 @@ module TDriverReportCreator
|
|
549
579
|
begin
|
550
580
|
sut_attributes[:sut].capture_screen( :Filename => dump_folder+'/'+time_stamp+'_'+sut_id.to_s+'_state.png', :Redraw => true ) if sut_attributes[:is_connected]
|
551
581
|
if arguments[:file]
|
552
|
-
|
582
|
+
base_name=File.basename(arguments[:file])
|
583
|
+
base_folder=File.dirname(arguments[:file])
|
584
|
+
sut_attributes[:sut].capture_screen( :Filename => "#{base_folder}/#{sut_id.to_s}_#{base_name}", :Redraw => true ) if sut_attributes[:is_connected]
|
553
585
|
end
|
554
586
|
image_html='<div class="img"><a href="state_xml/'<<
|
555
587
|
time_stamp+'_'+sut_id.to_s+'_state.png'<<
|
@@ -890,6 +890,7 @@ display: block;
|
|
890
890
|
format_behaviour_log(@test_case_behaviour_log)<<
|
891
891
|
'</dd>'<<
|
892
892
|
'</dl>'
|
893
|
+
|
893
894
|
end
|
894
895
|
if @test_case_user_data!=nil && !@test_case_user_data.empty?
|
895
896
|
html_body=html_body<<
|
@@ -899,6 +900,17 @@ display: block;
|
|
899
900
|
format_user_log_table( @test_case_user_data,@test_case_user_data_columns)<<
|
900
901
|
'</dd>'<<
|
901
902
|
'</dl>'
|
903
|
+
if $parameters[ :report_generate_duration_graph, false]=='true'
|
904
|
+
graph=ReportGraphGenerator.new(@test_case_user_data_columns,@test_case_user_data)
|
905
|
+
graph.generate_graph("#{folder}/graph.png")
|
906
|
+
html_body=html_body<<
|
907
|
+
'<dl class="togList">'<<
|
908
|
+
'<dt onclick="tog(this)" style="background-color: #CCCCCC;"><b style="font-size: large"><span><input id="Button1" type="button" value="Close" class="btn" /></span> Graph</b></dt>'<<
|
909
|
+
'<dd style="font-size: small">'<<
|
910
|
+
'<img border="0" src="graph.png"/>'<<
|
911
|
+
'</dd>'<<
|
912
|
+
'</dl>'
|
913
|
+
end
|
902
914
|
end
|
903
915
|
html_body=html_body<<
|
904
916
|
'</div>'
|
data/lib/tdriver/tdriver.rb
CHANGED
@@ -86,7 +86,7 @@ module TDriver
|
|
86
86
|
# ArgumentError:: Not connected to device 'id' if not connected at all / device already disconnected
|
87
87
|
# ArgumentError:: Sut id not given
|
88
88
|
# === example
|
89
|
-
# @sut = TDriver.reboot_sut(:Id =>'sut_qt') # for Qt, should be connected already
|
89
|
+
# @sut = TDriver.reboot_sut(:Id => 'sut_qt') # for Qt, should be connected already
|
90
90
|
def reboot_sut( sut_attributes = {} )
|
91
91
|
|
92
92
|
MobyBase::SUTFactory.instance.reboot_sut( sut_attributes )
|
@@ -167,6 +167,14 @@ module TDriver
|
|
167
167
|
File.expand_path( File.dirname( __FILE__ ) )
|
168
168
|
|
169
169
|
end
|
170
|
+
|
171
|
+
# == nodoc
|
172
|
+
# TODO: document me
|
173
|
+
def version
|
174
|
+
|
175
|
+
ENV['TDRIVER_VERSION'] || "unknown"
|
176
|
+
|
177
|
+
end
|
170
178
|
|
171
179
|
private
|
172
180
|
|
@@ -182,6 +190,9 @@ module TDriver
|
|
182
190
|
# set xml cache buffer size
|
183
191
|
MobyUtil::XML.buffer_size = $parameters[ :xml_cache_buffer_size, 10 ].to_i
|
184
192
|
|
193
|
+
# load behaviours
|
194
|
+
TDriver::BehaviourFactory.init( :path => File.join( config_dir, 'behaviours' ) )
|
195
|
+
|
185
196
|
# initialization done, everything is ready
|
186
197
|
$TDRIVER_INITIALIZED = true
|
187
198
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
############################################################################
|
2
|
+
##
|
3
|
+
## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
4
|
+
## All rights reserved.
|
5
|
+
## Contact: Nokia Corporation (testabilitydriver@nokia.com)
|
6
|
+
##
|
7
|
+
## This file is part of Testability Driver.
|
8
|
+
##
|
9
|
+
## If you have questions regarding the use of this file, please contact
|
10
|
+
## Nokia at testabilitydriver@nokia.com .
|
11
|
+
##
|
12
|
+
## This library is free software; you can redistribute it and/or
|
13
|
+
## modify it under the terms of the GNU Lesser General Public
|
14
|
+
## License version 2.1 as published by the Free Software Foundation
|
15
|
+
## and appearing in the file LICENSE.LGPL included in the packaging
|
16
|
+
## of this file.
|
17
|
+
##
|
18
|
+
############################################################################
|
19
|
+
|
20
|
+
# agent command services module
|
21
|
+
require File.expand_path( File.join( File.dirname( __FILE__ ), 'service.rb' ) )
|
22
|
+
|
@@ -0,0 +1,107 @@
|
|
1
|
+
############################################################################
|
2
|
+
##
|
3
|
+
## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
4
|
+
## All rights reserved.
|
5
|
+
## Contact: Nokia Corporation (testabilitydriver@nokia.com)
|
6
|
+
##
|
7
|
+
## This file is part of Testability Driver.
|
8
|
+
##
|
9
|
+
## If you have questions regarding the use of this file, please contact
|
10
|
+
## Nokia at testabilitydriver@nokia.com .
|
11
|
+
##
|
12
|
+
## This library is free software; you can redistribute it and/or
|
13
|
+
## modify it under the terms of the GNU Lesser General Public
|
14
|
+
## License version 2.1 as published by the Free Software Foundation
|
15
|
+
## and appearing in the file LICENSE.LGPL included in the packaging
|
16
|
+
## of this file.
|
17
|
+
##
|
18
|
+
############################################################################
|
19
|
+
|
20
|
+
module TDriver
|
21
|
+
|
22
|
+
class AgentService
|
23
|
+
|
24
|
+
=begin
|
25
|
+
# remove all public methods
|
26
|
+
instance_methods.each{ | method |
|
27
|
+
undef_method( method ) unless method =~ /^__|^(methods|inspect|to_s|class|nil?|extend)/
|
28
|
+
}
|
29
|
+
|
30
|
+
# required by commands method to list available services
|
31
|
+
private :methods
|
32
|
+
=end
|
33
|
+
|
34
|
+
# TODO: document me
|
35
|
+
def initialize( options = {} )
|
36
|
+
|
37
|
+
# verify that options is type of hash
|
38
|
+
options.check_type Hash, 'wrong argument type $1 for AgentCommandService options (expected $2)'
|
39
|
+
|
40
|
+
# verify that sut is defined in options hash
|
41
|
+
options.require_key :sut
|
42
|
+
|
43
|
+
sut = options[ :sut ]
|
44
|
+
|
45
|
+
TDriver::BehaviourFactory.apply_behaviour(
|
46
|
+
:object => self,
|
47
|
+
:object_type => [ 'AgentCommandService' ],
|
48
|
+
:env => [ '*', *sut.environment.to_s.split(";") ],
|
49
|
+
:input_type => [ '*', *sut.input.to_s.split(";") ],
|
50
|
+
:version => [ '*', *sut.ui_version.to_s.split(";") ]
|
51
|
+
)
|
52
|
+
|
53
|
+
# store given options
|
54
|
+
@options = options
|
55
|
+
|
56
|
+
# store sut variable
|
57
|
+
@sut = sut
|
58
|
+
|
59
|
+
# store caller backtrace
|
60
|
+
@caller = caller
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
# TODO: document me
|
65
|
+
def commands
|
66
|
+
|
67
|
+
class << self
|
68
|
+
|
69
|
+
# retrieve all public methods
|
70
|
+
instance_methods( false ).select{ | name | true unless name =~ /^__|^commands$/ }
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
# TODO: document me
|
79
|
+
def execute_command( command_data_object )
|
80
|
+
|
81
|
+
begin
|
82
|
+
|
83
|
+
# execute command
|
84
|
+
@sut.__send__( :execute_command, command_data_object )
|
85
|
+
|
86
|
+
rescue MobyBase::ControllerNotFoundError
|
87
|
+
|
88
|
+
# raise exception if sut doesn't have controller for the command data object
|
89
|
+
raise NotImplementedError, "Agent command #{ command_data_object.parameters[ :command ].inspect } is not supported on #{ @sut.id.inspect }", @caller
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
# TODO: document me
|
98
|
+
def method_missing( id, *args )
|
99
|
+
|
100
|
+
# raise exception if unknown command or not supported by sut
|
101
|
+
raise RuntimeError, "agent command #{ id.inspect } not supported by #{ @options[ :sut ].id }", caller
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
end # AgentCommandService
|
106
|
+
|
107
|
+
end # TDriver
|
@@ -73,20 +73,27 @@ module TDriver
|
|
73
73
|
|
74
74
|
public
|
75
75
|
|
76
|
-
#
|
77
|
-
|
76
|
+
# check if implementation is already loaded from TDriver native Ruby C Extension; native crc routines are ~10% faster
|
77
|
+
unless instance_methods.include?( 'native_extension' )
|
78
|
+
|
79
|
+
# CRC-16-CCITT
|
80
|
+
def crc16( buf, crc = 0 )
|
78
81
|
|
79
|
-
|
80
|
-
|
82
|
+
# calculate the checksum
|
83
|
+
buf.each_byte{ | x | crc = ( ( crc << 8 ) ^ @CCITT_16[ ( crc >> 8 ) ^ x ] ) & 0xffff }
|
81
84
|
|
82
|
-
|
83
|
-
|
85
|
+
# result
|
86
|
+
crc
|
84
87
|
|
85
|
-
|
88
|
+
end # crc16
|
89
|
+
|
90
|
+
# determines that native extension is not in use
|
91
|
+
def native_extension
|
92
|
+
|
93
|
+
false
|
94
|
+
|
95
|
+
end
|
86
96
|
|
87
|
-
# check if implementation is already loaded from TDriver native Ruby C Extension; native crc routines are ~10% faster
|
88
|
-
unless instance_methods.include?( 'crc16_ibm' )
|
89
|
-
|
90
97
|
# IBM-CRC-16: fallback when native extensions are not supported (e.g. jruby)
|
91
98
|
def crc16_ibm( buf, crc = 0xffff )
|
92
99
|
|
@@ -66,9 +66,12 @@ class Hash
|
|
66
66
|
# verify that receiver object contains all of given keys. Raises exception is key not found.
|
67
67
|
def require_key( key, message = 'required key $1 not found from hash' )
|
68
68
|
|
69
|
+
# store caller backtrace before calling fetch
|
70
|
+
backtrace = caller
|
71
|
+
|
69
72
|
fetch( key ){
|
70
73
|
|
71
|
-
raise ArgumentError, message.gsub
|
74
|
+
raise ArgumentError, message.gsub( "$1", key.inspect ), backtrace
|
72
75
|
|
73
76
|
}
|
74
77
|
|
@@ -27,6 +27,17 @@ module Kernel
|
|
27
27
|
|
28
28
|
end
|
29
29
|
|
30
|
+
# TODO: document me
|
31
|
+
def __method_path__
|
32
|
+
|
33
|
+
# retrieve filename, line number and method name
|
34
|
+
/^(.+?):(\d+)(?::in `(.*)')?/.match( caller.reverse[ -2 ].to_s )
|
35
|
+
|
36
|
+
# construct string with module/class and method name
|
37
|
+
"#{ ( [ Class, Module ].include?( self.class ) ? self.name : self.class.name ).to_s }##{ caller.first.to_s.scan(/`(.+)'$/).to_s }"
|
38
|
+
|
39
|
+
end
|
40
|
+
|
30
41
|
# TODO: document me
|
31
42
|
def warn_caller( message, remove_eval = true )
|
32
43
|
|
@@ -48,6 +48,54 @@ class Numeric
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
+
# TODO: document me
|
52
|
+
def not_negative( message = 'Given value ($1) must not be negative', exception = ArgumentError )
|
53
|
+
|
54
|
+
if negative?
|
55
|
+
|
56
|
+
# replace macros
|
57
|
+
message.gsub!( '$1', self.inspect )
|
58
|
+
|
59
|
+
raise exception, message, caller
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
self
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
# TODO: document me
|
68
|
+
def not_zero( message = 'Given value must not be zero', exception = ArgumentError )
|
69
|
+
|
70
|
+
if zero?
|
71
|
+
|
72
|
+
# replace macros
|
73
|
+
message.gsub!( '$1', self.inspect )
|
74
|
+
|
75
|
+
raise exception, message, caller
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
self
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
# TODO: document me
|
84
|
+
def not_positive( message = 'Given value ($1) must not be positive', exception = ArgumentError )
|
85
|
+
|
86
|
+
if positive?
|
87
|
+
|
88
|
+
# replace macros
|
89
|
+
message.gsub!( '$1', self.inspect )
|
90
|
+
|
91
|
+
raise exception, message, caller
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
self
|
96
|
+
|
97
|
+
end
|
98
|
+
|
51
99
|
# TODO: document me
|
52
100
|
def check_range( range, message = "value $1 is out of range ($2)" )
|
53
101
|
|
@@ -27,26 +27,29 @@ class Object
|
|
27
27
|
|
28
28
|
end
|
29
29
|
|
30
|
+
# TODO: document me
|
30
31
|
def true?
|
31
32
|
|
32
33
|
false
|
33
34
|
|
34
35
|
end
|
35
36
|
|
37
|
+
# TODO: document me
|
36
38
|
def false?
|
37
39
|
|
38
40
|
false
|
39
41
|
|
40
42
|
end
|
41
43
|
|
42
|
-
|
44
|
+
# TODO: document me
|
45
|
+
def not_blank( message = "object must not be blank", exception = ArgumentError )
|
43
46
|
|
44
47
|
raise exception, message, caller if blank?
|
45
48
|
|
46
49
|
self
|
47
50
|
|
48
51
|
end
|
49
|
-
|
52
|
+
|
50
53
|
# define method to class instance
|
51
54
|
def meta_def( method_name, &block )
|
52
55
|
|