testability-driver 1.1.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/config/sut_parameters.rb +21 -8
  2. data/config/tdriver_custom_error_recovery.rb +83 -0
  3. data/ext/extconf.rb +3 -2
  4. data/ext/native_extensions.c +60 -2
  5. data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +2 -105
  6. data/lib/tdriver/base/behaviour/factory.rb +154 -89
  7. data/lib/tdriver/base/behaviour/factory_new.rb +409 -0
  8. data/lib/tdriver/base/errors.rb +3 -3
  9. data/lib/tdriver/base/state_object.rb +85 -22
  10. data/lib/tdriver/base/sut/adapter.rb +26 -0
  11. data/lib/tdriver/base/sut/controller.rb +1 -1
  12. data/lib/tdriver/base/sut/generic/behaviours/application.rb +89 -118
  13. data/lib/tdriver/base/sut/generic/behaviours/find.rb +67 -62
  14. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +296 -187
  15. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +7 -7
  16. data/lib/tdriver/base/sut/generic/commands/application.rb +366 -295
  17. data/lib/tdriver/base/sut/sut.rb +19 -3
  18. data/lib/tdriver/base/test_object/abstract.rb +41 -21
  19. data/lib/tdriver/base/test_object/adapter.rb +62 -9
  20. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +10 -6
  21. data/lib/tdriver/base/test_object/behaviours/test_object.rb +84 -47
  22. data/lib/tdriver/base/test_object/factory.rb +124 -68
  23. data/lib/tdriver/base/test_object/loader.rb +3 -4
  24. data/lib/tdriver/base/test_object/verification.rb +3 -3
  25. data/lib/tdriver/base/test_object/xml/adapter.rb +734 -0
  26. data/lib/tdriver/loader.rb +12 -0
  27. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +3 -2
  28. data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +14 -14
  29. data/lib/tdriver/report/report.rb +4 -8
  30. data/lib/tdriver/report/report_api.rb +9 -0
  31. data/lib/tdriver/report/report_crash_file_capture.rb +4 -4
  32. data/lib/tdriver/report/report_creator.rb +57 -35
  33. data/lib/tdriver/report/report_cucumber.rb +1 -1
  34. data/lib/tdriver/report/report_cucumber_listener.rb +5 -158
  35. data/lib/tdriver/report/report_cucumber_reporter.rb +7 -161
  36. data/lib/tdriver/report/report_execution_statistics.rb +4 -4
  37. data/lib/tdriver/report/report_file_capture.rb +5 -5
  38. data/lib/tdriver/report/report_grouping.rb +24 -22
  39. data/lib/tdriver/report/report_junit_xml.rb +5 -5
  40. data/lib/tdriver/report/report_test_case_run.rb +31 -22
  41. data/lib/tdriver/report/report_test_run.rb +107 -104
  42. data/lib/tdriver/report/report_writer.rb +150 -83
  43. data/lib/tdriver/tdriver.rb +147 -103
  44. data/lib/tdriver/util/common/boolean.rb +51 -0
  45. data/lib/tdriver/util/common/crc16.rb +110 -68
  46. data/lib/tdriver/util/common/hash.rb +63 -7
  47. data/lib/tdriver/util/common/kernel.rb +46 -1
  48. data/lib/tdriver/util/common/loader.rb +1 -0
  49. data/lib/tdriver/util/common/object.rb +20 -8
  50. data/lib/tdriver/util/common/string.rb +21 -2
  51. data/lib/tdriver/util/logger/logger.rb +4 -4
  52. data/lib/tdriver/util/parameter/loader.rb +2 -19
  53. data/lib/tdriver/util/parameter/parameter.rb +874 -177
  54. data/lib/tdriver/util/plugin/service.rb +1 -1
  55. data/lib/tdriver/util/recorder/recorder.rb +7 -1
  56. data/lib/tdriver/util/xml/abstraction.rb +13 -1
  57. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +63 -10
  58. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +8 -2
  59. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +16 -3
  60. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +36 -32
  61. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +19 -22
  62. data/lib/tdriver/util/xml/xml.rb +147 -32
  63. data/lib/tdriver/verify/verify.rb +1112 -289
  64. data/lib/tdriver/version.rb +1 -1
  65. data/xml/templates/generic.xml +14 -2
  66. metadata +51 -24
  67. data/lib/tdriver/util/parameter/parameter_hash.rb +0 -104
  68. data/lib/tdriver/util/parameter/parameter_new.rb +0 -869
  69. data/lib/tdriver/util/parameter/parameter_template.rb +0 -120
  70. data/lib/tdriver/util/parameter/parameter_user_api.rb +0 -116
  71. data/lib/tdriver/util/parameter/parameter_xml.rb +0 -261
