scudco-taza 0.8.1

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 (63) hide show
  1. data/History.txt +44 -0
  2. data/Manifest.txt +61 -0
  3. data/README +79 -0
  4. data/README.textile +1 -0
  5. data/VERSION.yml +4 -0
  6. data/bin/taza +17 -0
  7. data/generators/flow/flow_generator.rb +57 -0
  8. data/generators/flow/templates/flow.rb.erb +9 -0
  9. data/generators/page/page_generator.rb +58 -0
  10. data/generators/page/templates/functional_page_spec.rb.erb +8 -0
  11. data/generators/page/templates/page.rb.erb +8 -0
  12. data/generators/partial/partial_generator.rb +57 -0
  13. data/generators/partial/templates/partial.rb.erb +7 -0
  14. data/generators/site/site_generator.rb +56 -0
  15. data/generators/site/templates/site.rb.erb +10 -0
  16. data/generators/site/templates/site.yml.erb +3 -0
  17. data/lib/app_generators/taza/taza_generator.rb +72 -0
  18. data/lib/app_generators/taza/templates/config.yml.erb +3 -0
  19. data/lib/app_generators/taza/templates/rakefile.rb.erb +3 -0
  20. data/lib/app_generators/taza/templates/spec_helper.rb.erb +11 -0
  21. data/lib/extensions/array.rb +10 -0
  22. data/lib/extensions/hash.rb +5 -0
  23. data/lib/extensions/object.rb +24 -0
  24. data/lib/extensions/string.rb +11 -0
  25. data/lib/taza/browser.rb +33 -0
  26. data/lib/taza/entity.rb +34 -0
  27. data/lib/taza/fixture.rb +66 -0
  28. data/lib/taza/flow.rb +40 -0
  29. data/lib/taza/page.rb +95 -0
  30. data/lib/taza/settings.rb +47 -0
  31. data/lib/taza/site.rb +145 -0
  32. data/lib/taza/tasks.rb +50 -0
  33. data/lib/taza.rb +35 -0
  34. data/spec/array_spec.rb +16 -0
  35. data/spec/browser_spec.rb +63 -0
  36. data/spec/entity_spec.rb +9 -0
  37. data/spec/fixture_spec.rb +34 -0
  38. data/spec/fixtures_spec.rb +21 -0
  39. data/spec/flow_generator_spec.rb +50 -0
  40. data/spec/hash_spec.rb +12 -0
  41. data/spec/object_spec.rb +29 -0
  42. data/spec/page_generator_spec.rb +56 -0
  43. data/spec/page_spec.rb +82 -0
  44. data/spec/partial_generator_spec.rb +38 -0
  45. data/spec/project_generator_spec.rb +41 -0
  46. data/spec/sandbox/config/config.yml +1 -0
  47. data/spec/sandbox/config/site_name.yml +5 -0
  48. data/spec/sandbox/config.yml +3 -0
  49. data/spec/sandbox/fixtures/examples.yml +8 -0
  50. data/spec/sandbox/fixtures/users.yml +2 -0
  51. data/spec/sandbox/flows/batman.rb +5 -0
  52. data/spec/sandbox/flows/robin.rb +4 -0
  53. data/spec/sandbox/pages/foo/bar.rb +9 -0
  54. data/spec/sandbox/pages/foo/partials/partial_the_reckoning.rb +2 -0
  55. data/spec/settings_spec.rb +88 -0
  56. data/spec/site_generator_spec.rb +57 -0
  57. data/spec/site_spec.rb +229 -0
  58. data/spec/spec_helper.rb +57 -0
  59. data/spec/string_spec.rb +7 -0
  60. data/spec/taza_bin_spec.rb +14 -0
  61. data/spec/taza_spec.rb +12 -0
  62. data/spec/taza_tasks_spec.rb +41 -0
  63. metadata +181 -0
