rspec-rails 4.0.0.beta3 → 4.0.2
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
 - checksums.yaml.gz.sig +0 -0
 - data.tar.gz.sig +0 -0
 - data/Capybara.md +5 -54
 - data/Changelog.md +61 -7
 - data/README.md +20 -19
 - data/lib/generators/rspec.rb +0 -6
 - data/lib/generators/rspec/controller/controller_generator.rb +13 -5
 - data/lib/generators/rspec/controller/templates/request_spec.rb +14 -0
 - data/lib/generators/rspec/controller/templates/routing_spec.rb +1 -1
 - data/lib/generators/rspec/feature/feature_generator.rb +2 -2
 - data/lib/generators/rspec/{generators → generator}/generator_generator.rb +2 -2
 - data/lib/generators/rspec/{generators → generator}/templates/generator_spec.rb +0 -0
 - data/lib/generators/rspec/helper/helper_generator.rb +1 -1
 - data/lib/generators/rspec/install/install_generator.rb +4 -4
 - data/lib/generators/rspec/install/templates/spec/rails_helper.rb +17 -16
 - data/lib/generators/rspec/integration/integration_generator.rb +3 -3
 - data/lib/generators/rspec/mailer/mailer_generator.rb +1 -1
 - data/lib/generators/rspec/model/model_generator.rb +4 -4
 - data/lib/generators/rspec/scaffold/scaffold_generator.rb +26 -18
 - data/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +0 -36
 - data/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
 - data/lib/generators/rspec/scaffold/templates/controller_spec.rb +10 -10
 - data/lib/generators/rspec/scaffold/templates/edit_spec.rb +1 -1
 - data/lib/generators/rspec/scaffold/templates/index_spec.rb +2 -2
 - data/lib/generators/rspec/scaffold/templates/new_spec.rb +1 -1
 - data/lib/generators/rspec/scaffold/templates/request_spec.rb +133 -0
 - data/lib/generators/rspec/scaffold/templates/routing_spec.rb +8 -10
 - data/lib/generators/rspec/scaffold/templates/show_spec.rb +1 -1
 - data/lib/generators/rspec/system/system_generator.rb +1 -1
 - data/lib/generators/rspec/view/view_generator.rb +2 -2
 - data/lib/rspec-rails.rb +6 -9
 - data/lib/rspec/rails/adapters.rb +10 -76
 - data/lib/rspec/rails/configuration.rb +72 -36
 - data/lib/rspec/rails/example/channel_example_group.rb +2 -2
 - data/lib/rspec/rails/example/controller_example_group.rb +4 -4
 - data/lib/rspec/rails/example/feature_example_group.rb +6 -26
 - data/lib/rspec/rails/example/helper_example_group.rb +2 -10
 - data/lib/rspec/rails/example/mailbox_example_group.rb +1 -1
 - data/lib/rspec/rails/example/mailer_example_group.rb +2 -2
 - data/lib/rspec/rails/example/rails_example_group.rb +1 -1
 - data/lib/rspec/rails/example/system_example_group.rb +14 -7
 - data/lib/rspec/rails/example/view_example_group.rb +38 -48
 - data/lib/rspec/rails/extensions/active_record/proxy.rb +5 -10
 - data/lib/rspec/rails/feature_check.rb +1 -28
 - data/lib/rspec/rails/fixture_file_upload_support.rb +8 -13
 - data/lib/rspec/rails/fixture_support.rb +37 -31
 - data/lib/rspec/rails/matchers/action_cable.rb +1 -1
 - data/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +3 -3
 - data/lib/rspec/rails/matchers/active_job.rb +132 -18
 - data/lib/rspec/rails/matchers/base_matcher.rb +4 -10
 - data/lib/rspec/rails/matchers/have_enqueued_mail.rb +9 -6
 - data/lib/rspec/rails/matchers/have_http_status.rb +7 -7
 - data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
 - data/lib/rspec/rails/matchers/routing_matchers.rb +11 -11
 - data/lib/rspec/rails/tasks/rspec.rake +7 -17
 - data/lib/rspec/rails/vendor/capybara.rb +10 -15
 - data/lib/rspec/rails/version.rb +1 -1
 - data/lib/rspec/rails/view_path_builder.rb +1 -1
 - data/lib/rspec/rails/view_rendering.rb +3 -3
 - metadata +34 -33
 - metadata.gz.sig +0 -0
 - data/lib/generators/rspec/observer/observer_generator.rb +0 -13
 - data/lib/generators/rspec/observer/templates/observer_spec.rb +0 -7
 
| 
         @@ -34,7 +34,7 @@ if RSpec::Rails::FeatureCheck.has_action_cable_testing? 
     | 
|
| 
       34 
34 
     | 
    
         
             
                          next if klass <= ::ActionCable::Channel::Base
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                          raise "Described class is not a channel class.\n" \
         
     | 
| 
       37 
     | 
    
         
            -
                                "Specify the channel class in the `describe` statement "\
         
     | 
| 
      
 37 
     | 
    
         
            +
                                "Specify the channel class in the `describe` statement " \
         
     | 
| 
       38 
38 
     | 
    
         
             
                                "or set it manually using `tests MyChannelClass`"
         
     | 
| 
       39 
39 
     | 
    
         
             
                        end
         
     | 