@@ -25,130 +25,174 @@
25
25
  #
26
26
  # Please see class documentation for more info
27
27
 
28
- # initializing TDriver
28
+ # initializing tdriver
29
29
  $TDRIVER_INITIALIZED = false
30
30
 
31
- # unicode support
32
- $KCODE = 'u'
31
+ # unicode support for 1.8.7
32
+ $KCODE = 'u' if RUBY_VERSION < "1.9"
33
33
 
34
34
  # prevent Object#id Warnings
35
35
  Object.send( :undef_method, :id ) if Object.respond_to?( :id )
36
36
 
37
- # TODO: document me
38
- def require_relative( file )
39
-
40
- # require with full expanded path
41
- require File.expand_path( File.join( File.dirname( caller.first.scan( /(.*?):/ ).to_s ), file ) )
42
-
43
- end
44
-
45
37
  # load all required components
46
38
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'loader.rb' ) )
47
39
 
48
40
  module TDriver
49
41
 
50
- # Function to create and (or if already created re-) connect SUT object
51
- # === params
52
- # hash:: Defines SUT type, identification attributes etc.
53
- # :type:: Valid values are :S60 (for Series 60) and :QT (for QT)
54
- # :id:: Valid id that can be matched in tdriver_parameters.xml
55
- # === raises
56
- # ArgumentError:: Wrong argument Type '%s' (Expected Hash)
57
- # ArgumentError:: SUT type not defined
58
- # ArgumentError:: SUT type '%s' not supported
59
- # ArgumentError:: Sut id not given
60
- # MobyUtil::ParameterFileNotFoundError:: if paramter file (tdriver_parameters.xml in TDriver home directory) is not found
61
- # === returns
62
- # Object:: Object that SutFactory returns
63
- # === example
64
- # @sut = TDriver.connect_sut(:Id =>'sut_qt') # for qt, id in configuration file sut_qt
65
- def self.connect_sut( sut_attributes = {} )
66
-
67
- MobyBase::SUTFactory.instance.make( sut_attributes )
68
-
69
- end
70
-
71
- # Function to disconnect SUT object.
72
- # === params
73
- # hash:: Defines SUT type, identification attributes etc.
74
- # :id:: Valid id that can be matched in tdriver_parameters.xml and is already connected
75
- # === raises
76
- # ArgumentError:: Not connected to device 'id' if not connected at all / device already disconnected
77
- # ArgumentError:: Sut id not given
78
- # === returns
79
- # Object:: SUT object
80
- # === example
81
- # @sut = TDriver.disconnect_sut(:Id =>'sut_qt') # for qt, should be connected already
82
- def self.disconnect_sut( sut_attributes = {} )
83
-
84
- MobyBase::SUTFactory.instance.disconnect_sut( sut_attributes )
85
-
86
- end
87
-
88
- # Function to reboot SUT object.
89
- # === params
90
- # hash:: Defines SUT type, identification attributes etc.
91
- # :id:: Valid id that can be matched in tdriver_parameters.xml and is already connected
92
- # === raises
93
- # ArgumentError:: Not connected to device 'id' if not connected at all / device already disconnected
94
- # ArgumentError:: Sut id not given
95
- # === example
96
- # @sut = TDriver.reboot_sut(:Id =>'sut_qt') # for Qt, should be connected already
97
- def self.reboot_sut( sut_attributes = {} )
98
-
99
- MobyBase::SUTFactory.instance.reboot_sut( sut_attributes )
100
-
101
- end
102
-
103
- # Wrapper for SUT functionality. For documentation, please see TDriver::connect_sut
104
- def self.sut( *args )
105
-
106
- self.connect_sut( *args )
107
-
108
- end
109
-
110
- # Wrapper for MobyUtil::Parameter.configured_suts to retrieve all configured sut names
111
- def self.suts
112
-
113
- $parameters.configured_suts
114
-
115
- end
116
-
117
- # Wrapper for MobyUtil::ParameterUserAPI class with methods e.g. [] and []=, files and load_xml etc.
118
- def self.parameter( *arguments )
119
-
120
- if arguments.count == 0
42
+ class << self
43
+
44
+ # Function to create and (or if already created re-) connect SUT object
45
+ # === params
46
+ # hash:: Defines SUT type, identification attributes etc.
47
+ # :id:: Valid id that can be matched in tdriver_parameters.xml
48
+ # === raises
49
+ # ArgumentError:: Wrong argument Type '%s' (Expected Hash)
50
+ # ArgumentError:: SUT type not defined
51
+ # ArgumentError:: SUT type '%s' not supported
52
+ # ArgumentError:: Sut id not given
53
+ # MobyUtil::ParameterFileNotFoundError:: if paramter file (tdriver_parameters.xml in TDriver home directory) is not found
54
+ # === returns
55
+ # Object:: Object that SutFactory returns
56
+ # === example
57
+ # @sut = TDriver.connect_sut(:Id =>'sut_qt') # for qt, id in configuration file sut_qt
58
+ def connect_sut( sut_attributes = {} )
59
+
60
+ MobyBase::SUTFactory.instance.make( sut_attributes )
61
+
62
+ end
63
+
64
+ # Function to disconnect SUT object.
65
+ # === params
66
+ # hash:: Defines SUT type, identification attributes etc.
67
+ # :id:: Valid id that can be matched in tdriver_parameters.xml and is already connected
68
+ # === raises
69
+ # ArgumentError:: Not connected to device 'id' if not connected at all / device already disconnected
70
+ # ArgumentError:: Sut id not given
71
+ # === returns
72
+ # Object:: SUT object
73
+ # === example
74
+ # @sut = TDriver.disconnect_sut(:Id =>'sut_qt') # for qt, should be connected already
75
+ def disconnect_sut( sut_attributes = {} )
76
+
77
+ MobyBase::SUTFactory.instance.disconnect_sut( sut_attributes )
78
+
79
+ end
80
+
81
+ # Function to reboot SUT object.
82
+ # === params
83
+ # hash:: Defines SUT type, identification attributes etc.
84
+ # :id:: Valid id that can be matched in tdriver_parameters.xml and is already connected
85
+ # === raises
86
+ # ArgumentError:: Not connected to device 'id' if not connected at all / device already disconnected
87
+ # ArgumentError:: Sut id not given
88
+ # === example
89
+ # @sut = TDriver.reboot_sut(:Id =>'sut_qt') # for Qt, should be connected already
90
+ def reboot_sut( sut_attributes = {} )
91
+
92
+ MobyBase::SUTFactory.instance.reboot_sut( sut_attributes )
93
+
94
+ end
95
+
96
+ # Wrapper for SUT functionality. For documentation, please see TDriver::connect_sut
97
+ def sut( *args )
98
+
99
+ connect_sut( *args )
100
+
101
+ end
102
+
103
+ # Wrapper for TDriver::Parameter.configured_suts to retrieve all configured sut names
104
+ def suts
105
+
106
+ $parameters.configured_suts
107
+
108
+ end
109
+
110
+ # Wrapper for TDriver::ParameterUserAPI class with methods e.g. [] and []=, files and load_xml etc.
111
+ def parameter( *arguments )
112
+
113
+ if arguments.count == 0
114
+
115
+ $parameters_api
116
+
117
+ else
118
+
119
+ $parameters_api[ *arguments ]
120
+
121
+ end
122
+
123
+ end
124
+
125
+ # TODO: document me
126
+ def state_object( options )
127
+
128
+ # create state object with given options
129
+ MobyBase::StateObject.new( options )
130
+
131
+ end
121
132
 
