moto 0.8.4 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 128985359cd630b7058bb7bba1d96ea7517c74b9
4
- data.tar.gz: ecd946cb9026ec99ae1190e61b188fe988640a72
3
+ metadata.gz: 3e65386856ade15e4eae651e3cab0c53ecfffe6e
4
+ data.tar.gz: 7f2b839cc1e8cee8f4c4115a6904133379eff395
5
5
  SHA512:
6
- metadata.gz: cd9e3d39235d08eec0a9cd073597c4e403040f7eb916731d99dad86bf076001bbab960b281fd1bebb986fe1bcc062b3add724cadface33734a397b1683219b9b
7
- data.tar.gz: ebd6ae97dbcddcb200cc773555d170e652ce68136024a1c24c4fce02b54d002335b2a3becb743e7bd5a5e420590418ba009f5d11168c56bb831ef4005c404e2c
6
+ metadata.gz: e5b8bfc2a6ec600a3c71bc93c0f4415072d239e92c0553a449fc524add7e8662dda586d87546b43700114c7830a683b12d5c2e51e6249de36b1618e96a839d7f
7
+ data.tar.gz: ce2dd0e518627bbd7ce5714f36c29c1f7cec99a73f8d1699e6cf226ae645dd88828a7dfb36faab8ef5696c8197c6a3b571d624b1589af61519ce18bb044e0110
data/lib/cli.rb CHANGED
@@ -34,34 +34,69 @@ module Moto
34
34
 
35
35
  class Cli
36
36
  def self.run(argv)
37
+
37
38
  test_paths_absolute = []
39
+ directories = argv[:tests]
40
+ tags = argv[:tags]
41
+ filters = argv[:filters]
38
42
 
39
- #TODO Remove providing an array ?
40
- unless argv[ :tests ].nil?
41
- argv[ :tests ].each do |dir_name|
42
- test_paths = Dir.glob("#{MotoApp::DIR}/tests/#{dir_name}/**/*.rb")
43
- test_paths -= test_paths_absolute
44
- test_paths_absolute += test_paths
43
+ if directories
44
+ directories.each do |directory|
45
+ test_paths_absolute += Dir.glob("#{MotoApp::DIR}/tests/#{directory}/**/*.rb")
45
46
  end
46
47
  end
47
48
 
48
- # TODO Optimization for files without #MOTO_TAGS - add support for tags in params (not here)
49
- unless argv[:tags].nil?
49
+ if tags
50
50
  tests_total = Dir.glob("#{MotoApp::DIR}/tests/**/*.rb")
51
51
  tests_total.each do |test_path|
52
+
52
53
  test_body = File.read(test_path)
