testability-driver 1.2.1 → 1.3.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.
Files changed (125) hide show
  1. data/bin/tdriver-devtools +0 -0
  2. data/ext/native_extensions.c +165 -6
  3. data/lib/tdriver-devtools/behaviour/old/xml/update +0 -0
  4. data/lib/tdriver-devtools/behaviour/xml/generate.rb +0 -0
  5. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +15 -1
  6. data/lib/tdriver-devtools/doc/update +0 -0
  7. data/lib/tdriver-devtools/doc/xslt/template.xsl +24 -14
  8. data/lib/tdriver-devtools/doc/xslt/update +0 -0
  9. data/lib/tdriver-devtools/tdriver-devtools.rb +0 -0
  10. data/lib/tdriver-devtools/tests/feature_tests/update +0 -0
  11. data/lib/tdriver/base/behaviour/{behaviour.rb → abstract.rb} +3 -6
  12. data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
  13. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +2 -2
  14. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +47 -37
  15. data/lib/tdriver/base/behaviour/factory.rb +260 -382
  16. data/lib/tdriver/base/behaviour/loader.rb +22 -4
  17. data/lib/tdriver/base/controller/abstraction.rb +56 -0
  18. data/lib/tdriver/base/controller/loader.rb +21 -0
  19. data/lib/tdriver/base/loader.rb +3 -1
  20. data/lib/tdriver/base/sut/controller.rb +91 -74
  21. data/lib/tdriver/base/sut/factory.rb +8 -8
  22. data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
  23. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +116 -96
  24. data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
  25. data/lib/tdriver/base/sut/sut.rb +10 -8
  26. data/lib/tdriver/base/test_object/abstract.rb +25 -24
  27. data/lib/tdriver/base/test_object/adapter.rb +67 -44
  28. data/lib/tdriver/base/test_object/behaviours/test_object.rb +79 -20
  29. data/lib/tdriver/base/test_object/factory.rb +45 -15
  30. data/lib/tdriver/base/test_object/xml/adapter.rb +80 -57
  31. data/lib/tdriver/env.rb +0 -0
  32. data/lib/tdriver/loader.rb +0 -0
  33. data/lib/tdriver/matti.rb +0 -0
  34. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +1 -0
  35. data/lib/tdriver/report/report.rb +2 -1
  36. data/lib/tdriver/report/report_crash_file_capture.rb +12 -0
  37. data/lib/tdriver/report/report_creator.rb +6 -2
  38. data/lib/tdriver/report/report_execution_statistics.rb +27 -11
  39. data/lib/tdriver/report/report_graph_generator.rb +59 -0
  40. data/lib/tdriver/report/report_test_case_run.rb +34 -2
  41. data/lib/tdriver/report/report_writer.rb +12 -0
  42. data/lib/tdriver/tdriver.rb +12 -1
  43. data/lib/tdriver/util/agent/loader.rb +22 -0
  44. data/lib/tdriver/util/agent/service.rb +107 -0
  45. data/lib/tdriver/util/common/crc16.rb +17 -10
  46. data/lib/tdriver/util/common/hash.rb +4 -1
  47. data/lib/tdriver/util/common/kernel.rb +11 -0
  48. data/lib/tdriver/util/common/numeric.rb +48 -0
  49. data/lib/tdriver/util/common/object.rb +5 -2
  50. data/lib/tdriver/util/common/string.rb +8 -1
  51. data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
  52. data/lib/tdriver/util/filters/loader.rb +29 -0
  53. data/lib/tdriver/util/fixture/loader.rb +22 -0
  54. data/lib/tdriver/util/fixture/service.rb +157 -0
  55. data/lib/tdriver/util/loader.rb +8 -2
  56. data/lib/tdriver/util/logger/logger.rb +12 -6
  57. data/lib/tdriver/util/other/config.rb +0 -0
  58. data/lib/tdriver/util/parameter/parameter.rb +221 -152
  59. data/lib/tdriver/util/plugin/error.rb +0 -0
  60. data/lib/tdriver/util/video/camera_linux.rb +36 -22
  61. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +3 -13
  62. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +13 -8
  63. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +51 -9
  64. data/lib/tdriver/util/xml/xml.rb +4 -2
  65. data/lib/tdriver/verify/verify.rb +280 -621
  66. data/lib/tdriver/version.rb +1 -1
  67. data/xml/behaviours/generic.xml +34 -0
  68. data/xml/templates/generic.xml +20 -3
  69. metadata +168 -240
  70. data/lib/tdriver-devtools/tests/feature_tests/output/application_closable_0x3f.feature +0 -10
  71. data/lib/tdriver-devtools/tests/feature_tests/output/application_close.feature +0 -15
  72. data/lib/tdriver-devtools/tests/feature_tests/output/application_environment.feature +0 -10
  73. data/lib/tdriver-devtools/tests/feature_tests/output/application_executable_name.feature +0 -10
  74. data/lib/tdriver-devtools/tests/feature_tests/output/application_uid.feature +0 -10
  75. data/lib/tdriver-devtools/tests/feature_tests/output/created.rid +0 -1
  76. data/lib/tdriver-devtools/tests/feature_tests/output/find_find.feature +0 -15
  77. data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash.feature +0 -10
  78. data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash_images.feature +0 -15
  79. data/lib/tdriver-devtools/tests/feature_tests/output/sut_application.feature +0 -15
  80. data/lib/tdriver-devtools/tests/feature_tests/output/sut_capture_screen.feature +0 -10
  81. data/lib/tdriver-devtools/tests/feature_tests/output/sut_child.feature +0 -10
  82. data/lib/tdriver-devtools/tests/feature_tests/output/sut_clear_verify_blocks.feature +0 -10
  83. data/lib/tdriver-devtools/tests/feature_tests/output/sut_connect.feature +0 -10
  84. data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order.feature +0 -10
  85. data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order_0x3d.feature +0 -10
  86. data/lib/tdriver-devtools/tests/feature_tests/output/sut_current_application_id.feature +0 -15
  87. data/lib/tdriver-devtools/tests/feature_tests/output/sut_disconnect.feature +0 -10
  88. data/lib/tdriver-devtools/tests/feature_tests/output/sut_dump_count.feature +0 -15
  89. data/lib/tdriver-devtools/tests/feature_tests/output/sut_freeze.feature +0 -10
  90. data/lib/tdriver-devtools/tests/feature_tests/output/sut_frozen.feature +0 -10
  91. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_application_id.feature +0 -10
  92. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_object.feature +0 -10
  93. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_operator_data.feature +0 -10
  94. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_ui_dump.feature +0 -15
  95. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_user_information.feature +0 -10
  96. data/lib/tdriver-devtools/tests/feature_tests/output/sut_input.feature +0 -15
  97. data/lib/tdriver-devtools/tests/feature_tests/output/sut_parameter.feature +0 -15
  98. data/lib/tdriver-devtools/tests/feature_tests/output/sut_press_key.feature +0 -10
  99. data/lib/tdriver-devtools/tests/feature_tests/output/sut_received_data.feature +0 -10
  100. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh.feature +0 -20
  101. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_timeout.feature +0 -15
  102. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_tries.feature +0 -15
  103. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_ui_dump.feature +0 -20
  104. data/lib/tdriver-devtools/tests/feature_tests/output/sut_run.feature +0 -10
  105. data/lib/tdriver-devtools/tests/feature_tests/output/sut_sent_data.feature +0 -10
  106. data/lib/tdriver-devtools/tests/feature_tests/output/sut_state.feature +0 -10
  107. data/lib/tdriver-devtools/tests/feature_tests/output/sut_translate.feature +0 -30
  108. data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_type.feature +0 -10
  109. data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_version.feature +0 -10
  110. data/lib/tdriver-devtools/tests/feature_tests/output/sut_unfreeze.feature +0 -10
  111. data/lib/tdriver-devtools/tests/feature_tests/output/sut_update.feature +0 -10
  112. data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_always.feature +0 -20
  113. data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_blocks.feature +0 -10
  114. data/lib/tdriver-devtools/tests/feature_tests/output/sut_x_path.feature +0 -10
  115. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data.feature +0 -10
  116. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_0x3d.feature +0 -10
  117. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_crc.feature +0 -10
  118. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_down.feature +0 -10
  119. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_status.feature +0 -10
  120. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_up.feature +0 -10
  121. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_reset.feature +0 -10
  122. data/lib/tdriver-devtools/tests/feature_tests/output/verification_test_object_exists_0x3f.feature +0 -15
  123. data/lib/tdriver/base/behaviour/factory_new.rb +0 -409
  124. data/lib/tdriver/base/test_object/identificator.rb +0 -518
  125. data/lib/tdriver/util/filters/dynamic_attributes.rb +0 -189