data/spec/site_spec.rb ADDED
@@ -0,0 +1,229 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+ require 'taza'
4
+
5
+ describe Taza::Site do
6
+
7
+ before :all do
8
+ @pages_path = File.join("spec","sandbox","pages","foo","**","*.rb")
9
+ @flows_path = File.join("spec","sandbox","flows","*.rb")
10
+ Foo = Class.new(Taza::Site)
11
+ end
12
+
13
+ before :each do
14
+ Foo.any_instance.stubs(:pages_path).returns(@pages_path)
15
+ ENV['BROWSER'] = nil
16
+ ENV['DRIVER'] = nil
17
+ Taza::Settings.stubs(:config_file).returns({})
18
+ Taza::Settings.stubs(:site_file).returns({})
19
+ Taza::Site.before_browser_closes {}
20
+ end
21
+
22
+ it "pages_path should contain the site class name" do
23
+ browser = stub_browser
24
+ Taza::Browser.stubs(:create).returns(browser)
25
+ Bax = Class.new(Taza::Site)
26
+ Bax.new.pages_path.should eql("./lib/sites/bax/pages/**/*.rb")
27
+ end
28
+
29
+ it "should have flows defined as instance methods" do
30
+ browser = stub_browser
31
+ Taza::Browser.stubs(:create).returns(browser)
32
+ Barz = Class.new(Taza::Site)
33
+ Barz.any_instance.stubs(:path).returns('spec/sandbox')
34
+ Barz.any_instance.stubs(:flows_path).returns(@flows_path)
35
+ Barz.new.batman_flow.should == "i am batman"
36
+ end
37
+
38
+ it "should open watir browsers at the configuration URL" do
39
+ browser = stub_browser
40
+ browser.expects(:goto).with('a_url')
41
+ Taza::Browser.stubs(:create).returns(browser)
42
+ Taza::Settings.stubs(:config).returns(:url => 'a_url')
43
+ Foo.new
44
+ end
45
+
46
+ it "should yield an instance of a page class" do
47
+ f = Foo.new(:browser => stub_browser)
48
+ barzor = nil
49
+ f.bar do |bar|
50
+ barzor = bar
51
+ end
52
+ barzor.should be_an_instance_of(Bar)
53
+ end
54
+
55
+ it "should accept a browser instance" do
56
+ browser = stub_browser
57
+ foo = Foo.new(:browser => browser)
58
+ foo.browser.should eql(browser)
59
+
60
+ end
61
+
62
+ it "should create a browser instance if one is not provided" do
63
+ browser = stub_browser
64
+ Taza::Browser.stubs(:create).returns(browser)
65
+ foo = Foo.new
66
+ foo.browser.should eql(browser)
67
+ end
68
+
69
+ it "should still close browser if an error is raised" do
70
+ browser = stub_browser
71
+ browser.expects(:close)
72
+ Taza::Browser.stubs(:create).returns(browser)
73
+ lambda { Foo.new { |site| raise StandardError}}.should raise_error
74
+ end
75
+
76
+ it "should not close browser if block not given" do
77
+ browser = stub
78
+ browser.stubs(:goto)
79
+ browser.expects(:close).never
80
+ Taza::Browser.stubs(:create).returns(browser)
81
+ Foo.new
82
+ end
83
+
84
+ it "should not close browser if an error is raised on browser goto" do
85
+ browser = Object.new
86
+ browser.stubs(:goto).raises(StandardError,"ErrorOnBrowserGoto")
87
+ browser.expects(:close).never
88
+ Taza::Browser.stubs(:create).returns(browser)
89
+ lambda { Foo.new }.should raise_error(StandardError,"ErrorOnBrowserGoto")
90
+ end
91
+
92
+ it "should raise browser close error if no other errors" do
93
+ browser = stub_browser
94
+ browser.expects(:close).raises(StandardError,"BrowserCloseError")
95
+ Taza::Browser.stubs(:create).returns(browser)
96
+ lambda { Foo.new {}}.should raise_error(StandardError,"BrowserCloseError")
97
+ end
98
+
99
+ it "should raise error inside block if both it and browser.close throws an error" do
100
+ browser = stub_browser
101
+ browser.expects(:close).raises(StandardError,"BrowserCloseError")
102
+ Taza::Browser.stubs(:create).returns(browser)
103
+ lambda { Foo.new { |site| raise StandardError, "innererror" }}.should raise_error(StandardError,"innererror")
104
+ end
105
+
106
+ it "should close a browser if block given" do
107
+ browser = stub_browser
108
+ browser.expects(:close)
109
+ Taza::Browser.stubs(:create).returns(browser)
110
+ Foo.new do |site|
111
+ end
112
+ end
113
+
114
+ it "should yield itself upon initialization" do
115
+ Taza::Browser.stubs(:create).returns(stub_browser)
116
+ foo = nil
117
+ f = Foo.new do |site|
118
+ foo = site
119
+ end
120
+ foo.should eql(f)
121
+ end
122
+
123
+ it "should yield after page methods have been setup" do
124
+ Taza::Browser.stubs(:create).returns(stub_browser)
125
+ klass = Class::new(Taza::Site)
126
+ klass.any_instance.stubs(:pages_path).returns(@pages_path)
127
+ klass.new do |site|
128
+ site.should respond_to(:bar)
129
+ end
130
+ end
131
+
132
+ it "should yield after browser has been setup" do
133
+ Taza::Browser.stubs(:create).returns(stub_browser)
134
+ klass = Class::new(Taza::Site)
135
+ klass.any_instance.stubs(:pages_path).returns(@pages_path)
136
+ klass.new do |site|
137
+ site.browser.should_not be_nil
138
+ end
139
+ end
140
+
141
+ it "should pass its browser instance to its pages " do
142
+ browser = stub_browser
143
+ Taza::Browser.stubs(:create).returns(browser)
144
+ foo = Foo.new
145
+ foo.bar.browser.should eql(browser)
146
+ end
147
+
148
+ it "should add partials defined under the pages directory" do
149
+ Taza::Browser.stubs(:create).returns(stub_browser)
150
+ klass = Class::new(Taza::Site)
151
+ klass.any_instance.stubs(:pages_path).returns(@pages_path)
152
+ klass.new do |site|
153
+ site.partial_the_reckoning
154
+ end
155
+ end
156
+
157
+ it "should have a way to evaluate a block of code before site closes the browser" do
158
+ browser = stub()
159
+ browser.stubs(:goto)
160
+ Taza::Browser.stubs(:create).returns(browser)
161
+ browser_state = states('browser_open_state').starts_as('on')
162
+ browser.expects(:close).then(browser_state.is('off'))
163
+ browser.expects(:doit).when(browser_state.is('on'))
164
+ Taza::Site.before_browser_closes { |browser| browser.doit }
165
+ Foo.new {}
166
+ end
167
+
168
+ it "should have a way to evaluate a block of code before site closes the browser if an error occurs" do
169
+ browser = stub()
170
+ browser.stubs(:goto)
171
+ Taza::Browser.stubs(:create).returns(browser)
172
+ browser_state = states('browser_open_state').starts_as('on')
173
+ browser.expects(:close).then(browser_state.is('off'))
174
+ browser.expects(:doit).when(browser_state.is('on'))
175
+ Taza::Site.before_browser_closes { |browser| browser.doit }
176
+ lambda { Foo.new { |site| raise StandardError, "innererror" }}.should raise_error(StandardError,"innererror")
177
+ end
178
+
179
+ it "should still close its browser if #before_browser_closes raises an exception" do
180
+ browser = stub()
181
+ browser.stubs(:goto)
182
+ Taza::Browser.stubs(:create).returns(browser)
183
+ browser.expects(:close)
184
+ Taza::Site.before_browser_closes { |browser| raise StandardError, 'foo error' }
185
+ lambda { Foo.new {} }.should raise_error(StandardError,'foo error')
186
+ end
187
+
188
+ it "should not close a browser it did not make" do
189
+ browser = stub()
190
+ browser.stubs(:goto)
191
+ browser.expects(:close).never
192
+ Foo.new(:browser => browser) {}
193
+ end
194
+
195
+ it "should close a browser it did make" do
196
+ browser = stub()
197
+ Taza::Browser.stubs(:create).returns(browser)
198
+ browser.stubs(:goto)
199
+ browser.expects(:close)
200
+ Foo.new() {}
201
+ end
202
+
203
+
204
+ module Zoro
205
+ class Zoro < ::Taza::Site
206
+ end
207
+ end
208
+
209
+ it "should pass in the class name to settings config" do
210
+ browser = stub()
211
+ browser.stubs(:goto)
212
+ Taza::Browser.stubs(:create).returns(browser)
213
+ Taza::Settings.expects(:config).with('Zoro').returns({})
214
+ Zoro::Zoro.new
215
+ end
216
+
217
+ it "should load settings based on the sites class name" do
218
+ Taza::Settings.expects(:site_file).with('Zoro').returns({})
219
+ Zoro::Zoro.settings
220
+ end
221
+
222
+ def stub_browser
223
+ browser = stub()
224
+ browser.stubs(:close)
225
+ browser.stubs(:goto)
226
+ browser
227
+ end
228
+
229
+ end
@@ -0,0 +1,57 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'mocha'
4
+ require 'config/vendorized_gems'
5
+ lib_path = File.expand_path("#{File.dirname(__FILE__)}/../lib")
6
+ $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
7
+
8
+
9
+ Spec::Runner.configure do |config|
10
+ config.mock_with :mocha
11
+ end
12
+
13
+ def null_device
14
+ File.exists?('/dev/null') ? '/dev/null' : 'NUL'
15
+ end
16
+
17
+ #### Rubigen helpers
18
+ require 'rubigen'
19
+ require 'rubigen/helpers/generator_test_helper'
20
+
21
+ # Must set before requiring generator libs.
22
+ TMP_ROOT = File.join(File.dirname(__FILE__),"sandbox","generated")
23
+ PROJECT_NAME = 'example'
24
+ PROJECT_FOLDER = File.join(TMP_ROOT,PROJECT_NAME)
25
+ APP_ROOT = File.join(TMP_ROOT, PROJECT_NAME)
26
+
27
+ def generator_sources
28
+ [RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..","lib", "app_generators")),
29
+ RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", "generators"))]
30
+ end
31
+
32
+ module Helpers
33
+ module Generator
34
+ def generate_site(site_name)
35
+ site_name = "#{site_name}#{Time.now.to_i}"
36
+ run_generator('site', [site_name], generator_sources)
37
+ site_file_path = File.join(PROJECT_FOLDER,'lib','sites',"#{site_name.underscore}.rb")
38
+ require site_file_path
39
+ "::#{site_name.camelize}::#{site_name.camelize}".constantize.any_instance.stubs(:base_path).returns(PROJECT_FOLDER)
40
+ site_name.camelize.constantize
41
+ end
42
+ end
43
+
44
+ module Taza
45
+ def stub_settings
46
+ ::Taza::Settings.stubs(:config).returns({})
47
+ end
48
+
49
+ def stub_browser
50
+ stub_browser = stub()
51
+ stub_browser.stubs(:goto)
52
+ stub_browser.stubs(:close)
53
+ ::Taza::Browser.stubs(:create).returns(stub_browser)
54
+ end
55
+ end
56
+ end
57
+ #### Rubigen helpers end
@@ -0,0 +1,7 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe "string extensions" do
4
+ it "should pluralize and to sym a string" do
5
+ "apple".pluralize_to_sym.should eql(:apples)
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+ require 'fileutils'
4
+ require 'taza'
5
+
6
+ describe "Taza project generator script" do
7
+
8
+ it "should have an executable script" do
9
+ path = 'spec/sandbox/generators'
10
+ taza_bin = "#{File.expand_path(File.dirname(__FILE__)+'/../bin/taza')} #{path}"
11
+ system("ruby -c #{taza_bin} > #{null_device}").should be_true
12
+ end
13
+
14
+ end
data/spec/taza_spec.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+
4
+ describe "Taza GIVE ME 100% COVERAGE LOL" do
5
+ it "should cover the windows method" do
6
+ Taza.windows?
7
+ end
8
+
9
+ it "should cover the osx method" do
10
+ Taza.osx?
11
+ end
12
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'taglob'
5
+
6
+ describe "Taza Tasks" do
7
+
8
+ before :all do
9
+ @file_name ="./lib/taza/tasks.rb"
10
+ @rake = Rake::Application.new
11
+ Rake.application = @rake
12
+ end
13
+
14
+ before :each do
15
+ Dir.stubs(:taglob).returns([])
16
+ end
17
+
18
+ after :all do
19
+ Rake.application = nil
20
+ end
21
+
22
+ it "should create rake spec tasks for all sites" do
23
+ Dir.stubs(:glob).with('./spec/functional/*/').returns(['./spec/functional/foo/'])
24
+ Dir.stubs(:glob).with('./spec/functional/foo/*_spec.rb').returns([])
25
+ load @file_name
26
+ tasks.include?("spec:functional:foo").should be_true
27
+ end
28
+
29
+ it "should create rake spec tasks for all sites page specs" do
30
+ Dir.expects(:glob).with('./spec/functional/*/').returns(['./spec/functional/foo/'])
31
+ Dir.expects(:glob).with('./spec/functional/foo/*_spec.rb').returns(['./spec/functional/foo/page_spec.rb'])
32
+ load @file_name
33
+ tasks.include?("spec:functional:foo:page").should be_true
34
+ end
35
+
36
+
37
+ def tasks
38
+ @rake.tasks.collect{|task| task.name }
39
+ end
40
+
41
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scudco-taza
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.1
5
+ platform: ruby
6
+ authors:
7
+ - Adam Anderson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-21 00:00:00 -08:00
13
+ default_executable: taza
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: taglob
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.1.1
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: rake
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 0.8.3
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: mocha
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.3
41
+ version:
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ version_requirement:
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.1.11
50
+ version:
51
+ - !ruby/object:Gem::Dependency
52
+ name: rubigen
53
+ version_requirement:
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 1.4.0
59
+ version:
60
+ description: Taza is an opionated browser-based testing framework.
61
+ email: adamandersonis@gmail.com
62
+ executables:
63
+ - taza
64
+ extensions: []
65
+
66
+ extra_rdoc_files:
67
+ - History.txt
68
+ - Manifest.txt
69
+ - README
70
+ files:
71
+ - History.txt
72
+ - Manifest.txt
73
+ - README.textile
74
+ - VERSION.yml
75
+ - bin/taza
76
+ - generators/flow
77
+ - generators/flow/flow_generator.rb
78
+ - generators/flow/templates
79
+ - generators/flow/templates/flow.rb.erb
80
+ - generators/page
81
+ - generators/page/page_generator.rb
82
+ - generators/page/templates
83
+ - generators/page/templates/functional_page_spec.rb.erb
84
+ - generators/page/templates/page.rb.erb
85
+ - generators/partial
86
+ - generators/partial/partial_generator.rb
87
+ - generators/partial/templates
88
+ - generators/partial/templates/partial.rb.erb
89
+ - generators/site
90
+ - generators/site/site_generator.rb
91
+ - generators/site/templates
92
+ - generators/site/templates/site.rb.erb
93
+ - generators/site/templates/site.yml.erb
94
+ - lib/app_generators
95
+ - lib/app_generators/taza
96
+ - lib/app_generators/taza/taza_generator.rb
97
+ - lib/app_generators/taza/templates
98
+ - lib/app_generators/taza/templates/config.yml.erb
99
+ - lib/app_generators/taza/templates/rakefile.rb.erb
100
+ - lib/app_generators/taza/templates/spec_helper.rb.erb
101
+ - lib/extensions
102
+ - lib/extensions/array.rb
103
+ - lib/extensions/hash.rb
104
+ - lib/extensions/object.rb
105
+ - lib/extensions/string.rb
106
+ - lib/taza
107
+ - lib/taza/browser.rb
108
+ - lib/taza/entity.rb
109
+ - lib/taza/fixture.rb
110
+ - lib/taza/flow.rb
111
+ - lib/taza/page.rb
112
+ - lib/taza/settings.rb
113
+ - lib/taza/site.rb
114
+ - lib/taza/tasks.rb
115
+ - lib/taza.rb
116
+ - spec/array_spec.rb
117
+ - spec/browser_spec.rb
118
+ - spec/entity_spec.rb
119
+ - spec/fixture_spec.rb
120
+ - spec/fixtures_spec.rb
121
+ - spec/flow_generator_spec.rb
122
+ - spec/hash_spec.rb
123
+ - spec/object_spec.rb
124
+ - spec/page_generator_spec.rb
125
+ - spec/page_spec.rb
126
+ - spec/partial_generator_spec.rb
127
+ - spec/project_generator_spec.rb
128
+ - spec/sandbox
129
+ - spec/sandbox/config
130
+ - spec/sandbox/config/config.yml
131
+ - spec/sandbox/config/site_name.yml
132
+ - spec/sandbox/config.yml
133
+ - spec/sandbox/fixtures
134
+ - spec/sandbox/fixtures/examples.yml
135
+ - spec/sandbox/fixtures/users.yml
136
+ - spec/sandbox/flows
137
+ - spec/sandbox/flows/batman.rb
138
+ - spec/sandbox/flows/robin.rb
139
+ - spec/sandbox/pages
140
+ - spec/sandbox/pages/foo
141
+ - spec/sandbox/pages/foo/bar.rb
142
+ - spec/sandbox/pages/foo/partials
143
+ - spec/sandbox/pages/foo/partials/partial_the_reckoning.rb
144
+ - spec/settings_spec.rb
145
+ - spec/site_generator_spec.rb
146
+ - spec/site_spec.rb
147
+ - spec/spec_helper.rb
148
+ - spec/string_spec.rb
149
+ - spec/taza_bin_spec.rb
150
+ - spec/taza_spec.rb
151
+ - spec/taza_tasks_spec.rb
152
+ - README
153
+ has_rdoc: true
154
+ homepage: http://github.com/scudco/taza
155
+ post_install_message:
156
+ rdoc_options:
157
+ - --main
158
+ - README
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: "0"
166
+ version:
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: "0"
172
+ version:
173
+ requirements: []
174
+
175
+ rubyforge_project: taza
176
+ rubygems_version: 1.2.0
177
+ signing_key:
178
+ specification_version: 2
179
+ summary: Taza is an opionated browser-based testing framework.
180
+ test_files: []
181
+