122
- $parameters_api
123
-
124
- else
133
+ # == nodoc
134
+ # Wrapper for MobyUtil::Logger class
135
+ def logger
136
+
137
+ $logger
138
+
139
+ end
140
+
141
+ # == nodoc
142
+ # TODO: document me
143
+ def config_dir
144
+
145
+ if ENV['TDRIVER_HOME']
146
+
147
+ config_dir = ENV['TDRIVER_HOME']
148
+
149
+ elsif MobyUtil::EnvironmentHelper.windows?
150
+
151
+ config_dir = "c:/tdriver"
152
+
153
+ else
154
+
155
+ config_dir = "/etc/tdriver"
156
+
157
+ end
158
+
159
+ File.expand_path( config_dir )
160
+
161
+ end
125
162
 
126
- $parameters_api[ *arguments ]
163
+ # == nodoc
164
+ # TODO: document me
165
+ def library_dir
166
+
167
+ File.expand_path( File.dirname( __FILE__ ) )
127
168
 
128
169
  end
170
+
171
+ private
129
172
 
130
- end
173
+ # TODO: document me
174
+ def initialize_tdriver
175
+
176
+ # initialize parameters
177
+ $parameters.init
131
178
 
132
- # Wrapper for MobyUtil::Logger class
133
- def self.logger
179
+ # enable logging engine
180
+ $logger.enable_logging
134
181
 