@@ -34,7 +34,14 @@ class String
34
34
 
35
35
  def not_empty( message = "String must not be empty", exception = ArgumentError )
36
36
 
37
- raise exception, message, caller if empty?
37
+ if empty?
38
+
39
+ # replace macros
40
+ #message.gsub!( '$1', self.inspect )
41
+
42
+ raise exception, message, caller
43
+
44
+ end
38
45
 
39
46
  self
40
47
 
@@ -0,0 +1,121 @@
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 AttributeFilter
23
+
24
+ # TODO: document me
25
+ def self.add_attribute( attribute )
26
+
27
+ _attribute = attribute.to_s
28
+
29
+ unless @attributes.include?( _attribute )
30
+
31
+ @attributes << _attribute.to_s
32
+
33
+ @attributes_string = @attributes.join( ',' )
34
+
35
+ yield if block_given?
36
+
37
+ end
38
+
39
+ end
40
+
41
+ # TODO: document me
42
+ def self.add_attributes( attributes )
43
+
44
+ updated_list = @attributes | attributes.collect{ | value | value.to_s }
45
+
46
+ unless updated_list == @attributes
47
+
48
+ @attributes = updated_list
49
+
50
+ @attributes_string = @attributes.join( ',' )
51
+
52
+ yield if block_given?
53
+
54
+ end
55
+
56
+ end
57
+
58
+ # TODO: document me
59
+ def self.has_attribute?( attribute )
60
+
61
+ @attributes.include?( attribute.to_s )
62
+
63
+ end
64
+
65
+ # TODO: document me
66
+ def self.filter_string
67
+
68
+ @attributes_string
69
+
70
+ end
71
+
72
+ # TODO: document me
73
+ def self.reset
74
+
75
+ @attributes_string = ""
76
+
77
+ @attributes = []
78
+
79
+ end
80
+
81
+ class << self
82
+
83
+ private
84
+
85
+ # TODO: document me
86
+ def initialize_class
87
+
88
+ @attributes_string = ""
89
+
90
+ @attributes = []
91
+
92
+ end
93
+
94
+ end
95
+
96
+ # initialize attribute filter class
97
+ initialize_class
98
+
99
+ # enable hooking for performance measurement & debug logging
100
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
101
+
102
+ end # AttributeFilter
103
+
104
+ end # TDriver
105
+
106
+ # for backwards compatibility
107
+ module MobyUtil
108
+
109
+ class DynamicAttributeFilter
110
+
111
+ def self.instance
112
+
113
+ warn_caller '$1:$2 warning: deprecated class MobyUtil::DynamicAttributeFilter; please use static TDriver::AttributeFilter class instead'
114
+
115
+ TDriver::AttributeFilter
116
+
117
+ end
118
+
119
+ end # DynamicAttributeFilter
120
+
121
+ end # MobyUtil
@@ -0,0 +1,29 @@
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
+ [
21
+
22
+ # dynamic attribute filter module
23
+ 'attribute_filter.rb'
24
+
25
+ ].each{ | filename |
26
+
27
+ require File.expand_path( File.join( File.dirname( __FILE__ ), filename ) )
28
+
29
+ }
@@ -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
+ # fixture services module
21
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'service.rb' ) )
22
+
@@ -0,0 +1,157 @@
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 FixturePluginService
23
+
24
+ # remove all public methods
25
+ instance_methods.each{ | method |
26
+
27
+ undef_method( method ) unless method =~ /^__|^(methods|inspect|to_s|class|nil?|extend)/
28
+
29
+ }
30
+
31
+ # TODO: document me
32
+ def initialize( options = {} )
33
+
34
+ # verify that options is type of hash
35
+ options.check_type Hash, 'wrong argument type $1 for fixture service options (expected $2)'
36
+
37
+ # verify that name is defined in options hash
38
+ options.require_key :name
39
+
40
+ options.require_key :arguments
41
+
42
+ options.require_key :target
43
+
44
+ options.require_key :configuration
45
+
46
+ # store given options
47
+ @options = options
48
+
49
+ # store caller backtrace
50
+ @caller = caller
51
+
52
+ self
53
+
54
+ end
55
+
56
+ def method_missing( fixture_method, arguments = {} )
57
+
58
+ begin
59
+
60
+ arguments.check_type Hash, 'wrong argument type $1 for fixture method arguments (expected $2)'
61
+
62
+ result = nil
63
+
64
+ _async = @options[ :arguments ][ :async ].true?
65
+
66
+ _target = @options[ :target ]
67
+
68
+ _fixture_name = @options[ :name ].to_s
69
+
70
+ _fixture_method = fixture_method.to_s
71
+
72
+ _sut = _target.sut
73
+
74
+ params = { :name => _fixture_name.to_s, :command_name => _fixture_method, :parameters => arguments, :async => _async }
75
+
76
+ if _target.sut?
77
+
78
+ params.merge!( :application_id => nil, :object_id => _target.id, :object_type => :Application )
79
+
80
+ else
81
+
82
+ params.merge!( :application_id => _target.get_application_id, :object_id => _target.id, :object_type => _target.attribute( 'objectType' ).to_sym )
83
+
84
+ end
85
+
86
+ result = _sut.execute_command( MobyCommand::Fixture.new( params ) )
87
+
88
+ rescue
89
+
90
+ $logger.behaviour "FAIL;Failed when calling fixture #{ @options[:arguments ].inspect } with name #{ _fixture_name.inspect }, method #{ _fixture_method.inspect } and parameters #{ arguments.inspect }.;#{ _target.id.to_s };sut;{};fixture;"
91
+
92
+ raise MobyBase::BehaviourError.new("Fixture", "Failed when calling fixture #{ @options[:arguments ].inspect } with name #{ _fixture_name.inspect }, method #{ _fixture_method.inspect } and parameters #{ arguments.inspect }")
93
+
94
+ end
95
+
96
+ $logger.behaviour "PASS;The fixture command (#{ @options[ :arguments ]}) was executed successfully with name #{ _fixture_name.inspect }, method #{ _fixture_method.inspect } and parameters #{ arguments.inspect }.;#{ _target.id.to_s };sut;{};fixture;"
97
+
98
+ result
99
+
100
+ end
101
+
102
+ end # FixturePluginService
103
+
104
+ class FixtureService
105
+
106
+ # remove all public methods
107
+ instance_methods.each{ | method |
108
+
109
+ undef_method( method ) unless method =~ /^__|^(methods|inspect|to_s|class|nil?|extend)/
110
+
111
+ }
112
+
113
+ # TODO: document me
114
+ def initialize( options = {} )
115
+
116
+ # verify that options is type of hash
117
+ options.check_type Hash, 'wrong argument type $1 for fixture service options (expected $2)'
118
+
119
+ # verify that target object is defined in options hash
120
+ options.require_key :target
121
+
122
+ # store given options
123
+ @options = options
124
+
125
+ # store sut variable
126
+ @target = options[ :target ]
127
+
128
+ # store caller backtrace
129
+ @caller = caller
130
+
131
+ self
132
+
133
+ end
134
+
135
+ def method_missing( name, arguments = {} )
136
+
137
+ arguments.check_type Hash, 'wrong argument type $1 for fixture options (expected $2)'
138
+
139
+ _fixtures = $parameters[ @target.sut.id ][ :fixtures, {} ]
140
+
141
+ if _fixtures.has_key?( name )
142
+
143
+ FixturePluginService.new( :target => @target, :name => name, :arguments => arguments, :configuration => _fixtures[ name ] )
144
+
145
+ else
146
+
147
+ $logger.behaviour "FAIL;Failed to execute fixture due to #{ name.inspect } not foudn for #{ @target.sut.id.inspect }.;#{ @target.id.to_s };sut;{};fixture;"
148
+
149
+ raise MobyBase::BehaviourError.new( "Fixture", "Failed to execute fixture due to #{ name.to_s.inspect } not found for #{ @target.sut.id.inspect }" )
150
+
151
+ end
152
+
153
+ end
154
+
155
+ end # FixtureService
156
+
157
+ end # TDriver
@@ -37,8 +37,8 @@ require 'rubygems'
37
37
  # statistics module
38
38
  'statistics/statistics.rb',
39
39
 
40
- # dynamic attribute filter module
41
- 'filters/dynamic_attributes.rb',
40
+ # filter modules
41
+ 'filters/loader.rb',
42
42
 
43
43
  # plugin service modules
44
44
  'plugin/loader.rb',
@@ -61,6 +61,12 @@ require 'rubygems'
61
61
  # recorder and scripter modules
62
62
  'recorder/loader.rb',
63
63
 
64
+ # agent service command modules
65
+ 'agent/loader.rb',
66
+
67
+ # fixture service modules
68
+ 'fixture/loader.rb',
69
+
64
70
  # video capture/util modules
65
71
  'video/loader.rb',
66
72
 
@@ -452,10 +452,14 @@ module MobyUtil
452
452
  @logger_instance = get_logger( 'TDriver' )
453
453
 
454
454
  # create unique name for logfile or use default (TDriver.log)
455
- filename = ( MobyUtil::StringHelper.to_boolean( Parameter[ :logging_outputter_unique_filename ] ) ? "TDriver_#{ Time.now.to_i }.log" : "TDriver.log" )
455
+ if $parameters[ :logging_outputter_unique_filename, false ].true?
456
+ filename = "TDriver_#{ Time.now.to_i }.log"
457
+ else
458
+ filename = 'TDriver.log'
459
+ end
456
460
 