53
- matches = test_body.match(/^#(\s*)MOTO_TAGS:([^\n\r]+)$/m)
54
+ matches = test_body.match(/^#(\s*)MOTO_TAGS:(.*?)$/)
55
+
54
56
  if matches
55
57
  test_tags = matches.to_a[2].gsub(/\s*/, '').split(',')
56
- test_paths_absolute << test_path unless (argv[:tags]&test_tags).empty?
58
+ test_paths_absolute << test_path unless (tags & test_tags).empty?
57
59
  end
60
+
58
61
  end
59
62
  end
60
63
 
64
+ # Make sure there are no repetitions in gathered set
65
+ test_paths_absolute.uniq!
66
+
67
+ # Tests to be removed due to filtering will be gathered in this array
68
+ # [].delete(item) cannot be used since it interferes with [].each
69
+ filtered_test_paths = []
70
+
71
+ # Filter tests by provied tags
72
+ if filters
73
+ test_paths_absolute.each do |test_path|
74
+ test_body = File.read(test_path)
75
+
76
+ matches = test_body.match(/^#(\s*)MOTO_TAGS:(.*?)$/)
77
+
78
+ if matches
79
+
80
+ test_tags = matches.to_a[2].gsub(/\s*/, '').split(',')
81
+ if (filters & test_tags).empty?
82
+ # Test doesn't contain any tags to be filtered upon
83
+ filtered_test_paths << test_path
84
+ end
85
+
86
+ else
87
+ # Test has no tags at all
88
+ filtered_test_paths << test_path
89
+ end
90
+
91
+ end
92
+ end
93
+
94
+ test_paths_absolute -= filtered_test_paths
95
+
61
96
  #TODO Display criteria used
62
97
  if test_paths_absolute.empty?
63
98
  puts 'No tests found for given arguments.'
64
- Kernel.exit!(-1)
99
+ Kernel.exit(-1)
65
100
  end
66
101
 
67
102
  # Requires custom initializer if provided by application that uses Moto
data/lib/parser.rb CHANGED
@@ -20,7 +20,8 @@ module Moto
20
20
  else
21
21
  show_help
22
22
  end
23
-
23
+ rescue SystemExit
24
+ nil
24
25
  rescue Exception => e
25
26
  puts e.message + "\n\n"
26
27
  puts e.backtrace.join("\n")
@@ -38,16 +39,17 @@ module Moto
38
39
 
39
40
  # Parse arguments
40
41
  OptionParser.new do |opts|
41
- opts.on('-t', '--tests Tests', Array) { |v| options[:tests ] = v }
42
- opts.on('-g', '--tags Tags', Array) { |v| options[:tags ] = v }
43
- opts.on('-l', '--listeners Listeners', Array) { |v| options[:listeners] = v }
44
- opts.on('-e', '--environment Environment') { |v| options[:environment] = v }
45
- opts.on('-n', '--name Name') { |v| options[:name] = v }
46
- opts.on('-c', '--config Config') { |v| options[:config_name] = v}
42
+ opts.on('-t', '--tests Tests', Array) { |v| options[:tests] = v }
43
+ opts.on('-g', '--tags Tags', Array) { |v| options[:tags] = v }
44
+ opts.on('-f', '--filters Filters', Array) { |v| options[:filters] = v }
45
+ opts.on('-l', '--listeners Listeners', Array) { |v| options[:listeners] = v }
46
+ opts.on('-e', '--environment Environment') { |v| options[:environment] = v }
47
+ opts.on('-n', '--name Name') { |v| options[:name] = v }
48
+ opts.on('-c', '--config Config') { |v| options[:config_name] = v }
47
49
  end.parse!
48
50
 
49
51
  if options[:name].empty?
50
- options[:name] = evaluate_name(options[:tags], options[:tests])
52
+ options[:name] = evaluate_name(options[:tags], options[:tests], options[:filters])
51
53
  end
52
54
 
53
55
  if options[:environment]
@@ -55,23 +57,29 @@ module Moto
55
57
  Moto::Lib::Config.load_configuration(options[:config_name] ? options[:config_name] : 'moto')
56
58
  else
57
59
  puts 'ERROR: Environment is mandatory.'
58
- exit 1
60
+ Kernel.exit(-1)
59
61
  end
60
62
 
61
-
62
63
  return options
63
64
  end
64
65
 
65
- def self.evaluate_name(tags, tests)
66
- tags ||= ''
67
- tests ||= ''
68
- if !tags.empty? && !tests.empty?
69
- return "#{tags.count} tags + #{tests.count} tests"
70
- elsif tags.empty?
71
- return tests.count == 1 ? "Test: #{tests.first}" : "#{tests.count} tests"
72
- elsif tests.empty?
73
- return tags.count == 1 ? "Tag: #{tags.first}" : "#{tags.count} tags"
66
+ # Generate default name based on input parameters
67
+ def self.evaluate_name(tests, tags, filters)
68
+ name = ''
69
+
70
+ if tests
71
+ name << "Tests: #{tests.join(',')} "
72
+ end
73
+
74
+ if tags
75
+ name << "Tags: #{tags.join(',')} "
74
76
  end
77
+
78
+ if filters
79
+ name << "Filters: #{filters.join(',')} "
80
+ end
81
+
82
+ return name
75
83
  end
76
84
 
77
85
  # Parses attributes passed to the application when run by 'moto generate'
@@ -103,8 +111,12 @@ module Moto
103
111
  -t, --tests Tests to be executed.
104
112
  -g, --tags Tags of tests to be executed.
105
113
  Use # MOTO_TAGS: TAGNAME in test to assign tag.
114
+ -f, --filters Tags that filter tests passed via -t parameter.
115
+ Only tests in appropriate directory, having appropriate tag will be executed.
116
+ Use # MOTO_TAGS: TAGNAME in test to assign tag.
106
117
  -l, --listeners Reporters to be used.
107
- Defaults are Moto::Listeners::ConsoleDots, Moto::Listeners::JunitXml
118
+ Defaults are Moto::Reporting::Listeners::ConsoleDots, Moto::Reporting::Listeners::JunitXml
119
+ One reporter that is always used: Moto::Reporting::Listeners::KernelCode
108
120
  -e, --environment Mandatory environment. Environment constants and tests parametrized in certain way depend on this.
109
121
  -c, --config Name of the config, without extension, to be loaded from MotoApp/config/CONFIG_NAME.rb
110
122
  Default: moto (which loads: MotoApp/config/moto.rb)
@@ -52,7 +52,7 @@ module Moto
52
52
  @test_reporter.report_end_run
53
53
 
54
54
  # Exit application with appropriate code generated by KernelCode listener
55
- Kernel.exit!(Moto::Reporting::Listeners::KernelCode.code)
55
+ Kernel.exit(Moto::Reporting::Listeners::KernelCode.code)
56
56
  end
57
57
 
58
58
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Moto
2
- VERSION = '0.8.4'
2
+ VERSION = '0.8.5'
3
3
  end
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.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartek Wilczek
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-09-08 00:00:00.000000000 Z
14
+ date: 2016-09-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport