browserstack-automate 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9f3653ef44d2bc13fe3355f44b67ed710da7f605
4
+ data.tar.gz: 99de11d249bf913ef82a05cb1c666c2f1fd6b986
5
+ SHA512:
6
+ metadata.gz: 363e2eb4d83e085e9ce5b807e24c871f50d60863eb3aa43ba37a9174720e0a5d0db3279202bad7b52ea6d0a77fdef662498c9393e277caf75619376f9b59e4c7
7
+ data.tar.gz: e341d69f8d35b1c6d28c88d3c222017deac00d66325a1a2cc5c0ec5f1637071a3fcac8a5a56dd6e780cf42b18c8baddc33e5bdee8c109b478a5fc04211939a88
@@ -0,0 +1,6 @@
1
+ node_modules
2
+ selenium*.jar
3
+ tests_output
4
+ *.gemfile
5
+ *.lock
6
+ local.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in browserstack.gemspec
4
+ gemspec
@@ -0,0 +1,71 @@
1
+ # BrowserStack-Automate
2
+
3
+ Run Cucumber tests on BrowserStack Automate using our Ruby integration.
4
+
5
+ > Running your Selenium tests on BrowserStack requires a username and an access key. To create an account go to [BrowserStack Automate](https://www.browserstack.com/automate)
6
+
7
+ ![BrowserStack Logo](https://d98b8t1nnulk5.cloudfront.net/production/images/layout/logo-header.png?1469004780)
8
+
9
+ ## Running First Test
10
+
11
+ You can use our integration to run your Cucumber tests on BrowserStack. It's a simple two-step process:
12
+
13
+ #### Step 1 - Install *browserstack-automate* integration
14
+
15
+ ```
16
+ gem install browserstack-automate
17
+ ```
18
+
19
+ #### Step 2 - Add it to your `support/env.rb` file
20
+
21
+ You just need to add this to your configuration file
22
+
23
+ ```
24
+ require 'browserstack-automate'
25
+ BrowserStack.for "cucumber"
26
+ ```
27
+
28
+ That's it! You can now execute your tests on BrowserStack by using the `RUN_ON_BSTACK`, `BROWSERSTACK_USERNAME` and `BROWSERSTACK_ACCESS_KEY` environment variables.
29
+
30
+ ```bash
31
+ RUN_ON_BSTACK=true BROWSERSTACK_USERNAME=<your_username> BROWSERSTACK_ACCESS_KEY=<your_access_key> bundle exec cucumber
32
+ ```
33
+
34
+ ## Running Local Tests
35
+
36
+ In order to run tests inside your local development environments, use ```BSTACK_LOCAL=true```.
37
+
38
+ ```
39
+ RUN_ON_BSTACK=true BSTACK_LOCAL=true BROWSERSTACK_USERNAME=<username> BROWSERSTACK_ACCESS_KEY=<access_key> bundle exec cucumber
40
+ ```
41
+
42
+ This creates an instance of BrowserStack Local Binary for every single build. To know more about how this works, read our documentation on [Local Testing](https://www.browserstack.com/local-testing).
43
+
44
+
45
+ ## Running Parallel Tests
46
+
47
+ You can run your parallel tests on BrowserStack by adding ```RUN_ON_BSTACK=true``` to your parallel tests.
48
+
49
+ ```
50
+ RUN_ON_BSTACK=true BROWSERSTACK_USERNAME=<username> BROWSERSTACK_ACCESS_KEY=<access_key> bundle exec cucumber
51
+ ```
52
+
53
+ ## Integrating with CI
54
+
55
+ Configure these parameters in your Continuous Integration platform to run your tests directly on BrowserStack
56
+
57
+ ```
58
+ //Required
59
+ RUN_ON_BSTACK - Boolean. To run your tests on BrowserStack
60
+ BROWSERSTACK_USERNAME - your BrowserStack username
61
+ BROWSERSTACK_ACCESS_KEY - your BrowserStack accesskey
62
+
63
+ //Optional
64
+ BSTACK_LOCAL - Boolean. Whether to start/stop BrowserStackLocal for your tests
65
+ ```
66
+
67
+ ## Further Reading
68
+ * [BrowerStack Automate documentation for Cucumber](https://www.browserstack.com/automate/cucumber-integration)
69
+ * [BrowserStack Automate documentation for Ruby](https://www.browserstack.com/automate/ruby)
70
+ * [Full range of testing capabilities on BrowserStack](https://www.browserstack.com/automate/capabilities)
71
+ * [Testing local, development servers with BrowserStack](https://www.browserstack.com/local-testing)
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
3
+ task :spec => [:cucumber]
4
+
5
+ task :cucumber do
6
+ Bundler.with_clean_env do
7
+ system("bundle install")
8
+ system("cd tests/cucumber && bundle install && bundle exec appraisal install && BSTACK_BUILD=BrowserStackPatchCucumberTest RUN_ON_BSTACK=true bundle exec appraisal cucumber")
9
+ end
10
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'browserstack-automate/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "browserstack-automate"
8
+ spec.version = Browserstack::VERSION
9
+ spec.authors = [ "BrowserStack Support" ]
10
+ spec.email = [ "support@browserstack.com" ]
11
+
12
+ spec.description = %q{Run Cucumber tests on BrowserStack Automate using our Ruby integration.}
13
+ spec.summary = %q{Run Cucumber tests on BrowserStack Automate using our Ruby integration.}
14
+ spec.homepage = "https://www.browserstack.com"
15
+
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "selenium-webdriver"
23
+ spec.add_dependency "browserstack-local", "~> 1.2"
24
+ spec.add_dependency "curb", '~> 0'
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.12"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "appraisal", '~> 0'
29
+ end
@@ -0,0 +1,8 @@
1
+ # A sample Gemfile
2
+ source "http://rubygems.org"
3
+
4
+ # gem "rails"
5
+
6
+ gem "cucumber", '2.4.0'
7
+ gem "selenium-webdriver", "2.53.0"
8
+ gem "browserstack-automate", path: "../../"
@@ -0,0 +1,9 @@
1
+ Feature: Google can search
2
+
3
+ Background:
4
+ Given I am on Google
5
+
6
+ Scenario: Search for a term
7
+ When I fill in "q" found by "name" with "BrowserStack"
8
+ And I submit
9
+ Then I should see title "BrowserStack - Google Search"
@@ -0,0 +1,17 @@
1
+ Given /^I am on (.+)$/ do |url|
2
+ @browser.navigate.to "http://www.google.com/ncr"
3
+ end
4
+
5
+ When /^I fill in "([^"]*)" found by "([^\"]*)" with "([^\"]*)"$/ do |value, type, keys|
6
+ @element = @browser.find_element(type, value)
7
+ @element.send_keys keys
8
+ end
9
+
10
+ When /^I submit$/ do
11
+ @element.submit
12
+ sleep 5
13
+ end
14
+
15
+ Then /^I should see title "([^\"]*)"$/ do |title|
16
+ raise "Fail" if @browser.title != title
17
+ end
@@ -0,0 +1,14 @@
1
+ require 'selenium/webdriver'
2
+
3
+ require 'browserstack-automate'
4
+ BrowserStack.for "cucumber"
5
+
6
+ browser = Selenium::WebDriver.for :firefox
7
+
8
+ Before do |scenario|
9
+ @browser = browser
10
+ end
11
+
12
+ at_exit do
13
+ browser.quit
14
+ end
@@ -0,0 +1,7 @@
1
+ # A sample Gemfile
2
+ source "http://rubygems.org"
3
+
4
+ # gem "rails"
5
+
6
+ gem "selenium-webdriver", "~> 3.0.1"
7
+ gem "browserstack-automate", path: "../../"
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'selenium-webdriver'
3
+ require 'browserstack-automate'
4
+
5
+ BrowserStack.for "ruby"
6
+
7
+ @repeat = ENV['REPEAT'] || 5
8
+
9
+ # Input capabilities
10
+ driver = Selenium::WebDriver.for :firefox
11
+
12
+ begin
13
+ driver.navigate.to "http://www.google.com"
14
+ element = driver.find_element(:name, 'q')
15
+ element.send_keys "BrowserStack"
16
+ element.submit
17
+ start = Time.now.to_i
18
+ @repeat.times do
19
+ puts driver.title
20
+ end
21
+ driver.quit
22
+ rescue
23
+ driver.quit
24
+ end
@@ -0,0 +1,74 @@
1
+ require 'selenium/webdriver'
2
+ require 'browserstack/local'
3
+
4
+ $cucumber_after = self.method(:After) rescue nil
5
+
6
+ if ENV['RUN_ON_BSTACK'].to_s.match(/true/)
7
+ require_relative './browserstack-automate/webdriver_patch.rb'
8
+
9
+ # See: https://github.com/SeleniumHQ/selenium/issues/2950
10
+ require_relative './browserstack-automate/keep_alive_patch.rb' unless Gem.loaded_specs["selenium-webdriver"].version.to_s.start_with?("3")
11
+ end
12
+
13
+ module BrowserStack
14
+ @@framework = 'rubyFramework'
15
+ @@bs_local = nil
16
+ @@bstack_identifier = "bstack_patches_#{(0...16).map { ('a'..'z').to_a[rand(26)] }.join}"
17
+
18
+ def self.for(framework)
19
+ @@framework = framework
20
+ end
21
+
22
+ def self.get_framework
23
+ @@framework
24
+ end
25
+
26
+ def self.get_framework_version
27
+ if @@framework.match(/cucumber/i)
28
+ return Cucumber::VERSION
29
+ end
30
+ end
31
+
32
+ def self.get_identifier
33
+ @@bstack_identifier
34
+ end
35
+
36
+ def self.track_environment(track_hash)
37
+ if ENV['TRAVIS'] && ENV['TRAVIS'].match(/true/i)
38
+ track_hash['ci_env'] = 'travis'
39
+ track_hash['ci_env.travis.build_id'] = ENV['TRAVIS_BUILD_ID']
40
+ track_hash['ci_env.travis.build_number'] = ENV['process.env.TRAVIS_BUILD_NUMBER']
41
+ track_hash['ci_env.travis.repo_slug'] = ENV['process.env.TRAVIS_REPO_SLUG']
42
+ track_hash['ci_env.travis.test_result'] = ENV['process.env.TRAVIS_TEST_RESULT']
43
+ elsif ENV['BUILD_TAG'] && ENV['BUILD_TAG'].match(/jenkins/i)
44
+ track_hash['ci_env'] = ENV['jenkins']
45
+ track_hash['ci_env.jenkins.build_id'] = ENV['process.env.BUILD_ID']
46
+ track_hash['ci_env.jenkins.build_number'] = ENV['process.env.BUILD_NUMBER']
47
+ track_hash['ci_env.jenkins.job_name'] = ENV['process.env.JOB_NAME']
48
+ track_hash['ci_env.jenkins.build_tag'] = ENV['process.env.BUILD_TAG']
49
+ track_hash['ci_env.jenkins.git_url'] = ENV['process.env.GIT_URL']
50
+ end
51
+ end
52
+
53
+ private
54
+ def self.start_local
55
+ @@bs_local = BrowserStack::Local.new
56
+ browserstack_access_key = ENV['BROWSERSTACK_ACCESS_KEY'] || ENV['BROWSERSTACK_ACCESSKEY']
57
+ bs_local_args = {
58
+ 'key' => browserstack_access_key,
59
+ 'localIdentifier' => @@bstack_identifier
60
+ }
61
+ @@bs_local.start(bs_local_args)
62
+
63
+ if @@framework.match(/cucumber/i)
64
+ $cucumber_after.call do
65
+ @@bs_local.stop() if @@bs_local
66
+ end
67
+ else
68
+ Signal.trap("EXIT") do
69
+ @@bs_local.stop if @@bs_local
70
+ Kernel.exit!
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,18 @@
1
+ require 'selenium/webdriver/remote/http/curb'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Remote
6
+ class Bridge
7
+ attr_accessor :http_curb
8
+ def http
9
+ unless @http_curb
10
+ @http_curb = Http::Curb.new
11
+ @http_curb.server_url = @http.send(:server_url)
12
+ end
13
+ @http_curb
14
+ end
15
+ end # Bridge
16
+ end # Remote
17
+ end # WebDriver
18
+ end # Selenium
@@ -0,0 +1,3 @@
1
+ module Browserstack
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,42 @@
1
+ module Selenium
2
+ module WebDriver
3
+ class << self
4
+ alias_method :original_for, :for
5
+
6
+ def for(*args)
7
+ browser = args.shift
8
+ browser = nil if browser.to_s.downcase == 'remote'
9
+ opts = args.shift || {}
10
+ opts[:url] = opts[:url] || 'http://127.0.0.1:4444/wd/hub'
11
+ opts[:desired_capabilities] = opts[:desired_capabilities] || {}
12
+
13
+ opts[:desired_capabilities][:browserName] = ENV['BSTACK_BROWSER'] || browser || opts[:desired_capabilities][:browserName] || opts[:desired_capabilities][:browser]
14
+ opts[:desired_capabilities][:browser] = opts[:desired_capabilities][:browserName]
15
+ opts[:desired_capabilities][:browser_version] = ENV['BSTACK_BROWSER_VERSION']
16
+ opts[:desired_capabilities][:os] = ENV['BSTACK_OS']
17
+ opts[:desired_capabilities][:os_version] = ENV['BSTACK_OS_VERSION']
18
+ opts[:desired_capabilities][:device] = ENV['BSTACK_DEVICE']
19
+
20
+ if ENV['RUN_ON_BSTACK'] && ENV['RUN_ON_BSTACK'].match(/true/i)
21
+ browserstack_username = ENV['BROWSERSTACK_USERNAME'] || ENV['BROWSERSTACK_USER']
22
+ browserstack_access_key = ENV['BROWSERSTACK_ACCESS_KEY'] || ENV['BROWSERSTACK_ACCESSKEY']
23
+ opts[:url] = "https://#{browserstack_username}:#{browserstack_access_key}@hub.browserstack.com/wd/hub"
24
+
25
+ opts[:desired_capabilities]['browserstack.framework'] = BrowserStack::get_framework
26
+ opts[:desired_capabilities]['browserstack.framework_version'] = BrowserStack::get_framework_version
27
+ opts[:desired_capabilities]['build'] = ENV['BSTACK_BUILD'] if ENV['BSTACK_BUILD']
28
+ opts[:desired_capabilities]['project'] = ENV['BSTACK_PROJECT'] if ENV['BSTACK_PROJECT']
29
+ opts[:desired_capabilities]['name'] = ENV['BSTACK_NAME'] if ENV['BSTACK_NAME']
30
+ if ENV['BSTACK_LOCAL'] && ENV['BSTACK_LOCAL'].match(/true/i)
31
+ BrowserStack.start_local
32
+ opts[:desired_capabilities]['browserstack.local'] = true
33
+ opts[:desired_capabilities]['browserstack.localIdentifier'] = BrowserStack::get_identifier
34
+ end
35
+ BrowserStack::track_environment(opts[:desired_capabilities])
36
+ end
37
+
38
+ original_for(:remote, opts, *args)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ appraise "cucumber-latest" do
2
+ gem "cucumber"
3
+ end
4
+
5
+ appraise "cucumber-2.4.0" do
6
+ gem "cucumber", "2.4.0"
7
+ end
8
+
9
+ appraise "cucumber-2.0.1" do
10
+ gem "cucumber", "2.0.1"
11
+ end
12
+
13
+ appraise "cucumber-1.3.20" do
14
+ gem "cucumber", "1.3.20"
15
+ end
16
+
17
+ appraise "cucumber-1.2.0" do
18
+ gem "cucumber", "1.2.0"
19
+ end
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+ gem "appraisal"
3
+ gem "browserstack-automate", path: "../../"
@@ -0,0 +1,9 @@
1
+ Feature: Google can search
2
+
3
+ Background:
4
+ Given I am on Google
5
+
6
+ Scenario: Search for a term
7
+ When I fill in "q" found by "name" with "BrowserStack"
8
+ And I submit
9
+ Then I should see title "BrowserStack - Google Search"
@@ -0,0 +1,17 @@
1
+ Given /^I am on (.+)$/ do |url|
2
+ @browser.navigate.to "http://www.google.com/ncr"
3
+ end
4
+
5
+ When /^I fill in "([^"]*)" found by "([^\"]*)" with "([^\"]*)"$/ do |value, type, keys|
6
+ @element = @browser.find_element(type, value)
7
+ @element.send_keys keys
8
+ end
9
+
10
+ When /^I submit$/ do
11
+ @element.submit
12
+ sleep 5
13
+ end
14
+
15
+ Then /^I should see title "([^\"]*)"$/ do |title|
16
+ raise "Fail" if @browser.title != title
17
+ end
@@ -0,0 +1,25 @@
1
+ require 'selenium/webdriver'
2
+ require 'net/http'
3
+ require 'json'
4
+
5
+ require 'browserstack-automate'
6
+ BrowserStack.for "cucumber"
7
+
8
+ browser = Selenium::WebDriver.for :firefox
9
+
10
+ Before do |scenario|
11
+ @browser = browser
12
+ end
13
+
14
+ at_exit do
15
+ sess_id = browser.session_id
16
+ browser.quit
17
+
18
+ url = URI("https://www.browserstack.com/automate/sessions/#{sess_id}.json")
19
+ Net::HTTP.start(url.host, url.port, :use_ssl => url.scheme == 'https') do |http|
20
+ request = Net::HTTP::Get.new url.request_uri
21
+ request.basic_auth ENV['BROWSERSTACK_USERNAME'], ENV['BROWSERSTACK_ACCESS_KEY']
22
+ response = http.request request
23
+ puts "Session status was not 'done'" && Kernel.exit!(1) if not JSON.parse(response.body)["automation_session"]["status"].match(/done/)
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: browserstack-automate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - BrowserStack Support
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-11-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: selenium-webdriver
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: browserstack-local
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: curb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: appraisal
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Run Cucumber tests on BrowserStack Automate using our Ruby integration.
98
+ email:
99
+ - support@browserstack.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - Gemfile
106
+ - README.md
107
+ - Rakefile
108
+ - browserstack.gemspec
109
+ - examples/cucumber/Gemfile
110
+ - examples/cucumber/features/google.feature
111
+ - examples/cucumber/features/step_definitions/google_steps.rb
112
+ - examples/cucumber/features/support/env.rb
113
+ - examples/simple_sample/Gemfile
114
+ - examples/simple_sample/sample.rb
115
+ - lib/browserstack-automate.rb
116
+ - lib/browserstack-automate/keep_alive_patch.rb
117
+ - lib/browserstack-automate/version.rb
118
+ - lib/browserstack-automate/webdriver_patch.rb
119
+ - tests/cucumber/Appraisals
120
+ - tests/cucumber/Gemfile
121
+ - tests/cucumber/features/google.feature
122
+ - tests/cucumber/features/step_definitions/google_steps.rb
123
+ - tests/cucumber/features/support/env.rb
124
+ homepage: https://www.browserstack.com
125
+ licenses: []
126
+ metadata: {}
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 2.4.8
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: Run Cucumber tests on BrowserStack Automate using our Ruby integration.
147
+ test_files: []