| 
       40 
40 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -45,7 +45,7 @@ if RSpec::Rails::FeatureCheck.has_action_cable_testing? 
     | 
|
| 
       45 
45 
     | 
    
         
             
                          next if klass <= ::ActionCable::Connection::Base
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                          raise "Described class is not a connection class.\n" \
         
     | 
| 
       48 
     | 
    
         
            -
                                "Specify the connection class in the `describe` statement "\
         
     | 
| 
      
 48 
     | 
    
         
            +
                                "Specify the connection class in the `describe` statement " \
         
     | 
| 
       49 
49 
     | 
    
         
             
                                "or set it manually using `tests MyConnectionClass`"
         
     | 
| 
       50 
50 
     | 
    
         
             
                        end
         
     | 
| 
       51 
51 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -94,9 +94,9 @@ module RSpec 
     | 
|
| 
       94 
94 
     | 
    
         
             
                        self.routes = ActionDispatch::Routing::RouteSet.new.tap do |r|
         
     | 
| 
       95 
95 
     | 
    
         
             
                          r.draw do
         
     | 
| 
       96 
96 
     | 
    
         
             
                            resources resource_name,
         
     | 
| 
       97 
     | 
    
         
            -
                                      : 
     | 
| 
       98 
     | 
    
         
            -
                                      : 
     | 
| 
       99 
     | 
    
         
            -
                                      : 
     | 
| 
      
 97 
     | 
    
         
            +
                                      as: resource_as,
         
     | 
| 
      
 98 
     | 
    
         
            +
                                      module: resource_module,
         
     | 
| 
      
 99 
     | 
    
         
            +
                                      path: resource_path
         
     | 
| 
       100 
100 
     | 
    
         
             
                          end
         
     | 
| 
       101 
101 
     | 
    
         
             
                        end
         
     | 
| 
       102 
102 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -159,7 +159,7 @@ module RSpec 
     | 
|
| 
       159 
159 
     | 
    
         
             
                  #
         
     | 
| 
       160 
160 
     | 
    
         
             
                  #         expect do
         
     | 
| 
       161 
161 
     | 
    
         
             
                  #           bypass_rescue
         
     | 
| 
       162 
     | 
    
         
            -
                  #           get :show, : 
     | 
| 
      
 162 
     | 
    
         
            +
                  #           get :show, id: profile.id + 1
         
     | 
| 
       163 
163 
     | 
    
         
             
                  #         end.to raise_error(/403 Forbidden/)
         
     | 
| 
       164 
164 
     | 
    
         
             
                  #       end
         
     | 
| 
       165 
165 
     | 
    
         
             
                  #     end
         
     | 
| 
         @@ -37,37 +37,17 @@ end 
     | 
|
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
            unless RSpec.respond_to?(:feature)
         
     | 
| 
       39 
