moto 0.0.8 → 0.0.9
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 +4 -4
- data/lib/cli.rb +45 -12
- data/lib/clients/website.rb +47 -47
- data/lib/parser.rb +16 -8
- data/lib/test_generator.rb +6 -11
- data/lib/thread_context.rb +4 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e56d7e5033affe7722147e62069dce0abb867a0
|
4
|
+
data.tar.gz: 1b24b5d96561c51bc981df29d20956d942440e9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94fd8eed59186ccd6699b9d76319a01695745a97dc3c6c0cc9127abea6fc0126c5ef2b44c75a6e6dde71e9a11ebef0180c6580b5fdd1be2dc86219e0db84adef
|
7
|
+
data.tar.gz: fdcc3abc7f4ffecfc93f9c50a4d0974bd84e967f7664fc1235d160741da4cf0b74534a351df02f4b60c175e35723aff61749bebb0f77cbfb7f55535167139c3e
|
data/lib/cli.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# TODO: fix this dumb verification of current working directory
|
2
2
|
unless File.exists? "#{Dir.pwd}/config/moto.rb"
|
3
|
-
puts
|
4
|
-
puts
|
3
|
+
puts 'Config file (config/moto.rb) not present.'
|
4
|
+
puts 'Does current working directory contain Moto application?'
|
5
5
|
exit 1
|
6
6
|
end
|
7
7
|
|
@@ -46,23 +46,56 @@ require_relative './exceptions/test_forced_passed'
|
|
46
46
|
module Moto
|
47
47
|
|
48
48
|
class Cli
|
49
|
-
|
50
49
|
def self.run(argv)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
test_paths_absolute = []
|
51
|
+
test_classes = []
|
52
|
+
|
53
|
+
unless argv[ :tests ].nil?
|
54
|
+
argv[ :tests ].each do |dir_name|
|
55
|
+
test_paths = Dir.glob("#{MotoApp::DIR}/tests/#{dir_name}/**/*.rb")
|
56
|
+
test_paths -= test_paths_absolute
|
57
|
+
test_paths_absolute += test_paths
|
58
|
+
end
|
58
59
|
end
|
59
|
-
|
60
|
+
|
61
|
+
# TODO Optimization for files without #MOTO_TAGS
|
62
|
+
unless argv[ :tags ].nil?
|
63
|
+
tests_total = Dir.glob("#{MotoApp::DIR}/tests/**/*.rb")
|
64
|
+
argv[ :tags ].each do |tag_name|
|
65
|
+
tests_total.each do |test_dir|
|
66
|
+
test_body = File.read (test_dir)
|
67
|
+
test_body.each_line do |line|
|
68
|
+
line = line.delete(' ')
|
69
|
+
if line.include?( '#MOTO_TAGS')
|
70
|
+
if line.include? (tag_name + ',')
|
71
|
+
test_paths_absolute.include?(test_dir) || test_paths_absolute << test_dir
|
72
|
+
break
|
73
|
+
else
|
74
|
+
break
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
#TODO Display criteria used
|
83
|
+
if test_paths_absolute.empty?
|
84
|
+
puts 'No tests found for given arguments'
|
85
|
+
exit 1
|
86
|
+
end
|
87
|
+
|
88
|
+
tg = TestGenerator.new(MotoApp::DIR)
|
89
|
+
test_paths_absolute.each do |test_path|
|
90
|
+
test_classes << tg.generate(test_path)
|
91
|
+
end
|
92
|
+
|
60
93
|
listeners = []
|
61
94
|
argv[ :reporters ].each do |r|
|
62
95
|
listeners << r.constantize
|
63
96
|
end
|
64
97
|
|
65
|
-
runner = Moto::Runner.new(
|
98
|
+
runner = Moto::Runner.new(test_classes, listeners, argv[ :environments ], argv[ :config ])
|
66
99
|
runner.run
|
67
100
|
end
|
68
101
|
|
data/lib/clients/website.rb
CHANGED
@@ -1,47 +1,47 @@
|
|
1
|
-
require 'capybara'
|
2
|
-
|
3
|
-
module Moto
|
4
|
-
module Clients
|
5
|
-
|
6
|
-
class Website < Moto::Clients::Base
|
7
|
-
|
8
|
-
attr_reader :session
|
9
|
-
|
10
|
-
ignore_logging(:page)
|
11
|
-
ignore_logging(:context)
|
12
|
-
ignore_logging(:session)
|
13
|
-
|
14
|
-
def start_run
|
15
|
-
# TODO: make session driver configurable
|
16
|
-
@session = Capybara::Session.new(context.runner.my_config[:capybara][:default_driver])
|
17
|
-
@pages = {}
|
18
|
-
end
|
19
|
-
|
20
|
-
def end_run
|
21
|
-
@session.driver.browser.close # TODO: check that it really works
|
22
|
-
end
|
23
|
-
|
24
|
-
def start_test(test)
|
25
|
-
# @context.current_test.logger.info("Hi mom, I'm opening some pages!")
|
26
|
-
@session.reset_session!
|
27
|
-
end
|
28
|
-
|
29
|
-
def end_test(test)
|
30
|
-
@session.reset_session!
|
31
|
-
end
|
32
|
-
|
33
|
-
def page(p)
|
34
|
-
page_class_name = "#{self.class.name}Pages::#{p}"
|
35
|
-
page_class_name.gsub!('Moto::', 'MotoApp::')
|
36
|
-
if @pages[page_class_name].nil?
|
37
|
-
a = page_class_name.underscore.split('/')
|
38
|
-
page_path = a[1..20].join('/')
|
39
|
-
require "#{MotoApp::DIR}/lib/#{page_path}"
|
40
|
-
@pages[page_class_name] = page_class_name.constantize.new(self)
|
41
|
-
end
|
42
|
-
@pages[page_class_name]
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
1
|
+
require 'capybara'
|
2
|
+
|
3
|
+
module Moto
|
4
|
+
module Clients
|
5
|
+
|
6
|
+
class Website < Moto::Clients::Base
|
7
|
+
|
8
|
+
attr_reader :session
|
9
|
+
|
10
|
+
ignore_logging(:page)
|
11
|
+
ignore_logging(:context)
|
12
|
+
ignore_logging(:session)
|
13
|
+
|
14
|
+
def start_run
|
15
|
+
# TODO: make session driver configurable
|
16
|
+
@session = Capybara::Session.new(context.runner.my_config[:capybara][:default_driver])
|
17
|
+
@pages = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def end_run
|
21
|
+
@session.driver.browser.close # TODO: check that it really works
|
22
|
+
end
|
23
|
+
|
24
|
+
def start_test(test)
|
25
|
+
# @context.current_test.logger.info("Hi mom, I'm opening some pages!")
|
26
|
+
@session.reset_session!
|
27
|
+
end
|
28
|
+
|
29
|
+
def end_test(test)
|
30
|
+
@session.reset_session!
|
31
|
+
end
|
32
|
+
|
33
|
+
def page(p)
|
34
|
+
page_class_name = "#{self.class.name}Pages::#{p}"
|
35
|
+
page_class_name.gsub!('Moto::', 'MotoApp::')
|
36
|
+
if @pages[page_class_name].nil?
|
37
|
+
a = page_class_name.underscore.split('/')
|
38
|
+
page_path = a[1..20].join('/')
|
39
|
+
require "#{MotoApp::DIR}/lib/#{page_path}"
|
40
|
+
@pages[page_class_name] = page_class_name.constantize.new(self)
|
41
|
+
end
|
42
|
+
@pages[page_class_name]
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/parser.rb
CHANGED
@@ -12,17 +12,18 @@ module Moto
|
|
12
12
|
|
13
13
|
# TODO Generate app / Change the way parsing options goes so it doesnt generate them if they`re not needed
|
14
14
|
case argv[0]
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
when 'run' then Moto::Cli.run run_parse(argv)
|
16
|
+
when 'help' then show_help
|
17
|
+
when 'generate' then Moto::AppGenerator.run generate_parse(argv)
|
18
|
+
else puts "Command '#{argv[0]}' not recognized. Type help for list of supported commands."
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
def self.run_parse(argv)
|
22
|
-
#
|
23
|
-
# Default options
|
22
|
+
def self.run_parse(argv)
|
23
|
+
# Default options
|
24
24
|
options = {}
|
25
|
-
options[:reporters] = []
|
25
|
+
options[:reporters] = []
|
26
|
+
# TODO Mandatory env var in app config
|
26
27
|
options[:config] = eval(File.read("#{MotoApp::DIR}/config/moto.rb"))
|
27
28
|
options[:environments] = []
|
28
29
|
|
@@ -31,12 +32,19 @@ module Moto
|
|
31
32
|
# TODO const
|
32
33
|
# TODO reporters should be consts - not strings
|
33
34
|
OptionParser.new do |opts|
|
34
|
-
opts.on('-t',
|
35
|
+
opts.on('-t', '--tests Tests', Array) { |v| options[:tests ] = v }
|
36
|
+
opts.on('-g', '--tags Tags', Array) { |v| options[:tags ] = v }
|
35
37
|
opts.on('-r', '--reporters Reporters', Array) { |v| options[:reporters] = v }
|
36
38
|
opts.on('-e', '--environments Environment', Array) { |v| options[:environments] = v }
|
37
39
|
opts.on('-c', '--const Const') { |v| options[:const] = v }
|
38
40
|
opts.on('-cfg', '--config Config') { |v| options[:config] = options[:config].merge( eval( v ) ) }
|
39
41
|
end.parse!
|
42
|
+
|
43
|
+
if options[ :config ][ :moto ][ :runner ][ :mandatory_environment ] && options[ :environments ].empty?
|
44
|
+
puts 'Environment is mandatory for this project.'
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
|
40
48
|
return options
|
41
49
|
end
|
42
50
|
|
data/lib/test_generator.rb
CHANGED
@@ -35,13 +35,8 @@ module Moto
|
|
35
35
|
end
|
36
36
|
|
37
37
|
# assuming that target file includes only content of method 'run' and some magic comments
|
38
|
-
def generate(
|
39
|
-
|
40
|
-
a = full_class_name.underscore.split('/')
|
41
|
-
test_path = (a[1..20]+[a[-1]]).join('/')
|
42
|
-
test_path = "#{MotoApp::DIR}/#{test_path}.rb"
|
43
|
-
|
44
|
-
method_body = File.read(test_path) + "\n"
|
38
|
+
def generate(test_path_absolute)
|
39
|
+
method_body = File.read(test_path_absolute) + "\n"
|
45
40
|
|
46
41
|
base = Moto::Test
|
47
42
|
base_class_string = method_body.match( /^#\s*BASE_CLASS:\s(\S+)/ )
|
@@ -49,24 +44,24 @@ module Moto
|
|
49
44
|
base_class_string = base_class_string[1].strip
|
50
45
|
|
51
46
|
a = base_class_string.underscore.split('/')
|
52
|
-
base_test_path = a[1
|
47
|
+
base_test_path = a[1..-1].join('/')
|
53
48
|
|
54
49
|
require "#{MotoApp::DIR}/lib/#{base_test_path}"
|
55
50
|
base = base_class_string.constantize
|
56
51
|
end
|
57
52
|
|
58
53
|
# MotoApp::Tests::Login::Short
|
59
|
-
consts =
|
54
|
+
consts = test_path_absolute.camelize.split('Tests::')[1].split('::')
|
55
|
+
consts.pop
|
60
56
|
class_name = consts.pop
|
61
57
|
|
62
|
-
consts.shift 2 # remove Moto::Test as already defined
|
63
58
|
m = create_module_tree(MotoApp::Tests, consts)
|
64
59
|
cls = Class.new(base)
|
65
60
|
m.const_set(class_name.to_sym, cls)
|
66
61
|
|
67
62
|
test_object = cls.new
|
68
63
|
test_object.instance_eval( "def run\n #{method_body} \n end" )
|
69
|
-
test_object.static_path =
|
64
|
+
test_object.static_path = test_path_absolute
|
70
65
|
test_object
|
71
66
|
end
|
72
67
|
|
data/lib/thread_context.rb
CHANGED
@@ -14,8 +14,10 @@ module Moto
|
|
14
14
|
@tests.each do |t|
|
15
15
|
t.context = self
|
16
16
|
end
|
17
|
-
|
18
|
-
|
17
|
+
@config = {}
|
18
|
+
Dir.glob("config/*.yml").each do |f|
|
19
|
+
@config.merge! YAML.load_file(f)
|
20
|
+
end
|
19
21
|
end
|
20
22
|
|
21
23
|
def client(name)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bartek Wilczek
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-10-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
96
|
version: '0'
|
97
97
|
requirements: []
|
98
98
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.0.
|
99
|
+
rubygems_version: 2.0.14.1
|
100
100
|
signing_key:
|
101
101
|
specification_version: 4
|
102
102
|
summary: Moto - yet another web testing framework
|