135
- $logger
136
-
137
- end
182
+ # set xml cache buffer size
183
+ MobyUtil::XML.buffer_size = $parameters[ :xml_cache_buffer_size, 10 ].to_i
138
184
 
139
- # enable hooking for performance measurement & debug logging
140
- TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
185
+ # initialization done, everything is ready
186
+ $TDRIVER_INITIALIZED = true
141
187
 
142
- end # TDriver
188
+ end
143
189
 
144
- # initialize parameters
145
- $parameters.init
190
+ end
146
191
 
147
- # enable logging engine
148
- $logger.enable_logging
192
+ # enable hooking for performance measurement & debug logging
193
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
149
194
 
150
- # reporting modules
151
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'report/report.rb' ) ) if MobyUtil::Parameter[ :enable_reporter, 'true' ]=='true'
195
+ # initialize TDriver
196
+ initialize_tdriver
152
197
 
153
- # initialization done, everything is ready
154
- $TDRIVER_INITIALIZED = true
198
+ end # TDriver
@@ -0,0 +1,51 @@
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
+ # extend Ruby TrueClass and FalseClass class functionality
21
+ class TrueClass
22
+
23
+ def true?
24
+
25
+ /^true$/i.match( self.to_s ) != nil
26
+
27
+ end
28
+
29
+ def false?
30
+
31
+ false
32
+
33
+ end
34
+
35
+ end
36
+
37
+ class FalseClass
38
+
39
+ def true?
40
+
41
+ false
42
+
43
+ end
44
+
45
+ def false?
46
+
47
+ /^false$/i.match( self.to_s ) != nil
48
+
49
+ end
50
+
51
+ end
@@ -17,84 +17,126 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
- module CRC
21
-
22
- class Crc16
20
+ module TDriver
23
21
 
24
- @@CCITT_16 = [
25
- 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
26
- 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
27
- 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
28
- 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
29
- 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
30
- 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
31
- 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
32
- 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
33
- 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
34
- 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
35
- 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
36
- 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
37
- 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
38
- 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
39
- 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
40
- 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
41
- 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
42
- 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
43
- 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
44
- 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
45
- 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
46
- 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
47
- 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
48
- 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
49
- 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
50
- 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
51
- 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
52
- 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
53
- 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
54
- 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
55
- 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
56
- 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
57
- ]
58
-
59
- @@IBM_16 = [
60
- 0x0000, 0x1081, 0x2102, 0x3183,
61
- 0x4204, 0x5285, 0x6306, 0x7387,
62
- 0x8408, 0x9489, 0xa50a, 0xb58b,
63
- 0xc60c, 0xd68d, 0xe70e, 0xf78f
64
- ]
65
-
66
- def self.crc16( buf, crc = 0 )
67
- buf.each_byte{ | x | crc = ( ( crc << 8 ) ^ @@CCITT_16[ ( crc >> 8 ) ^ x ] ) & 0xffff }
68
- crc
69
- end
22
+ class Checksum
70
23
 