457
461
  # check if outputter is enabled
458
- if MobyUtil::StringHelper.to_boolean( Parameter[ :logging_outputter_enabled ] )
462
+ if $parameters[ :logging_outputter_enabled, false ].true?
459
463
 
460
464
  # create new outputter instance type of FileOutputter
461
465
  outputter = create_outputter(
@@ -470,7 +474,7 @@ module MobyUtil
470
474
  :filename => File.join( outputter_path, filename ),
471
475
 
472
476
  # append to or truncate file
473
- :trunc => MobyUtil::StringHelper.to_boolean( Parameter[ :logging_outputter_append ] ) == false,
477
+ :trunc => $parameters[ :logging_outputter_append, false ].false?,
474
478
 
475
479
  # logging level
476
480
  :level => logging_level
@@ -478,7 +482,7 @@ module MobyUtil
478
482
  )
479
483
 
480
484
  # set outputter log event write pattern
481
- set_outputter_pattern( outputter, Parameter[ :logging_outputter_pattern ] )
485
+ set_outputter_pattern( outputter, $parameters[ :logging_outputter_pattern, '%d [%c] [%l] %M' ] )
482
486
 
483
487
  # add outputter to logger instance
484
488
  add_outputter( @logger_instance, outputter )
@@ -486,14 +490,16 @@ module MobyUtil
486
490
  end
