testability-driver 1.3.1 → 1.3.2

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 (45) hide show
  1. data/bin/start_app_perf +6 -6
  2. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +4 -4
  3. data/lib/tdriver-devtools/doc/xslt/template.xsl +103 -21
  4. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +1 -1
  5. data/lib/tdriver/base/command_data/loader.rb +6 -2
  6. data/lib/tdriver/base/loader.rb +21 -14
  7. data/lib/tdriver/base/state_object.rb +1 -1
  8. data/lib/tdriver/base/sut/controller.rb +8 -2
  9. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +103 -46
  10. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +2 -2
  11. data/lib/tdriver/base/sut/generic/behaviours/verification.rb +1 -1
  12. data/lib/tdriver/base/sut/generic/commands/application.rb +18 -278
  13. data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +1 -1
  14. data/lib/tdriver/base/sut/sut.rb +1 -1
  15. data/lib/tdriver/base/test_object/abstract.rb +1 -1
  16. data/lib/tdriver/base/test_object/adapter.rb +4 -1
  17. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +3 -3
  18. data/lib/tdriver/base/test_object/behaviours/test_object.rb +61 -24
  19. data/lib/tdriver/base/test_object/cache.rb +6 -4
  20. data/lib/tdriver/base/test_object/factory.rb +4 -2
  21. data/lib/tdriver/base/test_object/loader.rb +23 -14
  22. data/lib/tdriver/base/test_object/xml/abstraction.rb +63 -0
  23. data/lib/tdriver/base/test_object/xml/adapter.rb +4 -1
  24. data/lib/tdriver/report/report_test_run.rb +1 -1
  25. data/lib/tdriver/report/report_writer.rb +4 -3
  26. data/lib/tdriver/util/common/boolean.rb +10 -13
  27. data/lib/tdriver/util/common/environment.rb +8 -7
  28. data/lib/tdriver/util/common/hash.rb +5 -5
  29. data/lib/tdriver/util/common/numeric.rb +5 -5
  30. data/lib/tdriver/util/common/object.rb +3 -3
  31. data/lib/tdriver/util/common/retryable.rb +65 -2
  32. data/lib/tdriver/util/common/string.rb +4 -4
  33. data/lib/tdriver/util/database/access.rb +9 -11
  34. data/lib/tdriver/util/fixture/service.rb +54 -0
  35. data/lib/tdriver/util/localisation/localisation.rb +3 -2
  36. data/lib/tdriver/util/logger/logger.rb +55 -41
  37. data/lib/tdriver/util/parameter/parameter.rb +38 -7
  38. data/lib/tdriver/util/xml/abstraction.rb +8 -8
  39. data/lib/tdriver/util/xml/builder.rb +1 -1
  40. data/lib/tdriver/util/xml/xml.rb +11 -11
  41. data/lib/tdriver/verify/verify.rb +33 -36
  42. data/lib/tdriver/version.rb +1 -1
  43. data/xml/defaults/sut_generic.xml +1 -29
  44. data/xml/templates/generic.xml +28 -0
  45. metadata +48 -17
@@ -102,7 +102,7 @@ module MobyBehaviour
102
102
  =end
103
103
 
104
104
  # == description
105
- # Return all test object attributes
105
+ # Return all test object attributes. Please see [link="#GenericTestObject:[]"][][/link] method for alternative approach.
106
106
  # == returns
107
107
  # Hash
108
108
  # description: Test object attributes
@@ -160,12 +160,12 @@ module MobyBehaviour
160
160
  end
161
161
 
162
162
  # == description
163
- # Function returns a attribute of test object
163
+ # Function returns a attribute of test object. Please see [link="#GenericTestObject:[]"][][/link] method for alternative approach.
164
164
  #
165
165
  # == arguments
166
166
  # name
167
167
  # String
168
- # description: String definig the name of the attribute to get
168
+ # description: String defining the name of the attribute to get
169
169
  # example: "name"
170
170
  #
171
171
  # == returns
@@ -198,6 +198,41 @@ module MobyBehaviour
198
198
 
199
199
  end
200
200
 
