cucumber-rails 1.6.0 → 1.7.0
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/.gitignore +2 -1
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +443 -0
- data/.travis.yml +22 -20
- data/Appraisals +17 -81
- data/CHANGELOG.md +68 -11
- data/CONTRIBUTING.md +12 -11
- data/LICENSE +1 -1
- data/README.md +22 -14
- data/bin/install_geckodriver.sh +19 -0
- data/bin/install_webpacker.sh +9 -0
- data/config/cucumber.yml +0 -3
- data/cucumber-rails.gemspec +10 -12
- data/features/allow_rescue.feature +8 -4
- data/features/annotations.feature +0 -1
- data/features/emulate_javascript.feature +2 -2
- data/features/install_cucumber_rails.feature +1 -1
- data/features/rest_api.feature +2 -2
- data/features/step_definitions/cucumber_rails_steps.rb +41 -25
- data/gemfiles/rails_4_2.gemfile +3 -12
- data/gemfiles/rails_5_0.gemfile +3 -11
- data/gemfiles/rails_5_1.gemfile +3 -10
- data/gemfiles/rails_5_2.gemfile +3 -10
- data/gemfiles/rails_6_0.gemfile +8 -0
- data/lib/cucumber/rails/action_controller.rb +1 -0
- data/lib/cucumber/rails/capybara/javascript_emulation.rb +3 -16
- data/lib/generators/cucumber/install/install_generator.rb +5 -1
- metadata +35 -75
- data/Gemfile.appraisal +0 -3
- data/gemfiles/rails_4_0.gemfile +0 -22
- data/gemfiles/rails_4_1.gemfile +0 -20
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License
|
2
2
|
|
3
|
-
Copyright (c) 2008
|
3
|
+
Copyright (c) 2008-2019 Aslak Hellesøy and the Cucumber Team.
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
6
6
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
@@ -3,20 +3,22 @@
|
|
3
3
|
[](http://badge.fury.io/rb/cucumber-rails)
|
4
4
|
[](http://travis-ci.org/cucumber/cucumber-rails)
|
5
5
|
[](https://codeclimate.com/github/cucumber/cucumber-rails)
|
6
|
-
[](https://gemnasium.com/Kosmas/cucumber-rails)
|
7
6
|
[](https://www.codetriage.com/cucumber/cucumber-rails)
|
8
7
|
|
9
|
-
Cucumber-Rails brings Cucumber to Rails 4.
|
8
|
+
Cucumber-Rails brings Cucumber to Rails 4.2 and Rails 5.x. This gem is also compatible with Rails 6.0+
|
9
|
+
but this is currently in a beta phase, so there may be issues.
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
13
13
|
Before you can use the generator, add the gem to your project's Gemfile as follows:
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
```ruby
|
16
|
+
group :test do
|
17
|
+
gem 'cucumber-rails', require: false
|
18
|
+
# database_cleaner is not required, but highly recommended
|
19
|
+
gem 'database_cleaner'
|
20
|
+
end
|
21
|
+
```
|
20
22
|
|
21
23
|
Then install it by running:
|
22
24
|
|
@@ -44,9 +46,11 @@ Without Rake:
|
|
44
46
|
|
45
47
|
By default, cucumber-rails runs `DatabaseCleaner.start` and `DatabaseCleaner.clean` before and after your scenarios. You can disable this behaviour like so:
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
```ruby
|
50
|
+
# features/support/env.rb
|
51
|
+
# ...
|
52
|
+
Cucumber::Rails::Database.autorun_database_cleaner = false
|
53
|
+
```
|
50
54
|
|
51
55
|
## Upgrading from a previous version
|
52
56
|
|
@@ -67,10 +71,12 @@ If you know how to fix the bug yourself, make a second commit (after committing
|
|
67
71
|
|
68
72
|
### Setting up your environment
|
69
73
|
|
70
|
-
|
74
|
+
Make sure you have a supported ruby installed, cd into your cucumber-rails repository and:
|
71
75
|
|
72
76
|
gem install bundler
|
73
77
|
bundle install
|
78
|
+
bin/install_geckodriver.sh
|
79
|
+
bin/install_webpacker.sh
|
74
80
|
|
75
81
|
### Running all tests
|
76
82
|
|
@@ -87,7 +93,7 @@ In order to test against multiple versions of key dependencies, the [Appraisal](
|
|
87
93
|
|
88
94
|
To run the suite against a named gemfile, use the following:
|
89
95
|
|
90
|
-
[bundle exec] appraisal
|
96
|
+
[bundle exec] appraisal rails_4_2 rake test
|
91
97
|
|
92
98
|
To remove and rebuild the different gemfiles (for example, to update a rails version or its dependencies), use the following:
|
93
99
|
|
@@ -105,9 +111,11 @@ To support the multiple-gemfile testing, when adding a new dependency the follow
|
|
105
111
|
|
106
112
|
1. If it's a runtime dependency of the gem, add it to the gemspec
|
107
113
|
2. If it's a primary development dependency, add it to the gemspec
|
108
|
-
3. If it's a dependency of a generated rails app in a test, add it to the
|
114
|
+
3. If it's a dependency of a generated rails app in a test, add it to [the helper] that modifies that Gemfile.
|
109
115
|
|
110
|
-
For example, rspec is a primary development dependency, so it lives in the gemspec.
|
116
|
+
For example, rspec is a primary development dependency, so it lives in the gemspec.
|
117
|
+
|
118
|
+
[the helper]: https://github.com/cucumber/cucumber-rails/blob/5e37c530560ae1c1a79521c38a54bae0be94242b/features/step_definitions/cucumber_rails_steps.rb#L15
|
111
119
|
|
112
120
|
### NOTE
|
113
121
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -xeuo pipefail
|
4
|
+
|
5
|
+
curl --silent \
|
6
|
+
--show-error \
|
7
|
+
--location \
|
8
|
+
--fail \
|
9
|
+
--retry 3 \
|
10
|
+
--output /tmp/geckodriver_linux64.tar.gz \
|
11
|
+
https://github.com/mozilla/geckodriver/releases/download/v0.23.0/geckodriver-v0.23.0-linux64.tar.gz
|
12
|
+
|
13
|
+
sudo tar -C /usr/local/bin -xvzf /tmp/geckodriver_linux64.tar.gz geckodriver
|
14
|
+
|
15
|
+
rm /tmp/geckodriver_linux64.tar.gz
|
16
|
+
|
17
|
+
geckodriver --version
|
18
|
+
|
19
|
+
set +x
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -xeuo pipefail
|
4
|
+
|
5
|
+
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
6
|
+
echo 'deb https://dl.yarnpkg.com/debian/ stable main' | sudo tee /etc/apt/sources.list.d/yarn.list
|
7
|
+
sudo apt update && sudo apt install --yes yarn
|
8
|
+
|
9
|
+
set +x
|
data/config/cucumber.yml
CHANGED
@@ -12,9 +12,6 @@ opts = [
|
|
12
12
|
"--format rerun -o #{rerun_file}"
|
13
13
|
]
|
14
14
|
rails_version = `bundle exec rails --version`.match(/[\d.]+$/).to_s
|
15
|
-
if Gem::Version.new(rails_version) < Gem::Version.new('4.2')
|
16
|
-
opts << "--tags 'not @requires-rails-version-42'"
|
17
|
-
end
|
18
15
|
optlist = opts.join(' ')
|
19
16
|
%>
|
20
17
|
default: <%= path %> <%= optlist %> --tags 'not @broken'
|
data/cucumber-rails.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'cucumber-rails'
|
6
|
-
s.version = '1.
|
6
|
+
s.version = '1.7.0'
|
7
7
|
s.authors = ["Aslak Hellesøy", "Dennis Blöte", "Rob Holland"]
|
8
8
|
s.description = "Cucumber Generator and Runtime for Rails"
|
9
9
|
s.summary = "#{s.name}-#{s.version}"
|
@@ -12,25 +12,24 @@ Gem::Specification.new do |s|
|
|
12
12
|
|
13
13
|
s.license = 'MIT'
|
14
14
|
|
15
|
-
s.
|
15
|
+
s.required_ruby_version = '>= 2.2'
|
16
|
+
|
17
|
+
s.add_runtime_dependency('capybara', ['>= 2.3.0', '< 4'])
|
16
18
|
s.add_runtime_dependency('cucumber', ['>= 3.0.2', '< 4'])
|
17
19
|
s.add_runtime_dependency('nokogiri', '~> 1.8')
|
18
|
-
s.add_runtime_dependency('railties', ['>= 4', '<
|
20
|
+
s.add_runtime_dependency('railties', ['>= 4.2', '< 7'])
|
19
21
|
s.add_runtime_dependency('mime-types', ['>= 1.17', '< 4'])
|
20
22
|
|
21
23
|
# Main development dependencies
|
22
24
|
s.add_development_dependency('ammeter', ['>= 1.0.0', '!= 1.1.3'])
|
23
25
|
s.add_development_dependency('appraisal', '>= 0.5.1')
|
24
26
|
s.add_development_dependency('aruba', '~> 0.14.2')
|
25
|
-
s.add_development_dependency('builder', ['>= 3.1.0', '< 4'])
|
26
27
|
s.add_development_dependency('bundler', '>= 1.3.5')
|
27
|
-
s.add_development_dependency('
|
28
|
-
s.add_development_dependency('
|
29
|
-
s.add_development_dependency('
|
30
|
-
s.add_development_dependency('
|
31
|
-
s.add_development_dependency('
|
32
|
-
s.add_development_dependency('rails')
|
33
|
-
s.add_development_dependency('sqlite3')
|
28
|
+
s.add_development_dependency('rubocop', '~> 0.66.0')
|
29
|
+
s.add_development_dependency('rake', '>= 10.3')
|
30
|
+
s.add_development_dependency('rspec', '~> 3.5')
|
31
|
+
s.add_development_dependency('rails', ['>= 4.2', '< 7'])
|
32
|
+
s.add_development_dependency('sqlite3', '~> 1.3.13')
|
34
33
|
|
35
34
|
# For Documentation:
|
36
35
|
s.add_development_dependency('rdiscount', '>= 2.0.7')
|
@@ -41,6 +40,5 @@ Gem::Specification.new do |s|
|
|
41
40
|
s.rubygems_version = ">= 1.6.1"
|
42
41
|
s.files = `git ls-files`.split("\n")
|
43
42
|
s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
|
44
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
45
43
|
s.require_path = "lib"
|
46
44
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Allow Cucumber to rescue exceptions
|
2
2
|
|
3
3
|
Background: A controller that raises an exception
|
4
|
-
Given I have created a new Rails app "rails-
|
4
|
+
Given I have created a new Rails app "rails-app" and installed cucumber-rails
|
5
5
|
And I write to "app/controllers/posts_controller.rb" with:
|
6
6
|
"""
|
7
7
|
class PostsController < ApplicationController
|
@@ -12,7 +12,7 @@ Feature: Allow Cucumber to rescue exceptions
|
|
12
12
|
"""
|
13
13
|
And I write to "config/routes.rb" with:
|
14
14
|
"""
|
15
|
-
|
15
|
+
RailsApp::Application.routes.draw do
|
16
16
|
resources :posts
|
17
17
|
end
|
18
18
|
"""
|
@@ -23,20 +23,24 @@ Feature: Allow Cucumber to rescue exceptions
|
|
23
23
|
Feature: posts
|
24
24
|
@allow-rescue
|
25
25
|
Scenario: See posts
|
26
|
-
|
26
|
+
When I look at the posts
|
27
|
+
Then I should see the public error page
|
27
28
|
"""
|
28
29
|
And I write to "features/step_definitions/posts_steps.rb" with:
|
29
30
|
"""
|
30
31
|
When /^I look at the posts$/ do
|
31
32
|
visit '/posts'
|
32
33
|
end
|
34
|
+
Then /^I should see the public error page$/ do
|
35
|
+
expect(page).to have_content "We're sorry, but something went wrong."
|
36
|
+
end
|
33
37
|
"""
|
34
38
|
And I run `bundle exec rake db:migrate`
|
35
39
|
And I run `bundle exec cucumber`
|
36
40
|
Then the feature run should pass with:
|
37
41
|
"""
|
38
42
|
1 scenario (1 passed)
|
39
|
-
|
43
|
+
2 steps (2 passed)
|
40
44
|
"""
|
41
45
|
|
42
46
|
Scenario: Don't allow rescue
|
@@ -23,7 +23,7 @@ Feature: Emulate Javascript
|
|
23
23
|
"""
|
24
24
|
FactoryBot.define do
|
25
25
|
factory :widget do
|
26
|
-
name 'testwidget'
|
26
|
+
name { 'testwidget' }
|
27
27
|
end
|
28
28
|
end
|
29
29
|
"""
|
@@ -80,7 +80,7 @@ Feature: Emulate Javascript
|
|
80
80
|
"""
|
81
81
|
FactoryBot.define do
|
82
82
|
factory :widget do
|
83
|
-
name 'testwidget'
|
83
|
+
name { 'testwidget' }
|
84
84
|
end
|
85
85
|
end
|
86
86
|
"""
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Rails
|
2
2
|
In order to take over the world
|
3
3
|
Cucumber-Rails should work on major versions
|
4
|
-
of Rails
|
4
|
+
of Rails and Ruby, with Capybara, Spork and DatabaseCleaner
|
5
5
|
|
6
6
|
Scenario: Install Cucumber-Rails
|
7
7
|
Given I have created a new Rails app and installed cucumber-rails
|
data/features/rest_api.feature
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: REST API
|
2
2
|
|
3
3
|
Scenario: Compare JSON
|
4
|
-
Given I have created a new Rails app "rails-
|
4
|
+
Given I have created a new Rails app "rails-app" and installed cucumber-rails
|
5
5
|
And I write to "app/controllers/posts_controller.rb" with:
|
6
6
|
"""
|
7
7
|
class PostsController < ApplicationController
|
@@ -12,7 +12,7 @@ Feature: REST API
|
|
12
12
|
"""
|
13
13
|
And I write to "config/routes.rb" with:
|
14
14
|
"""
|
15
|
-
|
15
|
+
RailsApp::Application.routes.draw do
|
16
16
|
resources :posts
|
17
17
|
end
|
18
18
|
"""
|
@@ -8,8 +8,6 @@ module CucumberRailsHelper
|
|
8
8
|
delete_environment_variable 'RUBYOPT'
|
9
9
|
delete_environment_variable 'BUNDLE_BIN_PATH'
|
10
10
|
delete_environment_variable 'BUNDLE_GEMFILE'
|
11
|
-
|
12
|
-
run_simple 'bundle install'
|
13
11
|
end
|
14
12
|
|
15
13
|
def install_cucumber_rails(*options)
|
@@ -18,28 +16,45 @@ module CucumberRailsHelper
|
|
18
16
|
else
|
19
17
|
gem 'cucumber-rails' , group: :test, require: false, path: "#{File.expand_path('.')}"
|
20
18
|
end
|
21
|
-
|
22
|
-
|
19
|
+
|
20
|
+
gem 'sqlite3', '~> 1.3.13'
|
21
|
+
if RUBY_VERSION < '2.4.0'
|
22
|
+
gem 'capybara', '< 3.16.0', group: :test
|
23
|
+
else
|
23
24
|
gem 'capybara', group: :test
|
24
|
-
gem 'selenium-webdriver', group: :test
|
25
25
|
end
|
26
|
+
gem 'selenium-webdriver', '~> 3.11', group: :test
|
26
27
|
|
27
|
-
gem '
|
28
|
-
gem '
|
29
|
-
gem '
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
gem 'rake', '< 11.0'
|
35
|
-
run_simple 'bundle update rake --local'
|
28
|
+
gem 'rspec-expectations', '~> 3.7', group: :test
|
29
|
+
gem 'database_cleaner', '>= 1.1', group: :test unless options.include?(:no_database_cleaner)
|
30
|
+
gem 'factory_bot', '>= 3.2', group: :test unless options.include?(:no_factory_bot)
|
31
|
+
run_simple 'bundle install'
|
32
|
+
|
33
|
+
if `bundle exec rails -v`.split("\n").last.strip =~ /\ARails 6\./
|
34
|
+
run_simple 'bundle exec rails webpacker:install'
|
36
35
|
end
|
36
|
+
|
37
37
|
run_simple 'bundle exec rails generate cucumber:install'
|
38
38
|
end
|
39
39
|
|
40
|
-
def gem(name,
|
41
|
-
|
42
|
-
|
40
|
+
def gem(name, *args)
|
41
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
42
|
+
|
43
|
+
parts = ["'#{name}'"]
|
44
|
+
parts << args.map(&:inspect) if args.any?
|
45
|
+
parts << options.inspect[1..-2] if options.any?
|
46
|
+
|
47
|
+
line = "gem #{parts.join(', ')}\n"
|
48
|
+
|
49
|
+
gem_regexp = /gem ["']#{name}["'].*$/
|
50
|
+
gemfile_content = File.read(expand_path('Gemfile'))
|
51
|
+
|
52
|
+
if gemfile_content =~ gem_regexp
|
53
|
+
gemfile_content.gsub!(gem_regexp, line)
|
54
|
+
overwrite_file('Gemfile', gemfile_content)
|
55
|
+
else
|
56
|
+
append_to_file('Gemfile', line)
|
57
|
+
end
|
43
58
|
end
|
44
59
|
|
45
60
|
def prepare_aruba_report
|
@@ -98,10 +113,15 @@ end
|
|
98
113
|
Given /^I force selenium to run Firefox in headless mode$/ do
|
99
114
|
selenium_config = %{
|
100
115
|
Capybara.register_driver :selenium do |app|
|
116
|
+
http_client = Selenium::WebDriver::Remote::Http::Default.new
|
117
|
+
http_client.read_timeout = 180
|
118
|
+
|
101
119
|
browser_options = ::Selenium::WebDriver::Firefox::Options.new()
|
102
120
|
browser_options.args << '--headless'
|
103
|
-
Capybara::Selenium::Driver.new(app, browser: :firefox, options: browser_options)
|
121
|
+
Capybara::Selenium::Driver.new(app, browser: :firefox, options: browser_options, http_client: http_client)
|
104
122
|
end
|
123
|
+
|
124
|
+
Capybara.server = :webrick
|
105
125
|
}
|
106
126
|
|
107
127
|
step 'I append to "features/support/env.rb" with:', selenium_config
|
@@ -120,11 +140,7 @@ Then /^the feature run should pass with:$/ do |string|
|
|
120
140
|
end
|
121
141
|
|
122
142
|
Given("I remove the {string} gem from the Gemfile") do |gem_name|
|
123
|
-
|
124
|
-
app_path = last_command_started.output.strip
|
125
|
-
gemfile_path = File.join(app_path, 'Gemfile')
|
126
|
-
|
127
|
-
content = File.open(gemfile_path, 'r').readlines
|
143
|
+
content = File.open(expand_path('Gemfile'), 'r').readlines
|
128
144
|
new_content = []
|
129
145
|
|
130
146
|
content.each do |line|
|
@@ -133,5 +149,5 @@ Given("I remove the {string} gem from the Gemfile") do |gem_name|
|
|
133
149
|
new_content << line
|
134
150
|
end
|
135
151
|
|
136
|
-
overwrite_file(
|
137
|
-
end
|
152
|
+
overwrite_file('Gemfile', new_content.join("\r\n"))
|
153
|
+
end
|
data/gemfiles/rails_4_2.gemfile
CHANGED
@@ -2,18 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "rails", "~> 4.2.1"
|
6
5
|
gem "railties", "~> 4.2.1"
|
7
|
-
gem "
|
8
|
-
gem "
|
9
|
-
gem "
|
10
|
-
gem "rspec-rails", "~> 3.1.0"
|
11
|
-
gem "sass-rails", "~> 5.0"
|
12
|
-
gem "coffee-rails", "~> 4.1.0"
|
13
|
-
gem "jquery-rails"
|
14
|
-
gem "uglifier", "~> 2.1.0"
|
15
|
-
gem "sqlite3", "~> 1.3.7"
|
16
|
-
gem "database_cleaner", "~> 1.0.1"
|
17
|
-
gem "rake", "< 11.0"
|
6
|
+
gem "i18n", "< 1.5.1", platform: :mri_22
|
7
|
+
gem "capybara", "< 3.16.0", platform: [:mri_23, :mri_22]
|
8
|
+
gem "nokogiri", "< 1.9.1", platform: [:mri_23, :mri_22]
|
18
9
|
|
19
10
|
gemspec path: "../"
|
data/gemfiles/rails_5_0.gemfile
CHANGED
@@ -2,17 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "rails", "~> 5.0.0"
|
6
5
|
gem "railties", "~> 5.0.0"
|
7
|
-
gem "
|
8
|
-
gem "
|
9
|
-
gem "
|
10
|
-
gem "rspec-rails", "~> 3.5.0"
|
11
|
-
gem "sass-rails", "~> 5.0"
|
12
|
-
gem "coffee-rails", "~> 4.2.0"
|
13
|
-
gem "jquery-rails"
|
14
|
-
gem "uglifier", "~> 2.7.2"
|
15
|
-
gem "sqlite3", "~> 1.3.7"
|
16
|
-
gem "database_cleaner", ">= 1.1.0"
|
6
|
+
gem "i18n", "< 1.5.1", platform: :mri_22
|
7
|
+
gem "capybara", "< 3.16.0", platform: [:mri_23, :mri_22]
|
8
|
+
gem "nokogiri", "< 1.9.1", platform: [:mri_23, :mri_22]
|
17
9
|
|
18
10
|
gemspec path: "../"
|
data/gemfiles/rails_5_1.gemfile
CHANGED
@@ -2,16 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "rails", "~> 5.1.0"
|
6
5
|
gem "railties", "~> 5.1.0"
|
7
|
-
gem "
|
8
|
-
gem "
|
9
|
-
gem "
|
10
|
-
gem "rspec-rails", "~> 3.5.0"
|
11
|
-
gem "sass-rails", "~> 5.0"
|
12
|
-
gem "coffee-rails", "~> 4.2.0"
|
13
|
-
gem "uglifier", "~> 3.2.0"
|
14
|
-
gem "sqlite3", "~> 1.3.13"
|
15
|
-
gem "database_cleaner", ">= 1.1.0"
|
6
|
+
gem "i18n", "< 1.5.1", platform: :mri_22
|
7
|
+
gem "capybara", "< 3.16.0", platform: [:mri_23, :mri_22]
|
8
|
+
gem "nokogiri", "< 1.9.1", platform: [:mri_23, :mri_22]
|
16
9
|
|
17
10
|
gemspec path: "../"
|