487
491
 
488
492
  # Add stdout outputter if set on configuration parameters
489
- if MobyUtil::StringHelper.to_boolean( Parameter[ :logging_stdout_outputter_enabled ] )
493
+ if $parameters[ :logging_stdout_outputter_enabled, false ].true?
490
494
  stdout_outputter = create_outputter(
491
495
  Log4r::StdoutOutputter, # outputter type
492
496
  "TDriver_LOG_stdout", # outputter name
493
497
  :level => logging_level # logging level
494
498
  )
495
- set_outputter_pattern( stdout_outputter, Parameter[ :logging_outputter_pattern ] )
499
+ set_outputter_pattern( stdout_outputter, $parameters[ :logging_outputter_pattern, '%d [%c] [%l] %M' ] )
500
+
496
501
  add_outputter( @logger_instance, stdout_outputter )
502
+
497
503
  end
498
504
 
499
505
  rescue
File without changes
@@ -427,6 +427,65 @@ module TDriver
427
427
 
428
428
  case element.name
429
429
 
430
+ when 'include'
431
+
432
+ directory = MobyUtil::FileHelper.expand_path( attributes[ 'directory' ] )
433
+
434
+ files_pattern = Regexp.new( attributes[ 'files' ] )
435
+
436
+ =begin
437
+ pattern_flags = attributes[ 'flags' ].to_s.each_char.inject( 0 ){ | flags, char |
438
+
439
+ case char
440
+
441
+ when /m/i
442
+
443
+ flags += Regexp::MULTILINE
444
+
445
+ when /i/i
446
+
447
+ flags += Regexp::IGNORECASE
448
+
449
+ when /x/i
450
+
451
+ flags += Regexp::EXTENDED
452
+
453
+ else
454
+
455
+ raise ArgumentError, "Invalid regular expression pattern flag #{ char.inspect } (expected: 'm', 'i' or 'x')"
456
+
457
+ end
458
+
459
+ }
460
+ =end
461
+
462
+ value = ParameterHash.new
463
+
464
+ included_files = []
465
+
466
+ # iterate each found file from given directory
467
+ Dir.glob( File.join( directory, '*' ) ).each do | file |
468
+
469
+ # and merge content of the file if filename matches with given files pattern
470
+ if File.basename( file ) =~ files_pattern
471
+
472
+ value.merge!( process_file( file, false ) )
473
+
474
+ included_files << file
475
+
476
+ end
477
+
478
+ end
479
+
480
+ # merge included values to results
481
+ results.merge!( value )
482
+
483
+ # store included files to :included_files value
484
+ name = "included_files"
485
+
486
+ # append to :included files value
487
+ value = ( results[ name.to_sym, [] ].concat( included_files ) ).compact.uniq
488
+
430
489
  when 'keymap'