201
+ # == description
202
+ # Wrapper method to returns one or all test object attributes. This method calls [link="#GenericTestObject:attribute"]attribute[/link] or [link="#GenericTestObject:attributes"]attributes[/link] depending on the given argument.
203
+ #
204
+ # == arguments
205
+ # name
206
+ # String
207
+ # description: Attribute name
208
+ # example: "attribute_name"
209
+ # NilClass
210
+ # description: Return all attributes
211
+ # example: nil
212
+ #
213
+ # == returns
214
+ # String
215
+ # description: Value of the attribute
216
+ # example: "value"
217
+ #
218
+ # Hash
219
+ # description: Hash of all attributes
220
+ # example: {:x=>"0", :y=>"0"}
221
+ #
222
+ def []( name = nil )
223
+
224
+ if name.nil?
225
+
226
+ attributes
227
+
228
+ else
229
+
230
+ attribute( name )
231
+
232
+ end
233
+
234
+ end
235
+
201
236
  # == description
202
237
  # Returns the parent test object for the current object in question, according to the UI object hierarchy. For getting the test object that was actually used
203
238
  # as the parent when the test object instance was created, see [link="#GenericTestObject:parent"]parent[/link] method.
@@ -221,7 +256,7 @@ module MobyBehaviour
221
256
  # retrieve parent element attributes
222
257
  parent_attributes = @test_object_adapter.test_object_element_attributes( parent_element )
223
258
 
224
- if self.get_application_id && parent_attributes[ 'type' ] != 'application'
259
+ if get_application_id && parent_attributes[ 'type' ] != 'application'
225
260
 
226
261
  parent = @sut.child(
227
262
 
@@ -288,7 +323,7 @@ module MobyBehaviour
288
323
  )
289
324
 
290
325
  # update childs if required, returns true or false
291
- update( xml_data )
326
+ update( xml_data ) unless @sut.use_find_objects
292
327
 
293
328
  nil
294
329
 
@@ -586,7 +621,7 @@ module MobyBehaviour
586
621
  #test_object.update( _xml_data )
587
622
  test_object.send( :update, _xml_data )
588
623
 
589
- }
624
+ } unless @sut.use_find_objects
590
625
 
591
626
  #end
592
627
 
@@ -605,9 +640,9 @@ module MobyBehaviour
605
640
  # disable optimizer for this call since it will not work
606
641
  @_enable_optimizer = false
607
642
 
608
- if sut_parameters[ :use_find_object, 'false' ] == 'true' and @sut.respond_to?( 'find_object' )
643
+ if @sut.use_find_objects == true
609
644
 
610
- sut_parameters[ :use_find_object ] = 'false'
645
+ @sut.use_find_objects = false
611
646
 
612
647
  @_enable_optimizer = true
613
648
 
@@ -620,7 +655,7 @@ module MobyBehaviour
620
655
  # TODO: document me
621
656
  def enable_optimizer
622
657
 
623
- sut_parameters[ :use_find_object ] = 'true' if @_enable_optimizer
658
+ @sut.use_find_objects = true if @_enable_optimizer
624
659
 
625
660
  @_enable_optimizer = false
626
661
 
@@ -804,25 +839,27 @@ module MobyBehaviour
804
839
  # ?
805
840
  def deactivate
806
841
 
807
- return if !@_active
842
+ if @_active
808
843
 
809
- @_active = false
844
+ @_active = false
810
845
 
811
- # iterate through all test objects child test objects
812
- @child_object_cache.each_object{ | test_object |
813
-
814
- # deactivate test object
815
- #test_object.deactivate
816
-
817
- test_object.instance_exec{ deactivate }
818
-
819
- }
846
+ # iterate through all test objects child test objects
847
+ @child_object_cache.each_object{ | test_object |
848
+
849
+ # deactivate test object
850
+ test_object.__send__( :deactivate )
851
+
852
+ }
853
+
854
+ # remove test objects from cache
855
+ @child_object_cache.remove_objects
856
+
857
+ # remove from parent objects children objects cache
858
+ @parent.instance_variable_get( :@child_object_cache ).remove_object( self )
820
859
 
821
- # remove test objects from children objects cache
822
- @child_object_cache.remove_objects
860
+ nil
823
861
 
824
- # remove from parent objects children objects cache
825
- @parent.instance_variable_get( :@child_object_cache ).remove_object( self )
862
+ end
826
863
 
827
864
  end
828
865
 
@@ -95,7 +95,9 @@ module TDriver
95
95
  test_object_hash = test_object.hash
96
96
 
97
97
  if @objects.has_key?( test_object_hash )
98
+
98
99
  warn( "warning: Test object (#{ test_object_hash }) already exists in cache" )
100
+
99
101
  end
100
102
 
101
103
  @objects[ test_object_hash ] = test_object
@@ -106,13 +108,13 @@ module TDriver
106
108
 
107
109
  # TODO: document me