39 
     | 
    
         
             
              opts = {
         
     | 
| 
       40 
     | 
    
         
            -
                : 
     | 
| 
       41 
     | 
    
         
            -
                : 
     | 
| 
       42 
     | 
    
         
            -
                : 
     | 
| 
       43 
     | 
    
         
            -
                  Feature specs require the Capybara (https://github.com/ 
     | 
| 
       44 
     | 
    
         
            -
                  gem, version 2. 
     | 
| 
       45 
     | 
    
         
            -
                  some deprecation warnings and have support for
         
     | 
| 
       46 
     | 
    
         
            -
                  `config.expose_dsl_globally = false`.
         
     | 
| 
      
 40 
     | 
    
         
            +
                capybara_feature: true,
         
     | 
| 
      
 41 
     | 
    
         
            +
                type: :feature,
         
     | 
| 
      
 42 
     | 
    
         
            +
                skip: <<-EOT.squish
         
     | 
| 
      
 43 
     | 
    
         
            +
                  Feature specs require the Capybara (https://github.com/teamcapybara/capybara)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  gem, version 2.13.0 or later.
         
     | 
| 
       47 
45 
     | 
    
         
             
                EOT
         
     | 
| 
       48 
46 
     | 
    
         
             
              }
         
     | 
| 
       49 
47 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
              # Capybara's monkey patching causes us to have to jump through some hoops
         
     | 
| 
       51 
     | 
    
         
            -
              top_level = self
         
     | 
| 
       52 
     | 
    
         
            -
              main_feature = nil
         
     | 
| 
       53 
     | 
    
         
            -
              if defined?(Capybara) && ::Capybara::VERSION.to_f < 2.4
         
     | 
| 
       54 
     | 
    
         
            -
                # Capybara 2.2 and 2.3 do not use `alias_example_xyz`
         
     | 
| 
       55 
     | 
    
         
            -
                opts[:skip] = <<-EOT.squish
         
     | 
| 
       56 
     | 
    
         
            -
                  Capybara < 2.4.0 does not support RSpec's namespace or
         
     | 
| 
       57 
     | 
    
         
            -
                  `config.expose_dsl_globally = false`. Upgrade to Capybara >= 2.4.0.
         
     | 
| 
       58 
     | 
    
         
            -
                EOT
         
     | 
| 
       59 
     | 
    
         
            -
                main_feature = top_level.method(:feature) if top_level.respond_to?(:feature)
         
     | 
| 
       60 
     | 
    
         
            -
              end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
48 
     | 
    
         
             
              RSpec.configure do |c|
         
     | 
| 
       63 
     | 
    
         
            -
                main_feature = nil unless c.expose_dsl_globally?
         
     | 
| 
       64 
49 
     | 
    
         
             
                c.alias_example_group_to :feature, opts
         
     | 
| 
       65 
50 
     | 
    
         
             
                c.alias_example_to :scenario
         
     | 
| 
       66 
     | 
    
         
            -
                c.alias_example_to :xscenario, : 
     | 
| 
      
 51 
     | 
    
         
            +
                c.alias_example_to :xscenario, skip: 'Temporarily skipped with xscenario'
         
     | 
| 
       67 
52 
     | 
    
         
             
              end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
              # Due to load order issues and `config.expose_dsl_globally?` defaulting to
         
     | 
| 
       70 
     | 
    
         
            -
              # `true` we need to put Capybara's monkey patch method back. Otherwise,
         
     | 
| 
       71 
     | 
    
         
            -
              # app upgrades have a high likelyhood of having all feature specs skipped.
         
     | 
| 
       72 
     | 
    
         
            -
              top_level.define_singleton_method(:feature, &main_feature) if main_feature
         
     | 
| 
       73 
53 
     | 
    
         
             
            end
         
     | 
| 
         @@ -12,16 +12,8 @@ module RSpec 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                  # @private
         
     | 
| 
       14 
14 
     | 
    
         
             
                  module ClassMethods
         
     | 
| 
       15 
     | 
    
         
            -
                     
     | 
| 
       16 
     | 
    
         
            -
                       
     | 
| 
       17 
     | 
    
         
            -
                        described_class if yield(described_class)
         
     | 
| 
       18 
     | 
    
         
            -
                      end
         
     | 
| 
       19 
     | 
    
         
            -
                    else
         
     | 
| 
       20 
     | 
    
         
            -
                      def determine_default_helper_class(_ignore)
         
     | 
| 
       21 
     | 
    
         
            -
                        return unless Module === described_class && !(Class === described_class)
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                        described_class
         
     | 
| 
       24 
     | 
    
         
            -
                      end
         
     | 
| 
      
 15 
     | 
    
         
            +
                    def determine_constant_from_test_name(_ignore)
         
     | 
| 
      
 16 
     | 
    
         
            +
                      described_class if yield(described_class)
         
     | 
| 
       25 
17 
     | 
    
         
             
                    end
         
     | 
| 
       26 
18 
     | 
    
         
             
                  end
         
     | 
| 
       27 
19 
     | 
    
         | 
| 
         @@ -21,8 +21,8 @@ if defined?(ActionMailer) 
     | 
|
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                    included do
         
     | 
| 
       23 
23 
     | 
    
         
             
                      include ::Rails.application.routes.url_helpers
         
     | 
| 
       24 
     | 
    
         
            -
                      options = ::Rails.configuration.action_mailer.default_url_options
         
     | 
| 
       25 
     | 
    
         
            -
                      options 
     | 
| 
      
 24 
     | 
    
         
            +
                      options = ::Rails.configuration.action_mailer.default_url_options || {}
         
     | 
| 
      
 25 
     | 
    
         
            +
                      options.each { |key, value| default_url_options[key] = value }
         
     | 
| 
       26 
26 
     | 
    
         
             
                    end
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                    # Class-level DSL for mailer specs.
         
     | 
| 
         @@ -9,7 +9,7 @@ module RSpec 
     | 
|
| 
       9 
9 
     | 
    
         
             
                module RailsExampleGroup
         
     | 
| 
       10 
10 
     | 
    
         
             
                  extend ActiveSupport::Concern
         
     | 
| 
       11 
11 
     | 
    
         
             
                  include RSpec::Rails::SetupAndTeardownAdapter
         
     | 
| 
       12 
     | 
    
         
            -
                  include RSpec::Rails::MinitestLifecycleAdapter 
     | 
| 
      
 12 
     | 
    
         
            +
                  include RSpec::Rails::MinitestLifecycleAdapter
         
     | 
| 
       13 
13 
     | 
    
         
             
                  include RSpec::Rails::MinitestAssertionAdapter
         
     | 
| 
       14 
14 
     | 
    
         
             
                  include RSpec::Rails::FixtureSupport
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
         @@ -50,6 +50,10 @@ module RSpec 
     | 
|
| 
       50 
50 
     | 
    
         
             
                  end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                  included do |other|
         
     | 
| 
      
 53 
     | 
    
         
            +
                    ActiveSupport.on_load(:action_dispatch_system_test_case) do
         
     | 
| 
      
 54 
     | 
    
         
            +
                      ActionDispatch::SystemTesting::Server.silence_puma = true
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
       53 
57 
     | 
    
         
             
                    begin
         
     | 
| 
       54 
58 
     | 
    
         
             
                      require 'capybara'
         
     | 
| 
       55 
59 
     | 
    
         
             
                      require 'action_dispatch/system_test_case'
         
     | 
| 
         @@ -71,7 +75,6 @@ module RSpec 
     | 
|
| 
       71 
75 
     | 
    
         
             
                    original_after_teardown =
         
     | 
| 
       72 
76 
     | 
    
         
             
                      ::ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown.instance_method(:after_teardown)
         
     | 
| 
       73 
77 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                    other.include ActionDispatch::IntegrationTest::Behavior
         
     | 
| 
       75 
78 
     | 
    
         
             
                    other.include ::ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown
         
     | 
| 
       76 
79 
     | 
    
         
             
                    other.include ::ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper
         
     | 
| 
       77 
80 
     | 
    
         
             
                    other.include BlowAwayTeardownHooks
         
     | 
| 
         @@ -85,16 +88,19 @@ module RSpec 
     | 
|
| 
       85 
88 
     | 
    
         
             
                    def initialize(*args, &blk)
         
     | 
| 
       86 
89 
     | 
    
         
             
                      super(*args, &blk)
         
     | 
| 
       87 
90 
     | 
    
         
             
                      @driver = nil
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                      self.class.before do
         
     | 
| 
      
 93 
     | 
    
         
            +
                        # A user may have already set the driver, so only default if driver
         
     | 
| 
      
 94 
     | 
    
         
            +
                        # is not set
         
     | 
| 
      
 95 
     | 
    
         
            +
                        driven_by(:selenium) unless @driver
         
     | 
| 
      
 96 
     | 
    
         
            +
                      end
         
     | 
| 
       88 
97 
     | 
    
         
             
                    end
         
     | 
| 
       89 
98 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
                    def driven_by( 
     | 
| 
       91 
     | 
    
         
            -
                      @driver = ::ActionDispatch::SystemTestCase.driven_by( 
     | 
| 
      
 99 
     | 
    
         
            +
                    def driven_by(driver, **driver_options, &blk)
         
     | 
| 
      
 100 
     | 
    
         
            +
                      @driver = ::ActionDispatch::SystemTestCase.driven_by(driver, **driver_options, &blk).tap(&:use)
         
     | 
| 
       92 
101 
     | 
    
         
             
                    end
         
     | 
| 
       93 
102 
     | 
    
         | 
| 
       94 
103 
     | 
    
         
             
                    before do
         
     | 
| 
       95 
     | 
    
         
            -
                      # A user may have already set the driver, so only default if driver
         
     | 
| 
       96 
     | 
    
         
            -
                      # is not set
         
     | 
| 
       97 
     | 
    
         
            -
                      driven_by(:selenium) unless @driver
         
     | 
| 
       98 
104 
     | 
    
         
             
                      @routes = ::Rails.application.routes
         
     | 
| 
       99 
105 
     | 
    
         
             
                    end
         
     | 
| 
       100 
106 
     | 
    
         | 
| 
         @@ -108,7 +114,8 @@ module RSpec 
     | 
|
| 
       108 
114 
     | 
    
         
             
                        original_after_teardown.bind(self).call
         
     | 
| 
       109 
115 
     | 
    
         
             
                      ensure
         
     | 
| 
       110 
116 
     | 
    
         
             
                        myio = $stdout
         
     | 
| 
       111 
     | 
    
         
            -
                         
     | 
| 
      
 117 
     | 
    
         
            +
                        myio.rewind
         
     | 
| 
      
 118 
     | 
    
         
            +
                        RSpec.current_example.metadata[:extra_failure_lines] = myio.readlines
         
     | 
| 
       112 
119 
     | 
    
         
             
                        $stdout = orig_stdout
         
     | 
| 
       113 
120 
     | 
    
         
             
                      end
         
     | 
| 
       114 
121 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -43,16 +43,13 @@ module RSpec 
     | 
|
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
                    included do
         
     | 
| 
       45 
45 
     | 
    
         
             
                      include ::Rails.application.routes.url_helpers
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                      if ::Rails.application.routes.respond_to?(:mounted_helpers)
         
     | 
| 
       48 
     | 
    
         
            -
                        include ::Rails.application.routes.mounted_helpers
         
     | 
| 
       49 
     | 
    
         
            -
                      end
         
     | 
| 
      
 46 
     | 
    
         
            +
                      include ::Rails.application.routes.mounted_helpers
         
     | 
| 
       50 
47 
     | 
    
         
             
                    end
         
     | 
| 
       51 
48 
     | 
    
         | 
| 
       52 
49 
     | 
    
         
             
                    # @overload render
         
     | 
| 
       53 
     | 
    
         
            -
                    # @overload render({: 
     | 
| 
       54 
     | 
    
         
            -
                    # @overload render({: 
     | 
| 
       55 
     | 
    
         
            -
                    # @overload render({: 
     | 
| 
      
 50 
     | 
    
         
            +
                    # @overload render({partial: path_to_file})
         
     | 
| 
      
 51 
     | 
    
         
            +
                    # @overload render({partial: path_to_file}, {... locals ...})
         
     | 
| 
      
 52 
     | 
    
         
            +
                    # @overload render({partial: path_to_file}, {... locals ...}) do ... end
         
     | 
| 
       56 
53 
     | 
    
         
             
                    #
         
     | 
| 
       57 
54 
     | 
    
         
             
                    # Delegates to ActionView::Base#render, so see documentation on that
         
     | 
| 
       58 
55 
     | 
    
         
             
                    # for more info.
         
     | 
| 
         @@ -62,7 +59,7 @@ module RSpec 
     | 
|
| 
       62 
59 
     | 
    
         
             
                    #
         
     | 
| 
       63 
60 
     | 
    
         
             
                    #     describe "widgets/new.html.erb" do
         
     | 
| 
       64 
61 
     | 
    
         
             
                    #       it "shows all the widgets" do
         
     | 
| 
       65 
     | 
    
         
            -
                    #         render # => view.render(: 
     | 
| 
      
 62 
     | 
    
         
            +
                    #         render # => view.render(file: "widgets/new.html.erb")
         
     | 
| 
       66 
63 
     | 
    
         
             
                    #         # ...
         
     | 
| 
       67 
64 
     | 
    
         
             
                    #       end
         
     | 
| 
       68 
65 
     | 
    
         
             
                    #     end
         
     | 
| 
         @@ -105,7 +102,7 @@ module RSpec 
     | 
|
| 
       105 
102 
     | 
    
         | 
| 
       106 
103 
     | 
    
         
             
                    # @deprecated Use `view` instead.
         
     | 
| 
       107 
104 
     | 
    
         
             
                    def template
         
     | 
| 
       108 
     | 
    
         
            -
                      RSpec.deprecate("template", : 
     | 
| 
      
 105 
     | 
    
         
            +
                      RSpec.deprecate("template", replacement: "view")
         
     | 
| 
       109 
106 
     | 
    
         
             
                      view
         
     | 
| 
       110 
107 
     | 
    
         
             
                    end
         
     | 
| 
       111 
108 
     | 
    
         | 
| 
         @@ -128,41 +125,37 @@ module RSpec 
     | 
|
| 
       128 
125 
     | 
    
         
             
                  private
         
     | 
| 
       129 
126 
     | 
    
         | 
| 
       130 
127 
     | 
    
         
             
                    def _default_render_options
         
     | 
| 
       131 
     | 
    
         
            -
                      if :: 
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
                                   
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
                        (?:\.(?< 
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
                        render_options
         
     | 
| 
       163 
     | 
    
         
            -
                      else
         
     | 
| 
       164 
     | 
    
         
            -
                        { :template => _default_file_to_render }
         
     | 
| 
       165 
     | 
    
         
            -
                      end
         
     | 
| 
      
 128 
     | 
    
         
            +
                      formats = if ActionView::Template::Types.respond_to?(:symbols)
         
     | 
| 
      
 129 
     | 
    
         
            +
                                  ActionView::Template::Types.symbols
         
     | 
| 
      
 130 
     | 
    
         
            +
                                else
         
     | 
| 
      
 131 
     | 
    
         
            +
                                  [:html, :text, :js, :css, :xml, :json].map(&:to_s)
         
     | 
| 
      
 132 
     | 
    
         
            +
                                end.map { |x| Regexp.escape(x) }.join("|")
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                      handlers = ActionView::Template::Handlers.extensions.map { |x| Regexp.escape(x) }.join("|")
         
     | 
| 
      
 135 
     | 
    
         
            +
                      locales = "[a-z]{2}(?:-[A-Z]{2})?"
         
     | 
| 
      
 136 
     | 
    
         
            +
                      variants = "[^.]*"
         
     | 
| 
      
 137 
     | 
    
         
            +
                      path_regex = %r{
         
     | 
| 
      
 138 
     | 
    
         
            +
                      \A
         
     | 
| 
      
 139 
     | 
    
         
            +
                      (?<template>.*?)
         
     | 
| 
      
 140 
     | 
    
         
            +
                      (?:\.(?<locale>#{locales}))??
         
     | 
| 
      
 141 
     | 
    
         
            +
                        (?:\.(?<format>#{formats}))??
         
     | 
| 
      
 142 
     | 
    
         
            +
                        (?:\+(?<variant>#{variants}))??
         
     | 
| 
      
 143 
     | 
    
         
            +
                        (?:\.(?<handler>#{handlers}))?
         
     | 
| 
      
 144 
     | 
    
         
            +
                        \z
         
     | 
| 
      
 145 
     | 
    
         
            +
                      }x
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                      # This regex should always find a match.
         
     | 
| 
      
 148 
     | 
    
         
            +
                      # Worst case, everything will be nil, and :template will just be
         
     | 
| 
      
 149 
     | 
    
         
            +
                      # the original string.
         
     | 
| 
      
 150 
     | 
    
         
            +
                      match = path_regex.match(_default_file_to_render)
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                      render_options = {template: match[:template]}
         
     | 
| 
      
 153 
     | 
    
         
            +
                      render_options[:handlers] = [match[:handler]] if match[:handler]
         
     | 
| 
      
 154 
     | 
    
         
            +
                      render_options[:formats] = [match[:format].to_sym] if match[:format]
         
     | 
| 
      
 155 
     | 
    
         
            +
                      render_options[:locales] = [match[:locale]] if match[:locale]
         
     | 
| 
      
 156 
     | 
    
         
            +
                      render_options[:variants] = [match[:variant]] if match[:variant]
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                      render_options
         
     | 
| 
       166 
159 
     | 
    
         
             
                    end
         
     | 
| 
       167 
160 
     | 
    
         | 
| 
       168 
161 
     | 
    
         
             
                    def _path_parts
         
     | 
| 
         @@ -192,10 +185,7 @@ module RSpec 
     | 
|
| 
       192 
185 
     | 
    
         | 
| 
       193 
186 
     | 
    
         
             
                    before do
         
     | 
| 
       194 
187 
     | 
    
         
             
                      _include_controller_helpers
         
     | 
| 
       195 
     | 
    
         
            -
                       
     | 
| 
       196 
     | 
    
         
            -
                        # rails 3.1
         
     | 
| 
       197 
     | 
    
         
            -
                        view.lookup_context.prefixes << _controller_path
         
     | 
| 
       198 
     | 
    
         
            -
                      end
         
     | 
| 
      
 188 
     | 
    
         
            +
                      view.lookup_context.prefixes << _controller_path
         
     | 
| 
       199 
189 
     | 
    
         | 
| 
       200 
190 
     | 
    
         
             
                      controller.controller_path = _controller_path
         
     | 
| 
       201 
191 
     | 
    
         | 
| 
         @@ -1,16 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            RSpec.configure do |rspec|
         
     | 
| 
       2 
2 
     | 
    
         
             
              # Delay this in order to give users a chance to configure `expect_with`...
         
     | 
| 
       3 
3 
     | 
    
         
             
              rspec.before(:suite) do
         
     | 
| 
       4 
     | 
    
         
            -
                if defined?(RSpec::Matchers) && 
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                  end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  proxy_class = ActiveRecord::Associations.const_get(const_name)
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  RSpec::Matchers.configuration.add_should_and_should_not_to proxy_class
         
     | 
| 
      
 4 
     | 
    
         
            +
                if defined?(RSpec::Matchers) &&
         
     | 
| 
      
 5 
     | 
    
         
            +
                    RSpec::Matchers.configuration.respond_to?(:syntax) && # RSpec 4 dropped support for monkey-patching `should` syntax
         
     | 
| 
      
 6 
     | 
    
         
            +
                    RSpec::Matchers.configuration.syntax.include?(:should) &&
         
     | 
| 
      
 7 
     | 
    
         
            +
                    defined?(ActiveRecord::Associations)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  RSpec::Matchers.configuration.add_should_and_should_not_to ActiveRecord::Associations::CollectionProxy
         
     | 
| 
       14 
9 
     | 
    
         
             
                end
         
     | 
| 
       15 
10 
     | 
    
         
             
              end
         
     | 
| 
       16 
11 
     | 
    
         
             
            end
         
     | 
| 
         @@ -3,16 +3,6 @@ module RSpec 
     | 
|
| 
       3 
3 
     | 
    
         
             
                # @private
         
     | 
| 
       4 
4 
     | 
    
         
             
                module FeatureCheck
         
     | 
| 
       5 
5 
     | 
    
         
             
                  module_function
         
     | 
| 
       6 
     | 
    
         
            -
                  def can_check_pending_migrations?
         
     | 
| 
       7 
     | 
    
         
            -
                    has_active_record_migration? &&
         
     | 
| 
       8 
     | 
    
         
            -
                      ::ActiveRecord::Migration.respond_to?(:check_pending!)
         
     | 
| 
       9 
     | 
    
         
            -
                  end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def can_maintain_test_schema?
         
     | 
| 
       12 
     | 
    
         
            -
                    has_active_record_migration? &&
         
     | 
| 
       13 
     | 
    
         
            -
                      ::ActiveRecord::Migration.respond_to?(:maintain_test_schema!)
         
     | 
| 
       14 
     | 
    
         
            -
                  end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
6 
     | 
    
         
             
                  def has_active_job?
         
     | 
| 
       17 
7 
     | 
    
         
             
                    defined?(::ActiveJob)
         
     | 
| 
       18 
8 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -37,11 +27,6 @@ module RSpec 
     | 
|
| 
       37 
27 
     | 
    
         
             
                    defined?(::ActionCable) && ActionCable::VERSION::MAJOR >= 6
         
     | 
| 
       38 
28 
     | 
    
         
             
                  end
         
     | 
| 
       39 
29 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                  def has_action_mailer_show_preview?
         
     | 
| 
       41 
     | 
    
         
            -
                    has_action_mailer_preview? &&
         
     | 
| 
       42 
     | 
    
         
            -
                      ::ActionMailer::Base.respond_to?(:show_previews=)
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
30 
     | 
    
         
             
                  def has_action_mailer_parameterized?
         
     | 
| 
       46 
31 
     | 
    
         
             
                    has_action_mailer? && defined?(::ActionMailer::Parameterized)
         
     | 
| 
       47 
32 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -54,20 +39,8 @@ module RSpec 
     | 
|
| 
       54 
39 
     | 
    
         
             
                    defined?(::ActionMailbox)
         
     | 
| 
       55 
40 
     | 
    
         
             
                  end
         
     | 
| 
       56 
41 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
                  def has_1_9_hash_syntax?
         
     | 
| 
       58 
     | 
    
         
            -
                    ::Rails::VERSION::STRING > '4.0'
         
     | 
| 
       59 
     | 
    
         
            -
                  end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                  def has_file_fixture?
         
     | 
| 
       62 
     | 
    
         
            -
                    ::Rails::VERSION::STRING > '5.0'
         
     | 
| 
       63 
     | 
    
         
            -
                  end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
42 
     | 
    
         
             
                  def type_metatag(type)
         
     | 
| 
       66 
     | 
    
         
            -
                     
     | 
| 
       67 
     | 
    
         
            -
                      "type: :#{type}"
         
     | 
| 
       68 
     | 
    
         
            -
                    else
         
     | 
| 
       69 
     | 
    
         
            -
                      ":type => :#{type}"
         
     | 
| 
       70 
     | 
    
         
            -
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    "type: :#{type}"
         
     | 
| 
       71 
44 
     | 
    
         
             
                  end
         
     | 
| 
       72 
45 
     | 
    
         
             
                end
         
     | 
| 
       73 
46 
     | 
    
         
             
              end
         
     | 
| 
         @@ -2,13 +2,18 @@ module RSpec 
     | 
|
| 
       2 
2 
     | 
    
         
             
              module Rails
         
     | 
| 
       3 
3 
     | 
    
         
             
                # @private
         
     | 
| 
       4 
4 
     | 
    
         
             
                module FixtureFileUploadSupport
         
     | 
| 
       5 
     | 
    
         
            -
                  delegate :fixture_file_upload, : 
     | 
| 
      
 5 
     | 
    
         
            +
                  delegate :fixture_file_upload, to: :rails_fixture_file_wrapper
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                private
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                  def rails_fixture_file_wrapper
         
     | 
| 
       10 
10 
     | 
    
         
             
                    RailsFixtureFileWrapper.fixture_path = nil
         
     | 
| 
       11 
     | 
    
         
            -
                    resolved_fixture_path = 
     | 
| 
      
 11 
     | 
    
         
            +
                    resolved_fixture_path =
         
     | 
| 
      
 12 
     | 
    
         
            +
                      if respond_to?(:fixture_path) && !fixture_path.nil?
         
     | 
| 
      
 13 
     | 
    
         
            +
                        fixture_path.to_s
         
     | 
| 
      
 14 
     | 
    
         
            +
                      else
         
     | 
| 
      
 15 
     | 
    
         
            +
                        (RSpec.configuration.fixture_path || '').to_s
         
     | 
| 
      
 16 
     | 
    
         
            +
                      end
         
     | 
| 
       12 
17 
     | 
    
         
             
                    RailsFixtureFileWrapper.fixture_path = File.join(resolved_fixture_path, '') unless resolved_fixture_path.strip.empty?
         
     | 
| 
       13 
18 
     | 
    
         
             
                    RailsFixtureFileWrapper.instance
         
     | 
| 
       14 
19 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -17,22 +22,12 @@ module RSpec 
     | 
|
| 
       17 
22 
     | 
    
         
             
                    include ActionDispatch::TestProcess if defined?(ActionDispatch::TestProcess)
         
     | 
| 
       18 
23 
     | 
    
         | 
| 
       19 
24 
     | 
    
         
             
                    class << self
         
     | 
| 
       20 
     | 
    
         
            -
                       
     | 
| 
      
 25 
     | 
    
         
            +
                      attr_accessor :fixture_path
         
     | 
| 
       21 
26 
     | 
    
         | 
| 
       22 
27 
     | 
    
         
             
                      # Get instance of wrapper
         
     | 
| 
       23 
28 
     | 
    
         
             
                      def instance
         
     | 
| 
       24 
29 
     | 
    
         
             
                        @instance ||= new
         
     | 
| 
       25 
30 
     | 
    
         
             
                      end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                      # Override fixture_path set
         
     | 
| 
       28 
     | 
    
         
            -
                      # to support Rails 3.0->3.1 using ActionController::TestCase class to resolve fixture_path
         
     | 
| 
       29 
     | 
    
         
            -
                      # see https://apidock.com/rails/v3.0.0/ActionDispatch/TestProcess/fixture_file_upload
         
     | 
| 
       30 
     | 
    
         
            -
                      def fixture_path=(value)
         
     | 
| 
       31 
     | 
    
         
            -
                        if ActionController::TestCase.respond_to?(:fixture_path)
         
     | 
| 
       32 
     | 
    
         
            -
                          ActionController::TestCase.fixture_path = value
         
     | 
| 
       33 
     | 
    
         
            -
                        end
         
     | 
| 
       34 
     | 
    
         
            -
                        @fixture_path = value
         
     | 
| 
       35 
     | 
    
         
            -
                      end
         
     | 
| 
       36 
31 
     | 
    
         
             
                    end
         
     | 
| 
       37 
32 
     | 
    
         
             
                  end
         
     | 
| 
       38 
33 
     | 
    
         
             
                end
         
     | 
| 
         @@ -5,52 +5,58 @@ module RSpec 
     | 
|
| 
       5 
5 
     | 
    
         
             
                  if defined?(ActiveRecord::TestFixtures)
         
     | 
| 
       6 
6 
     | 
    
         
             
                    extend ActiveSupport::Concern
         
     | 
| 
       7 
7 
     | 
    
         
             
                    include RSpec::Rails::SetupAndTeardownAdapter
         
     | 
| 
       8 
     | 
    
         
            -
                    include RSpec::Rails::MinitestLifecycleAdapter 
     | 
| 
      
 8 
     | 
    
         
            +
                    include RSpec::Rails::MinitestLifecycleAdapter
         
     | 
| 
       9 
9 
     | 
    
         
             
                    include RSpec::Rails::MinitestAssertionAdapter
         
     | 
| 
       10 
10 
     | 
    
         
             
                    include ActiveRecord::TestFixtures
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                    included do
         
     | 
| 
       13 
     | 
    
         
            -
                       
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                      # should be part of the 3.1 release, at which point we can include
         
     | 
| 
       17 
     | 
    
         
            -
                      # these lines for rails < 3.1.
         
     | 
| 
       18 
     | 
    
         
            -
                      ActiveSupport::TestCase.class_exec do
         
     | 
| 
       19 
     | 
    
         
            -
                        include ActiveRecord::TestFixtures
         
     | 
| 
      
 13 
     | 
    
         
            +
                      if RSpec.configuration.use_active_record?
         
     | 
| 
      
 14 
     | 
    
         
            +
                        include Fixtures
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       20 
16 
     | 
    
         
             
                        self.fixture_path = RSpec.configuration.fixture_path
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                        if ::Rails::VERSION::STRING > '5'
         
     | 
| 
      
 18 
     | 
    
         
            +
                          self.use_transactional_tests = RSpec.configuration.use_transactional_fixtures
         
     | 
| 
      
 19 
     | 
    
         
            +
                        else
         
     | 
| 
      
 20 
     | 
    
         
            +
                          self.use_transactional_fixtures = RSpec.configuration.use_transactional_fixtures
         
     | 
| 
      
 21 
     | 
    
         
            +
                        end
         
     | 
| 
      
 22 
     | 
    
         
            +
                        self.use_instantiated_fixtures = RSpec.configuration.use_instantiated_fixtures
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                      if ::Rails::VERSION::STRING > '5'
         
     | 
| 
       26 
     | 
    
         
            -
                        self.use_transactional_tests = RSpec.configuration.use_transactional_fixtures
         
     | 
| 
       27 
     | 
    
         
            -
                      else
         
     | 
| 
       28 
     | 
    
         
            -
                        self.use_transactional_fixtures = RSpec.configuration.use_transactional_fixtures
         
     | 
| 
      
 24 
     | 
    
         
            +
                        fixtures RSpec.configuration.global_fixtures if RSpec.configuration.global_fixtures
         
     | 
| 
       29 
25 
     | 
    
         
             
                      end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
       31 
27 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
                    module Fixtures
         
     | 
| 
      
 29 
     | 
    
         
            +
                      extend ActiveSupport::Concern
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                      class_methods do
         
     | 
| 
      
 32 
     | 
    
         
            +
                        def fixtures(*args)
         
     | 
| 
      
 33 
     | 
    
         
            +
                          orig_methods = private_instance_methods
         
     | 
| 
      
 34 
     | 
    
         
            +
                          super.tap do
         
     | 
| 
      
 35 
     | 
    
         
            +
                            new_methods = private_instance_methods - orig_methods
         
     | 
| 
      
 36 
     | 
    
         
            +
                            new_methods.each do |method_name|
         
     | 
| 
      
 37 
     | 
    
         
            +
                              proxy_method_warning_if_called_in_before_context_scope(method_name)
         
     | 
| 
      
 38 
     | 
    
         
            +
                            end
         
     | 
| 
       38 
39 
     | 
    
         
             
                          end
         
     | 
| 
       39 
40 
     | 
    
         
             
                        end
         
     | 
| 
       40 
     | 
    
         
            -
                      end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
      
 42 
     | 
    
         
            +
                        def proxy_method_warning_if_called_in_before_context_scope(method_name)
         
     | 
| 
      
 43 
     | 
    
         
            +
                          orig_implementation = instance_method(method_name)
         
     | 
| 
      
 44 
     | 
    
         
            +
                          define_method(method_name) do |*args, &blk|
         
     | 
| 
      
 45 
     | 
    
         
            +
                            if inspect.include?("before(:context)")
         
     | 
| 
      
 46 
     | 
    
         
            +
                              RSpec.warn_with("Calling fixture method in before :context ")
         
     | 
| 
      
 47 
     | 
    
         
            +
                            else
         
     | 
| 
      
 48 
     | 
    
         
            +
                              orig_implementation.bind(self).call(*args, &blk)
         
     | 
| 
      
 49 
     | 
    
         
            +
                            end
         
     | 
| 
       49 
50 
     | 
    
         
             
                          end
         
     | 
| 
       50 
51 
     | 
    
         
             
                        end
         
     | 
| 
       51 
52 
     | 
    
         
             
                      end
         
     | 
| 
       52 
53 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                       
     | 
| 
      
 54 
     | 
    
         
            +
                      if ::Rails.version.to_f >= 6.1
         
     | 
| 
      
 55 
     | 
    
         
            +
                        # @private return the example name for TestFixtures
         
     | 
| 
      
 56 
     | 
    
         
            +
                        def name
         
     | 
| 
      
 57 
     | 
    
         
            +
                          @example
         
     | 
| 
      
 58 
     | 
    
         
            +
                        end
         
     | 
| 
      
 59 
     | 
    
         
            +
                      end
         
     | 
| 
       54 
60 
     | 
    
         
             
                    end
         
     | 
| 
       55 
61 
     | 
    
         
             
                  end
         
     | 
| 
       56 
62 
     | 
    
         
             
                end
         
     |