431
490
 
432
491
  # use element name as parameter name ("keymap")
@@ -672,8 +731,12 @@ module TDriver
672
731
 
673
732
  end
674
733
 
675
- # apply global parameters to root level (e.g. MobyUtil::Parameter[ :logging_outputter_enabled ])
676
- @parameters.recursive_merge!( get_template( 'global' ) )
734
+ # apply global parameters to root level (e.g. TDriver::Parameter[ :logging_outputter_enabled ])
735
+ @parameters.recursive_merge!(
736
+
737
+ get_template( 'global' )
738
+
739
+ )
677
740
 
678
741
  # load and apply default parameter values
679
742
  load_default_parameters if options[ :load_default_parameters ] == true
@@ -694,7 +757,7 @@ module TDriver
694
757
  end
695
758
 
696
759
  # TODO: document me
697
- def process_file( filename )
760
+ def process_file( filename, root = true )
698
761
 
699
762
  begin
700
763
 
@@ -702,7 +765,9 @@ module TDriver
702
765
  file_content = load_file( filename )
703
766
 
704
767
  # parse file content and retrieve root element
705
- root_element = MobyUtil::XML.parse_string( file_content ).root
768
+ root_element = MobyUtil::XML.parse_string( file_content ) #.root
769
+
770
+ root_element = root_element.root if root == true
706
771
 
707
772
  # parse root element
708
773
  process_element( root_element )
@@ -766,192 +831,196 @@ module TDriver
766
831
 
767
832
  end # self
768
833
 
769
- # TODO: document me
770
- def self.parse_file( filename, reset_parameters = false )
834
+ class << self
771
835
 
772
- # check argument type for filename
773
- filename.check_type [ String ], 'wrong argument type $1 for filename argument (expected $2)'
836
+ # TODO: document me
837
+ def parse_file( filename, reset_parameters = false )
774
838
 