108
110
  def remove_object( test_object )
109
-
111
+
110
112
  test_object_hash = test_object.hash
111
113
 
112
- raise ArgumentError, "Test object (#{ value.hash }) not found from cache" unless @objects.has_key?( test_object_hash )
113
-
114
114
  @objects.delete( test_object_hash )
115
-
115
+
116
+ #raise ArgumentError, "Test object (#{ test_object_hash }) not found from cache" unless @objects.has_key?( test_object_hash )
117
+
116
118
  self
117
119
 
118
120
  end
@@ -633,11 +633,13 @@ module TDriver
633
633
 
634
634
  end
635
635
 
636
- def self.set_timeout( new_timeout )
636
+ def self.set_timeout( value )
637
637
 
638
638
  warn "warning: deprecated method TDriver::TestObjectFactory#set_timeout( value ); please use TDriver::TestObjectFactory#timeout=( value ) instead"
639
639
 
640
- self.timeout = new_timeout
640
+ value.check_type( Numeric, "Wrong argument type $1 for timeout value (expected $2)" )
641
+
642
+ @timeout = value
641
643
 
642
644
  end
643
645
 
@@ -17,26 +17,35 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
- # load test object abstract class
21
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'abstract' ) )
20
+ [
22
21
 
23
- # load test object identificator
24
- #require File.expand_path( File.join( File.dirname( __FILE__ ), 'identificator' ) )
22
+ # load test object abstract class
23
+ 'abstract',
25
24
 
26
- # load test object factory
27
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'factory' ) )
25
+ # load test object factory
26
+ 'factory',
28
27
 
29
- # load test object cache
30
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'cache' ) )
28
+ # load test object cache
29
+ 'cache',
31
30
 
32
- # load test object adapter
33
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'adapter' ) )
31
+ # load test object adapter abstraction
32
+ 'xml/abstraction',
34
33
 
35
- # load test object adapter
36
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'xml/adapter' ) )
34
+ # load test object adapter
35
+ 'xml/adapter',
37
36
 
38
- # load verify ui module
39
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'verification' ) )
37
+ # load test object adapter
38
+ 'adapter',
39
+
40
+ # load verify ui module
41
+ 'verification'
42
+
43
+ ].each{ | filename |
44
+
45
+ require File.expand_path( File.join( File.dirname( __FILE__ ), filename ) )
46
+
47
+ }
40
48
 
41
49
  # load test object behaviours
42
50
  MobyUtil::FileHelper.load_modules( File.expand_path( File.join( File.dirname( __FILE__ ), 'behaviours' ) ) )
51
+
@@ -0,0 +1,63 @@
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
+ module Abstraction
23
+
24
+ module TestObjectAdapter
25
+
26
+ # TODO: document me
27
+ def identify_test_object_adapter_from_data( source )
28
+
29
+ # verify check that source data is given in correct format
30
+ source.check_type [ String, MobyUtil::XML::Element ], 'wrong argument type $1 for XML data source (expected $2)'
31
+
32
+ # parse if given source is type of string
33
+ source = MobyUtil::XML.parse_string( source ).root if source.kind_of?( String )
34
+
35
+ # determine xml format
36
+ if source.kind_of?( MobyUtil::XML::Element )
37
+
38
+ # detect optimized xml format
39
+ if source.xpath('.//obj[1]').count > 0
40
+
41
+ TDriver::OptimizedXML::TestObjectAdapter
42
+
43
+ # or deprecated xml format
44
+ elsif source.xpath('.//object[1]').count > 0
45
+
46
+ TDriver::TestObjectAdapter
47
+
48
+ # or raise exception if format was not detected
49
+ else
50
+
51
+ raise RuntimeError, 'Unsupported XML data format'
52
+
53
+ end
54
+
55
+ end # if
56
+
57
+ end # identify_test_object_adapter
58
+
59
+ end # TestObjectAdapter
60
+
61
+ end # Abstraction
62
+
63
+ end # TDriver
@@ -25,7 +25,10 @@ module TDriver
25
25
 
26
26
  # private methods and variables
27
27
  class << self
28
-
28
+
29
+ # include abstraction module
30
+ include TDriver::Abstraction::TestObjectAdapter
31
+
29
32
  private
30
33
 
31
34
  # TODO: document me
@@ -949,7 +949,7 @@ module TDriverReportCreator
949
949
 
950
950
 
951
951
  xml_data.root.add_child(test)