71
- # use native crc calculation routines if available; using native crc routines increase performance ~10%
72
- if defined?( TDriver::NativeExtensions )
24
+ class << self
73
25
 
74
- def self.crc16_ibm( buf, crc = 0 )
26
+ private
27
+
28
+ def initialize_class
29
+
30
+ @CCITT_16 = [
31
+ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
32
+ 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
33
+ 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
34
+ 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
35
+ 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
36
+ 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
37
+ 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
38
+ 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
39
+ 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
40
+ 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
41
+ 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
42
+ 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
43
+ 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
44
+ 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
45
+ 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
46
+ 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
47
+ 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
48
+ 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
49
+ 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
50
+ 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
51
+ 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
52
+ 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
53
+ 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
54
+ 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
55
+ 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
56
+ 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
57
+ 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
58
+ 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
59
+ 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
60
+ 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
61
+ 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
62
+ 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
63
+ ]
75
64
 
76
- TDriver::NativeExtensions::CRC.crc16_ibm( buf )
65
+ @IBM_16 = [
66
+ 0x0000, 0x1081, 0x2102, 0x3183,
67
+ 0x4204, 0x5285, 0x6306, 0x7387,
68
+ 0x8408, 0x9489, 0xa50a, 0xb58b,
69
+ 0xc60c, 0xd68d, 0xe70e, 0xf78f
70
+ ]
77
71
 
78
72
  end
79
73
 
80
- else
81
-
82
- # fallback when native extensions are not supported (e.g. jruby)
83
- def self.crc16_ibm( buf, crc = 0 )
84
- crc = 0xffff
85
- buf.each_byte do | c |
86
- crc = ( ( crc >> 4 ) & 0x0fff ) ^ @@IBM_16[ ( ( crc ^ c ) & 15 ) ]
87
- c >>= 4
88
- crc = ( ( crc >> 4 ) & 0x0fff ) ^ @@IBM_16[ ( ( crc ^ c ) & 15 ) ]
89
- end
90
- ~crc & 0xffff
74
+ public
75
+
76
+ # CRC-16-CCITT
77
+ def crc16( buf, crc = 0 )
78
+
79
+ # calculate the checksum
80
+ buf.each_byte{ | x | crc = ( ( crc << 8 ) ^ @CCITT_16[ ( crc >> 8 ) ^ x ] ) & 0xffff }
81
+
82
+ # result
83
+ crc
84
+
85
+ end # crc16
86
+
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
+ # IBM-CRC-16: fallback when native extensions are not supported (e.g. jruby)
91
+ def crc16_ibm( buf, crc = 0xffff )
92
+
93
+ buf.each_byte do | c |
94
+
95
+ crc = ( ( crc >> 4 ) & 0x0fff ) ^ @IBM_16[ ( ( crc ^ c ) & 15 ) ]
96
+
97
+ crc = ( ( crc >> 4 ) & 0x0fff ) ^ @IBM_16[ ( ( crc ^ ( c >> 4 ) ) & 15 ) ]
98
+
99
+ end
100
+
101
+ # result
102
+ ~crc & 0xffff
103
+
104
+ end # crc16_ibm
105
+
106
+ end # unless
107
+
108
+ end # self
109
+
110
+ # enable hooking for performance measurement & debug logging
111
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
112
+
113
+ # initialize the class
114
+ initialize_class
115
+
116
+ end
117
+
118
+ end
119
+
120
+ # deprecated
121
+ module CRC
122
+
123
+ class Crc16
124
+
125
+ class << self
126
+
127
+ def method_missing( id, *args )
128
+
129
+ #warn_caller "$1:$2 warning: deprecated method, use TDriver::Checksum##{ id.to_s } instead of CRC::Crc16##{ id.to_s }"
130
+
131
+ TDriver::Checksum.__send__( id, *args )
132
+
91
133
  end
92
134
 
93
135
  end
94
136
 
95
137
  # enable hooking for performance measurement & debug logging
96
138
  TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
97
-
98
- end # Crc16
99
-
100
- end # CRC
139
+
140
+ end
141
+
142
+ end