775
- # check argument type for filename
776
- reset_parameters.check_type [ TrueClass, FalseClass ], 'wrong argument type $1 for reset_parameters boolean argument (expected $2)'
839
+ # check argument type for filename
840
+ filename.check_type [ String ], 'wrong argument type $1 for filename argument (expected $2)'
777
841
 
778
- # reset parameter hash if requested
779
- @parameters.clear if reset_parameters == true
780
-
781
- # load and parse given file
782
- load_parameters_file( filename )
783
-
784
- end
785
-
786
- # TODO: document me
787
- def self.parse_string( source, merge_hashes = true )
788
-
789
- # check argument type for source
790
- source.check_type [ String ], 'wrong argument type $1 for source XML argument (expected $2)'
842
+ # check argument type for filename
843
+ reset_parameters.check_type [ TrueClass, FalseClass ], 'wrong argument type $1 for reset_parameters boolean argument (expected $2)'
791
844
 
792
- # check argument type for merge_hashes
793
- merge_hashes.check_type [ TrueClass, FalseClass ], 'wrong argument type $1 for merge_hashes argument (expected $2)'
845
+ # reset parameter hash if requested
846
+ @parameters.clear if reset_parameters == true
847
+
848
+ # load and parse given file
849
+ load_parameters_file( filename )
850
+
851
+ end
852
+
853
+ # TODO: document me
854
+ def parse_string( source, merge_hashes = true )
855
+
856
+ # check argument type for source
857
+ source.check_type [ String ], 'wrong argument type $1 for source XML argument (expected $2)'
858
+
859
+ # check argument type for merge_hashes
860
+ merge_hashes.check_type [ TrueClass, FalseClass ], 'wrong argument type $1 for merge_hashes argument (expected $2)'
861
+
862
+ # process xml string, returns hash as result
863
+ hash = process_string( source )
794
864
 
795
- # process xml string, returns hash as result
796
- hash = process_string( source )
865
+ if merge_hashes
866
+
867
+ @parameters.recursive_merge!( hash )
868
+
869
+ else
797
870
 
798
- if merge_hashes
871
+ @parameters.merge!( hash )
872
+
873
+ end
799
874
 
800
- @parameters.recursive_merge!( hash )
875
+ end
876
+
877
+ # TODO: document me
878
+ def clear
801
879
 
802
- else
803
-
804
- @parameters.merge!( hash )
880
+ @parameter_files.clear
881
+
882
+ @parameters.clear
805
883
 
806
884
  end
807
-
808
- end
809
-
810
- # TODO: document me
811
- def self.clear
812
-
813
- @parameter_files.clear
814
-
815
- @parameters.clear
816
-
817
- end
818
885
 
819
- # TODO: document me
820
- def self.files
821
-
822
- # return loaded parameter files list
823
- @parameter_files
824
-
825
- end
886
+ # TODO: document me
887
+ def files
888
+
889
+ # return loaded parameter files list
890
+ @parameter_files
891
+
892
+ end
826
893
 
827
- # TODO: document me
828
- def self.template_files
829
-
830
- # return loaded parameter files list
831
- @template_files
832
-
833
- end
894
+ # TODO: document me
895
+ def template_files
896
+
897
+ # return loaded parameter files list
898
+ @template_files
899
+
900
+ end
834
901
 
835
- # TODO: document me
836
- def self.has_key?( key )
837
-
838
- @parameters.has_key?( key )
839
-
840
- end
902
+ # TODO: document me
903
+ def has_key?( key )
904
+
905
+ @parameters.has_key?( key )
906
+
907
+ end
841
908
 
842
- # TODO: document me
843
- def self.has_value?( key )
844
-
845
- @parameters.has_value?( key )
846
-
847
- end
909
+ # TODO: document me
910
+ def has_value?( key )
911
+
912
+ @parameters.has_value?( key )
913
+
914
+ end
848
915
 