952
- File.open(file, 'w') {|f| f.write(xml_data.to_xml) }
952
+ File.open(file, 'wb') {|f| f.write(xml_data) }
953
953
  test=nil
954
954
  xml_data=nil
955
955
  else
@@ -507,10 +507,10 @@ display: block;
507
507
 
508
508
  def reporter_link_to_code(log_line,folder=nil)
509
509
  begin
510
- t = Time.now
511
- time_stamp=t.strftime( "%Y%m%d%H%M%S" )
512
-
510
+ stackno=0
513
511
  log_line.gsub(/([\w \*\/\w\/\.-]+)\:(\d+)/) do |match|
512
+ t = Time.now
513
+ time_stamp="#{t.strftime( "%Y%m%d%H%M%S" )}#{stackno}"
514
514
  line=match[/\:(\d+)/]
515
515
  f=match[/([\w \*\/\w\/\.-]+)/]
516
516
  file="#{File.dirname(f.strip)}/#{File.basename(f.strip)}"
@@ -523,6 +523,7 @@ display: block;
523
523
  '">'+match+'</a>'
524
524
  log_line=log_line.gsub(match,link_to_stack)
525
525
  end
526
+ stackno+=1
526
527
  end
527
528
  rescue Exception => e
528
529
  puts e.message
@@ -17,35 +17,32 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
- # extend Ruby TrueClass and FalseClass class functionality
20
+ # extend Ruby TrueClass class functionality
21
21
  class TrueClass
22
22
 
23
+ # TODO: document me
23
24
  def true?
24
-
25
- /^true$/i.match( self.to_s ) != nil
26
-
25
+ true
27
26
  end
28
-
27
+
28
+ # TODO: document me
29
29
  def false?
30
-
31
30
  false
32
-
33
31
  end
34
32
 
35
33
  end
36
34
 
35
+ # extend Ruby FalseClass class functionality
37
36
  class FalseClass
38
37
 
39
- def true?
40
-
38
+ # TODO: document me
39
+ def true?
41
40
  false
42
-
43
41
  end
44
42
 
43
+ # TODO: document me
45
44
  def false?
46
-
47
- /^false$/i.match( self.to_s ) != nil
48
-
45
+ true
49
46
  end
50
47
 
51
48
  end
@@ -21,13 +21,14 @@ module MobyUtil
21
21
 
22
22
  class EnvironmentHelper
23
23
 
24
- UNKNOWN = :unknown
25
-
26
- LINUX = :linux
27
- SOLARIS = :solaris
28
- WINDOWS = :windows
29
- OSX = :osx
30
- CYGWIN = :cygwin
24
+ unless defined?( UNKNOWN )
25
+ LINUX = :linux
26
+ SOLARIS = :solaris
27
+ WINDOWS = :windows
28
+ OSX = :osx
29
+ CYGWIN = :cygwin
30
+ UNKNOWN = :unknown # keep this as last constant
31
+ end
31
32
 
32
33
  def self.java?
33
34
 
@@ -63,7 +63,7 @@ class Hash
63
63
 
64
64
  end
65
65
 
66
- # verify that receiver object contains all of given keys. Raises exception is key not found.
66
+ # verify that receiver object contains given key. Raises exception is key not found.
67
67
  def require_key( key, message = 'required key $1 not found from hash' )
68
68
 
69
69
  # store caller backtrace before calling fetch
@@ -149,7 +149,7 @@ class Hash
149
149
 
150
150
  end
151
151
 
152
- # store key and avalue to hash if not already defined
152
+ # store key and value to hash if not already defined
153
153
  def default_value( key, value )
154
154
 
155
155
  self[ key ] = value unless has_key?( key )
@@ -204,7 +204,7 @@ class Hash
204
204
  # TODO: document me
205
205
  def to_attributes
206
206
 
207
- self.collect{ | key, value |
207
+ collect{ | key, value |
208
208
 
209
209
  "#{ key.to_s }=\"#{ value.to_s.encode_to_xml }\""
210
210
 
@@ -215,7 +215,7 @@ class Hash
215
215
  # TODO: document me
216
216
  def recursive_merge( other )
217
217
 
218
- self.merge( other ){ | key, old_value, new_value |
218
+ merge( other ){ | key, old_value, new_value |
219
219
 
220
220
  new_value
221
221
 
@@ -243,7 +243,7 @@ class Hash
243
243
  # TODO: document me
244
244
  def recursive_merge!( other )
245
245
 
246
- self.replace(
246
+ replace(
247
247
 
248
248
  recursive_merge( other )
249
249