cutedriver-driver 2.0.0.20210120164037
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.
- checksums.yaml +7 -0
- data/README.md +16 -0
- data/bin/start_app_perf +200 -0
- data/bin/tdriver-devtools +3 -0
- data/config/sut_parameters.rb +52 -0
- data/config/sut_setup.rb +32 -0
- data/config/sut_teardown.rb +32 -0
- data/config/tdriver_custom_error_recovery.rb +83 -0
- data/ext/extconf.rb +70 -0
- data/ext/native_extensions.c +315 -0
- data/lib/matti.rb +25 -0
- data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +120 -0
- data/lib/tdriver-devtools/behaviour/old/xml/example/impl.rb_invalid +194 -0
- data/lib/tdriver-devtools/behaviour/old/xml/generate_behaviour_xml.rb +95 -0
- data/lib/tdriver-devtools/behaviour/old/xml/lib/tdriver_generator.rb +722 -0
- data/lib/tdriver-devtools/behaviour/old/xml/qdoc_generator.rb +321 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.method.template +43 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.module.template +54 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument.template +7 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument_type.template +7 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.exception.template +5 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.line.template +2 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.template +5 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.method.template +23 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.template +14 -0
- data/lib/tdriver-devtools/behaviour/old/xml/update +3 -0
- data/lib/tdriver-devtools/behaviour/xml/generate.rb +88 -0
- data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +1945 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.default.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument_type.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.exception.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.arguments.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.deprecated.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.exceptions.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.info.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.returns.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.tables.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.template +12 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.returns.template +5 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.item.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.row.template +2 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.template +8 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.template +14 -0
- data/lib/tdriver-devtools/doc/behaviour_xml/QtExampleGestureBehaviour.xml +138 -0
- data/lib/tdriver-devtools/doc/behaviour_xml/created.rid +1 -0
- data/lib/tdriver-devtools/doc/behaviour_xml/tdriver.hash +1 -0
- data/lib/tdriver-devtools/doc/feature_xml/qt_widget_hold.feature.xml +9 -0
- data/lib/tdriver-devtools/doc/feature_xml/qt_widget_tap.feature.xml +9 -0
- data/lib/tdriver-devtools/doc/generate.rb +917 -0
- data/lib/tdriver-devtools/doc/update +1 -0
- data/lib/tdriver-devtools/doc/xslt/html.rb +7 -0
- data/lib/tdriver-devtools/doc/xslt/template.xsl +2170 -0
- data/lib/tdriver-devtools/doc/xslt/update +3 -0
- data/lib/tdriver-devtools/plugin/placeholder.txt +1 -0
- data/lib/tdriver-devtools/tdriver-devtools.rb +404 -0
- data/lib/tdriver-devtools/tests/feature_tests/example/behaviour_example.rb +100 -0
- data/lib/tdriver-devtools/tests/feature_tests/generate.rb +82 -0
- data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +468 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/feature_attribute.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/feature_method.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_attribute.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_method.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/update +3 -0
- data/lib/tdriver.rb +23 -0
- data/lib/tdriver/base/behaviour/abstract.rb +29 -0
- data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +99 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +278 -0
- data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +119 -0
- data/lib/tdriver/base/behaviour/factory.rb +495 -0
- data/lib/tdriver/base/behaviour/loader.rb +46 -0
- data/lib/tdriver/base/command_data/command_data.rb +51 -0
- data/lib/tdriver/base/command_data/loader.rb +29 -0
- data/lib/tdriver/base/controller/abstraction.rb +56 -0
- data/lib/tdriver/base/controller/loader.rb +21 -0
- data/lib/tdriver/base/errors.rb +134 -0
- data/lib/tdriver/base/loader.rb +47 -0
- data/lib/tdriver/base/state_object.rb +373 -0
- data/lib/tdriver/base/sut/adapter.rb +54 -0
- data/lib/tdriver/base/sut/controller.rb +151 -0
- data/lib/tdriver/base/sut/factory.rb +339 -0
- data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
- data/lib/tdriver/base/sut/generic/behaviours/application.rb +427 -0
- data/lib/tdriver/base/sut/generic/behaviours/controller.rb +67 -0
- data/lib/tdriver/base/sut/generic/behaviours/find.rb +107 -0
- data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +337 -0
- data/lib/tdriver/base/sut/generic/behaviours/sut.rb +1888 -0
- data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +210 -0
- data/lib/tdriver/base/sut/generic/behaviours/verification.rb +222 -0
- data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
- data/lib/tdriver/base/sut/generic/commands/application.rb +274 -0
- data/lib/tdriver/base/sut/generic/commands/fixture.rb +47 -0
- data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +94 -0
- data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +64 -0
- data/lib/tdriver/base/sut/generic/plugin.rb +97 -0
- data/lib/tdriver/base/sut/loader.rb +35 -0
- data/lib/tdriver/base/sut/sut.rb +98 -0
- data/lib/tdriver/base/test_object/abstract.rb +208 -0
- data/lib/tdriver/base/test_object/adapter.rb +740 -0
- data/lib/tdriver/base/test_object/behaviours/syncronization.rb +144 -0
- data/lib/tdriver/base/test_object/behaviours/test_object.rb +1047 -0
- data/lib/tdriver/base/test_object/cache.rb +134 -0
- data/lib/tdriver/base/test_object/factory.rb +684 -0
- data/lib/tdriver/base/test_object/loader.rb +51 -0
- data/lib/tdriver/base/test_object/verification.rb +178 -0
- data/lib/tdriver/base/test_object/xml/abstraction.rb +63 -0
- data/lib/tdriver/base/test_object/xml/adapter.rb +773 -0
- data/lib/tdriver/env.rb +21 -0
- data/lib/tdriver/loader.rb +57 -0
- data/lib/tdriver/matti.rb +35 -0
- data/lib/tdriver/report/error_recovery/tdriver_custom_error_recovery.rb +83 -0
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +168 -0
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +106 -0
- data/lib/tdriver/report/report.rb +61 -0
- data/lib/tdriver/report/report_api.rb +348 -0
- data/lib/tdriver/report/report_combine.rb +86 -0
- data/lib/tdriver/report/report_crash_file_capture.rb +178 -0
- data/lib/tdriver/report/report_creator.rb +665 -0
- data/lib/tdriver/report/report_cucumber.rb +158 -0
- data/lib/tdriver/report/report_cucumber_listener.rb +184 -0
- data/lib/tdriver/report/report_cucumber_reporter.rb +181 -0
- data/lib/tdriver/report/report_data_presentation.rb +156 -0
- data/lib/tdriver/report/report_data_table.rb +64 -0
- data/lib/tdriver/report/report_execution_statistics.rb +400 -0
- data/lib/tdriver/report/report_file_capture.rb +159 -0
- data/lib/tdriver/report/report_graph_generator.rb +59 -0
- data/lib/tdriver/report/report_grouping.rb +541 -0
- data/lib/tdriver/report/report_javascript.rb +199 -0
- data/lib/tdriver/report/report_junit_xml.rb +147 -0
- data/lib/tdriver/report/report_rspec.rb +108 -0
- data/lib/tdriver/report/report_test_case_run.rb +725 -0
- data/lib/tdriver/report/report_test_run.rb +1476 -0
- data/lib/tdriver/report/report_test_unit.rb +223 -0
- data/lib/tdriver/report/report_writer.rb +1621 -0
- data/lib/tdriver/tdriver.rb +209 -0
- data/lib/tdriver/util/agent/loader.rb +22 -0
- data/lib/tdriver/util/agent/service.rb +107 -0
- data/lib/tdriver/util/common/array.rb +39 -0
- data/lib/tdriver/util/common/boolean.rb +48 -0
- data/lib/tdriver/util/common/crc16.rb +149 -0
- data/lib/tdriver/util/common/environment.rb +154 -0
- data/lib/tdriver/util/common/error.rb +40 -0
- data/lib/tdriver/util/common/exception.rb +53 -0
- data/lib/tdriver/util/common/exceptions.rb +12 -0
- data/lib/tdriver/util/common/file.rb +328 -0
- data/lib/tdriver/util/common/gem.rb +109 -0
- data/lib/tdriver/util/common/hash.rb +288 -0
- data/lib/tdriver/util/common/kernel.rb +253 -0
- data/lib/tdriver/util/common/loader.rb +47 -0
- data/lib/tdriver/util/common/numeric.rb +159 -0
- data/lib/tdriver/util/common/object.rb +159 -0
- data/lib/tdriver/util/common/retryable.rb +179 -0
- data/lib/tdriver/util/common/stackable.rb +185 -0
- data/lib/tdriver/util/common/string.rb +174 -0
- data/lib/tdriver/util/database/access.rb +240 -0
- data/lib/tdriver/util/database/connection.rb +44 -0
- data/lib/tdriver/util/database/error.rb +34 -0
- data/lib/tdriver/util/database/loader.rb +28 -0
- 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 +211 -0
- data/lib/tdriver/util/hooking/hooking.rb +477 -0
- data/lib/tdriver/util/keymap/keymap.rb +81 -0
- data/lib/tdriver/util/loader.rb +80 -0
- data/lib/tdriver/util/localisation/error.rb +31 -0
- data/lib/tdriver/util/localisation/loader.rb +25 -0
- data/lib/tdriver/util/localisation/localisation.rb +762 -0
- data/lib/tdriver/util/logger/loader.rb +22 -0
- data/lib/tdriver/util/logger/logger.rb +591 -0
- data/lib/tdriver/util/operator_data/error.rb +29 -0
- data/lib/tdriver/util/operator_data/loader.rb +27 -0
- data/lib/tdriver/util/operator_data/operator_data.rb +93 -0
- data/lib/tdriver/util/other/config.rb +221 -0
- data/lib/tdriver/util/parameter/error.rb +48 -0
- data/lib/tdriver/util/parameter/loader.rb +25 -0
- data/lib/tdriver/util/parameter/parameter.rb +1161 -0
- data/lib/tdriver/util/plugin/abstract.rb +61 -0
- data/lib/tdriver/util/plugin/error.rb +0 -0
- data/lib/tdriver/util/plugin/loader.rb +28 -0
- data/lib/tdriver/util/plugin/service.rb +319 -0
- data/lib/tdriver/util/recorder/loader.rb +25 -0
- data/lib/tdriver/util/recorder/recorder.rb +72 -0
- data/lib/tdriver/util/recorder/scripter.rb +294 -0
- data/lib/tdriver/util/statistics/statistics.rb +89 -0
- data/lib/tdriver/util/user_data/error.rb +28 -0
- data/lib/tdriver/util/user_data/loader.rb +25 -0
- data/lib/tdriver/util/user_data/user_data.rb +104 -0
- data/lib/tdriver/util/video/camera.rb +67 -0
- data/lib/tdriver/util/video/camera_linux.rb +153 -0
- data/lib/tdriver/util/video/camera_windows.rb +174 -0
- data/lib/tdriver/util/video/loader.rb +31 -0
- data/lib/tdriver/util/video/video_utils.rb +139 -0
- data/lib/tdriver/util/xml/abstraction.rb +117 -0
- data/lib/tdriver/util/xml/attribute.rb +32 -0
- data/lib/tdriver/util/xml/builder.rb +53 -0
- data/lib/tdriver/util/xml/comment.rb +32 -0
- data/lib/tdriver/util/xml/document.rb +32 -0
- data/lib/tdriver/util/xml/element.rb +32 -0
- data/lib/tdriver/util/xml/error.rb +46 -0
- data/lib/tdriver/util/xml/loader.rb +62 -0
- data/lib/tdriver/util/xml/nil_node.rb +95 -0
- data/lib/tdriver/util/xml/nodeset.rb +32 -0
- data/lib/tdriver/util/xml/parsers/libxml/libxml.rb +140 -0
- data/lib/tdriver/util/xml/parsers/loader.rb +21 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +167 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +66 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +64 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/comment.rb +39 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +66 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +39 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +58 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +212 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +237 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +39 -0
- data/lib/tdriver/util/xml/text.rb +32 -0
- data/lib/tdriver/util/xml/xml.rb +332 -0
- data/lib/tdriver/verify/verify.rb +2398 -0
- data/lib/tdriver/version.rb +21 -0
- data/xml/behaviours/generic.xml +530 -0
- data/xml/defaults/generic.xml +11 -0
- data/xml/defaults/sut_generic.xml +8 -0
- data/xml/parameters/tdriver_parameters.xml +23 -0
- data/xml/templates/generic.xml +292 -0
- metadata +324 -0
@@ -0,0 +1,82 @@
|
|
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
|
+
#!/usr/bin/env ruby
|
20
|
+
require 'rdoc/rdoc'
|
21
|
+
|
22
|
+
$templates = {}
|
23
|
+
|
24
|
+
module RDoc
|
25
|
+
|
26
|
+
class RDoc
|
27
|
+
|
28
|
+
# install custom generator to RDoc
|
29
|
+
def install_generator( name, filename )
|
30
|
+
|
31
|
+
GENERATORS[ name.to_s.downcase ] = Generator.new( filename, ( "%sFeatureTestGenerator" % [ name ] ).intern , name.to_s.downcase )
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
def load_templates
|
40
|
+
|
41
|
+
Dir.glob( File.join( File.dirname( File.expand_path( __FILE__ ) ), 'templates', '*.template' ) ).each{ | file |
|
42
|
+
|
43
|
+
name = File.basename( file ).gsub( '.template', '' )
|
44
|
+
|
45
|
+
$templates[ name.to_sym ] = open( file, 'r' ).read
|
46
|
+
|
47
|
+
}
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
if ARGV.count == 0
|
52
|
+
|
53
|
+
abort "\nUsage: #{ File.basename( $0 ) } filename.rb\n\n"
|
54
|
+
|
55
|
+
else
|
56
|
+
|
57
|
+
ARGV.each{ | filename |
|
58
|
+
|
59
|
+
abort("\nUnable to create feature test due to implementation file %s not found\n\n" % [ filename ] ) unless File.exist?( File.expand_path( filename ) )
|
60
|
+
|
61
|
+
}
|
62
|
+
|
63
|
+
begin
|
64
|
+
|
65
|
+
load_templates
|
66
|
+
|
67
|
+
RDoc::RDoc.new.tap{ | rdoc |
|
68
|
+
|
69
|
+
rdoc.install_generator( 'TDriver', File.expand_path( File.join( File.dirname( __FILE__ ), 'lib/custom_rdoc_generator.rb' ) ) )
|
70
|
+
|
71
|
+
rdoc.document( ['--inline-source', '--op', 'output', '--fmt', 'tdriver'] + ARGV )
|
72
|
+
|
73
|
+
}
|
74
|
+
|
75
|
+
rescue RDoc::RDocError => e
|
76
|
+
|
77
|
+
abort e.message
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
@@ -0,0 +1,468 @@
|
|
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
|
+
$scenarios = 0
|
21
|
+
$templates = {} unless defined?( $templates )
|
22
|
+
|
23
|
+
$scenario_files = {}
|
24
|
+
|
25
|
+
module Generators
|
26
|
+
|
27
|
+
abort("") unless defined?( RDoc )
|
28
|
+
|
29
|
+
class TDriverFeatureTestGenerator
|
30
|
+
|
31
|
+
def self.for( options )
|
32
|
+
|
33
|
+
new( options )
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize( options )
|
38
|
+
|
39
|
+
@options = options
|
40
|
+
|
41
|
+
@already_processed_files = []
|
42
|
+
|
43
|
+
@current_module_tests = []
|
44
|
+
|
45
|
+
@current_module = nil
|
46
|
+
|
47
|
+
@output = { :files => [], :classes => [], :modules => [], :attributes => [], :methods => [], :aliases => [], :constants => [], :requires => [], :includes => []}
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def generate( files )
|
52
|
+
|
53
|
+
# process files
|
54
|
+
files.each{ | file |
|
55
|
+
|
56
|
+
process_file( file ) unless @already_processed_files.include?( file.file_absolute_name )
|
57
|
+
|
58
|
+
}
|
59
|
+
|
60
|
+
p "total scenarios: %s" % $scenarios
|
61
|
+
|
62
|
+
#p @already_processed_files
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
def process_file( file )
|
67
|
+
|
68
|
+
@module_path = []
|
69
|
+
|
70
|
+
@current_file = file
|
71
|
+
|
72
|
+
process_modules( file.modules )
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
def process_modules( modules )
|
77
|
+
|
78
|
+
modules.each{ | _module |
|
79
|
+
|
80
|
+
unless @already_processed_files.include?( _module.full_name )
|
81
|
+
|
82
|
+
@module_path.push( _module.name )
|
83
|
+
|
84
|
+
process_module( _module )
|
85
|
+
|
86
|
+
@module_path.pop
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
}
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
def process_methods( methods )
|
95
|
+
|
96
|
+
results = []
|
97
|
+
|
98
|
+
methods.each{ | method |
|
99
|
+
|
100
|
+
scenarios = process_method( method )
|
101
|
+
|
102
|
+
results << { :header => $templates[:feature_method] % [ "%s#%s" % [ @module_path.join("::"), method.name ], method.name, @module_path.join("::") ], :scenarios => scenarios, :file => generate_name( method.name ), :module_path => @module_path, :name => method.name } if scenarios.count > 0
|
103
|
+
|
104
|
+
}
|
105
|
+
|
106
|
+
results
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
def process_arguments( arguments )
|
111
|
+
|
112
|
+
# tokenize string
|
113
|
+
tokenizer = RubyLex.new( arguments )
|
114
|
+
|
115
|
+
# get first token
|
116
|
+
token = tokenizer.token
|
117
|
+
|
118
|
+
# set previous token to nil by default
|
119
|
+
previous_token = nil
|
120
|
+
|
121
|
+
args = []
|
122
|
+
|
123
|
+
capture = false
|
124
|
+
capture_depth = []
|
125
|
+
|
126
|
+
# loop while tokens available
|
127
|
+
while token
|
128
|
+
|
129
|
+
if [ RubyToken::TkLBRACE, RubyToken::TkLPAREN, RubyToken::TkLBRACK ].include?( token.class )
|
130
|
+
|
131
|
+
capture_depth << token
|
132
|
+
|
133
|
+
capture = true
|
134
|
+
|
135
|
+
elsif [ RubyToken::TkRBRACE, RubyToken::TkRPAREN, RubyToken::TkRBRACK ].include?( token.class )
|
136
|
+
|
137
|
+
capture_depth.pop
|
138
|
+
|
139
|
+
capture = false if capture_depth.empty?
|
140
|
+
|
141
|
+
# argument name
|
142
|
+
elsif capture == false
|
143
|
+
|
144
|
+
if token.kind_of?( RubyToken::TkIDENTIFIER )
|
145
|
+
|
146
|
+
args << [ token.name, nil, false ]
|
147
|
+
|
148
|
+
# &blocks and *arguments are handled as optional parameters
|
149
|
+
args.last[ -1 ] = true if [ RubyToken::TkBITAND, RubyToken::TkMULT ].include?( previous_token.class )
|
150
|
+
|
151
|
+
# detect optional argument
|
152
|
+
elsif token.kind_of?( RubyToken::TkASSIGN )
|
153
|
+
|
154
|
+
# mark arguments as optional
|
155
|
+
args.last[ -1 ] = true
|
156
|
+
|
157
|
+
opt = true
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
# store previous token
|
164
|
+
previous_token = token
|
165
|
+
|
166
|
+
# get next token
|
167
|
+
token = tokenizer.token
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
args
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
def generate_scenarios( mode, arguments_table = nil )
|
176
|
+
|
177
|
+
results = []
|
178
|
+
|
179
|
+
# first scenario with all required arguments
|
180
|
+
if mode.to_s =~ /method/
|
181
|
+
|
182
|
+
required_arguments = arguments_table.select{ | argument | argument.last == false }.to_a.collect{ | scenario | scenario.first } # Array conversion for ruby 1.9 compatibility
|
183
|
+
|
184
|
+
results << $templates[ mode ] % [ @current_method.name, "required", "(s)", @current_method.name, required_arguments.join(", ") ]
|
185
|
+
|
186
|
+
elsif mode.to_s =~ /attribute/
|
187
|
+
|
188
|
+
name = @current_attribute.first.name
|
189
|
+
|
190
|
+
name << "=" if @current_attribute.count > 1
|
191
|
+
|
192
|
+
results << $templates[ mode ] % [ name, name ]
|
193
|
+
|
194
|
+
end
|
195
|
+
|
196
|
+
unless arguments_table.nil?
|
197
|
+
|
198
|
+
# scenarios with one of each optional argument.. and eventually with all arguments
|
199
|
+
arguments_table.select{ | argument | argument.last == true }.to_a.collect{ | scenario | scenario
|
200
|
+
# Array conversion for ruby 1.9 compatibility
|
201
|
+
scenario = required_arguments << scenario.first
|
202
|
+
|
203
|
+
results << $templates[ mode ] % [ @current_method.name, "optional", " '%s'" % scenario.last.first, @current_method.name, scenario.join(", ") ]
|
204
|
+
|
205
|
+
}
|
206
|
+
|
207
|
+
end
|
208
|
+
|
209
|
+
results
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
def process_method( method )
|
214
|
+
|
215
|
+
scenarios = []
|
216
|
+
|
217
|
+
if ( method.visibility == :public && @module_path.first =~ /MobyBehaviour/ )
|
218
|
+
|
219
|
+
arguments_table = process_arguments( method.params )
|
220
|
+
|
221
|
+
@current_method = method
|
222
|
+
|
223
|
+
scenarios = generate_scenarios( :scenario_method, arguments_table )
|
224
|
+
|
225
|
+
$scenarios += scenarios.count
|
226
|
+
|
227
|
+
else
|
228
|
+
|
229
|
+
end
|
230
|
+
|
231
|
+
scenarios
|
232
|
+
|
233
|
+
end
|
234
|
+
|
235
|
+
# verify if
|
236
|
+
def has_method?( target, method_name )
|
237
|
+
|
238
|
+
target.method_list.select{ | method |
|
239
|
+
|
240
|
+
method.name == method_name
|
241
|
+
|
242
|
+
}.count > 0
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
def process_attributes( attributes )
|
247
|
+
|
248
|
+
results = []
|
249
|
+
|
250
|
+
attributes.each{ | attribute |
|
251
|
+
|
252
|
+
scenarios = process_attribute( attribute )
|
253
|
+
|
254
|
+
attr_name = attribute.name.gsub("=",'')
|
255
|
+
|
256
|
+
results << { :header => $templates[:feature_attribute] % [ "%s#%s" % [ @module_path.join("::"), attribute.name ], attr_name, @module_path.join("::") ], :scenarios => scenarios, :file => generate_name( attr_name ), :module_path => @module_path, :name => attr_name } if scenarios.count > 0
|
257
|
+
|
258
|
+
}
|
259
|
+
|
260
|
+
results
|
261
|
+
|
262
|
+
end
|
263
|
+
|
264
|
+
def process_attribute( attribute )
|
265
|
+
|
266
|
+
result = []
|
267
|
+
|
268
|
+
if ( @module_path.first =~ /MobyBehaviour/ )
|
269
|
+
|
270
|
+
@current_attribute = [ attribute ]
|
271
|
+
|
272
|
+
#p @module_path
|
273
|
+
|
274
|
+
scenarios = []
|
275
|
+
|
276
|
+
case attribute.rw
|
277
|
+
|
278
|
+
when 'RW'
|
279
|
+
# verify first that if attribute is overwritten as method
|
280
|
+
unless has_method?( @current_module[ :object ], attribute.name )
|
281
|
+
scenarios << generate_scenarios( :scenario_attribute )
|
282
|
+
scenarios.pop if scenarios.last == []
|
283
|
+
end
|
284
|
+
|
285
|
+
# verify first that if attribute is overwritten as method
|
286
|
+
unless has_method?( @current_module[ :object ], "%s=" % attribute.name )
|
287
|
+
@current_attribute << "W"
|
288
|
+
scenarios << generate_scenarios( :scenario_attribute )
|
289
|
+
scenarios.pop if scenarios.last == []
|
290
|
+
end
|
291
|
+
|
292
|
+
when 'W'
|
293
|
+
# verify first that if attribute is overwritten as method
|
294
|
+
unless has_method?( @current_module[ :object ], "%s=" % attribute.name )
|
295
|
+
@current_attribute << "W"
|
296
|
+
scenarios << generate_scenarios( :scenario_attribute )
|
297
|
+
scenarios.pop if scenarios.last == []
|
298
|
+
end
|
299
|
+
|
300
|
+
when 'R'
|
301
|
+
|
302
|
+
# verify first that if attribute is overwritten as method
|
303
|
+
unless has_method?( @current_module[ :object ], attribute.name )
|
304
|
+
scenarios << generate_scenarios( :scenario_attribute )
|
305
|
+
scenarios.pop if scenarios.last == []
|
306
|
+
end
|
307
|
+
|
308
|
+
else
|
309
|
+
|
310
|
+
abort( "Unknown attribute rw status: %s" % attribute.rw )
|
311
|
+
|
312
|
+
end
|
313
|
+
|
314
|
+
if scenarios.count > 0
|
315
|
+
|
316
|
+
#puts $templates[:feature]
|
317
|
+
result << scenarios
|
318
|
+
#puts scenarios
|
319
|
+
|
320
|
+
$scenarios += scenarios.count
|
321
|
+
|
322
|
+
end
|
323
|
+
|
324
|
+
|
325
|
+
else
|
326
|
+
|
327
|
+
#puts "%s method: %s" % [ method.visibility.to_s, method.name ]
|
328
|
+
|
329
|
+
end
|
330
|
+
|
331
|
+
result
|
332
|
+
|
333
|
+
end
|
334
|
+
|
335
|
+
def generate_name( method )
|
336
|
+
|
337
|
+
name = @module_path[ 1 .. -1 ].join("_")
|
338
|
+
|
339
|
+
begin
|
340
|
+
|
341
|
+
n = name.bytes.to_a
|
342
|
+
|
343
|
+
result = ""
|
344
|
+
|
345
|
+
n.each_with_index{ | byte, index |
|
346
|
+
|
347
|
+
if byte == 95
|
348
|
+
|
349
|
+
result << byte.chr
|
350
|
+
next
|
351
|
+
|
352
|
+
end
|
353
|
+
|
354
|
+
unless index == 0
|
355
|
+
|
356
|
+
prefix = ""
|
357
|
+
|
358
|
+
if (65..90).include?( byte ) or (48..57).include?( byte )
|
359
|
+
|
360
|
+
prefix = "_"
|
361
|
+
|
362
|
+
unless ( index + 1) > ( n.count - 1 )
|
363
|
+
|
364
|
+
next_byte = n[ index + 1 ]
|
365
|
+
|
366
|
+
# do not add underscore if next character is in uppercase or numeric
|
367
|
+
prefix = "" if (65..90).include?( next_byte ) or (48..57).include?( next_byte ) or next_byte == 95
|
368
|
+
|
369
|
+
else
|
370
|
+
|
371
|
+
prev_byte = n[ index - 1 ]
|
372
|
+
|
373
|
+
prefix = "" if ( 65..90 ).include?( prev_byte ) or ( 48..57 ).include?( prev_byte ) or prev_byte == 95
|
374
|
+
|
375
|
+
end
|
376
|
+
|
377
|
+
end
|
378
|
+
|
379
|
+
result << prefix + byte.chr.downcase
|
380
|
+
|
381
|
+
else
|
382
|
+
|
383
|
+
# first char, don't care if uppercase
|
384
|
+
result << byte.chr
|
385
|
+
|
386
|
+
end
|
387
|
+
|
388
|
+
}
|
389
|
+
|
390
|
+
name = result.gsub( /_+/, "_")
|
391
|
+
|
392
|
+
rescue
|
393
|
+
|
394
|
+
name = name.downcase
|
395
|
+
|
396
|
+
end
|
397
|
+
|
398
|
+
name << "_" << method
|
399
|
+
|
400
|
+
name.gsub!(/[?!=]/){ | char | char = "_0x%x" % char[0] }
|
401
|
+
|
402
|
+
( name + ".feature" ).downcase
|
403
|
+
|
404
|
+
end
|
405
|
+
|
406
|
+
def generate_feature( data )
|
407
|
+
|
408
|
+
path = File.join( data[:file] )
|
409
|
+
|
410
|
+
open( path, 'w' ){ | file |
|
411
|
+
|
412
|
+
file << data[:header]
|
413
|
+
|
414
|
+
file << data[:scenarios]
|
415
|
+
|
416
|
+
}
|
417
|
+
|
418
|
+
end
|
419
|
+
|
420
|
+
def process_module( _module )
|
421
|
+
|
422
|
+
@already_processed_files << _module.full_name
|
423
|
+
|
424
|
+
@current_module = { :object => _module, :scenarios => [] }
|
425
|
+
|
426
|
+
# process methods
|
427
|
+
methods = process_methods( _module.method_list )
|
428
|
+
|
429
|
+
# process attributes
|
430
|
+
attributes = process_attributes( _module.attributes )
|
431
|
+
|
432
|
+
unless ( methods.empty? && attributes.empty? )
|
433
|
+
|
434
|
+
methods.each{ | method |
|
435
|
+
|
436
|
+
generate_feature( method )
|
437
|
+
|
438
|
+
puts method[:file]
|
439
|
+
|
440
|
+
puts method[:header]
|
441
|
+
|
442
|
+
puts method[:scenarios]
|
443
|
+
|
444
|
+
}
|
445
|
+
|
446
|
+
|
447
|
+
attributes.each{ | method |
|
448
|
+
|
449
|
+
generate_feature( method )
|
450
|
+
|
451
|
+
puts method[:file]
|
452
|
+
|
453
|
+
puts method[:header]
|
454
|
+
|
455
|
+
puts method[:scenarios]
|
456
|
+
|
457
|
+
}
|
458
|
+
|
459
|
+
end
|
460
|
+
|
461
|
+
# process if any child modules
|
462
|
+
process_modules( _module.modules ) unless _module.modules.empty?
|
463
|
+
|
464
|
+
end
|
465
|
+
|
466
|
+
end
|
467
|
+
|
468
|
+
end
|