849
- # TODO: document me
850
- def self.keys
851
-
852
- @parameters.keys
853
-
854
- end
916
+ # TODO: document me
917
+ def keys
918
+
919
+ @parameters.keys
920
+
921
+ end
855
922
 
856
- # TODO: document me
857
- def self.values
858
-
859
- @parameters.values
860
-
861
- end
923
+ # TODO: document me
924
+ def values
925
+
926
+ @parameters.values
927
+
928
+ end
862
929
 
863
- # TODO: document me
864
- def self.[]( key, *default )
865
-
866
- @parameters[ key, *default ]
867
-
868
- end
930
+ # TODO: document me
931
+ def []( key, *default )
932
+
933
+ @parameters[ key, *default ]
934
+
935
+ end
869
936
 
870
- # TODO: document me
871
- def self.[]=( key, value )
872
-
873
- @parameters[ key ] = value
874
-
875
- end
937
+ # TODO: document me
938
+ def []=( key, value )
939
+
940
+ @parameters[ key ] = value
941
+
942
+ end
876
943
 
877
- # TODO: document me
878
- def self.fetch( key, *default, &block )
944
+ # TODO: document me
945
+ def fetch( key, *default, &block )
879
946
 
880
- @parameters.__send__( :[], key, *default, &block )
947
+ @parameters.__send__( :[], key, *default, &block )
881
948
 
882
- end
949
+ end
883
950
 
884
- # TODO: document me
885
- def self.if_found( key, &block )
951
+ # TODO: document me
952
+ def if_found( key, &block )
886
953
 
887
- @parameters.__send__( :if_found, key, &block )
954
+ @parameters.__send__( :if_found, key, &block )
888
955
 
889
- end
956
+ end
890
957
 
891
- # TODO: document me
892
- def self.delete( key )
893
-
894
- @parameters.delete( key )
895
-
896
- end
897
-
898
- # TODO: document me
899
- def self.inspect
900
-
901
- @parameters.inspect
902
-
903
- end
958
+ # TODO: document me
959
+ def delete( key )
960
+
961
+ @parameters.delete( key )
962
+
963
+ end
964
+
965
+ # TODO: document me
966
+ def inspect
967
+
968
+ @parameters.inspect
969
+
970
+ end
904
971
 
905
- # TODO: document me
906
- def self.templates
907
-
908
- @templates
909
-
910
- end
972
+ # TODO: document me
973
+ def templates
974
+
975
+ @templates
976
+
977
+ end
911
978
 
912
- def self.parameters
979
+ def parameters
913
980
 
914
- warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#hash instead"
915
-
916
- hash
981
+ warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#hash instead"
917
982
 
918
- end
983
+ hash
984
+
985
+ end
919
986
 
920
- def self.hash
921
-
922
- @parameters
987
+ def hash
923
988
 
924
- end
989
+ @parameters
990
+
991
+ end
925
992
 
926
- # TODO: document me
927
- def self.reset
993
+ # TODO: document me
994
+ def reset
928
995
 
929
- reset_hashes
930
-
931
- end
996
+ reset_hashes
997
+
998
+ end
932
999
 
933
- # TODO: document me
934
- def self.configured_suts
935
-
936
- @sut_list
937
-
938
- end
939
-
940
- # deprecated methods
941
- def self.reset_parameters
942
-
943
- warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#reset instead"
944
-
945
- reset
1000
+ # TODO: document me
1001
+ def configured_suts
1002
+
1003
+ @sut_list
1004
+
1005
+ end
946
1006
 
947
- end
1007
+ # deprecated methods
1008
+ def reset_parameters
1009
+
1010
+ warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#reset instead"
1011
+
1012
+ reset
1013
+
1014
+ end
1015
+
1016
+ # load parameter xml files
1017
+ def load_parameters_xml( filename, reset = false )
948
1018
 
949
- # load parameter xml files
950
- def self.load_parameters_xml( filename, reset = false )
1019
+ warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#parse_file instead"
951
1020
 
952
- warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#parse_file instead"
1021
+ parse_file( filename, reset )
953
1022
 
954
- parse_file( filename, reset )
1023
+ end
955
1024
 
956
1025
  end
957
1026