testability-driver 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
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