Feature: Syntax Configuration

  In addition to the long-supported `should` syntax, rspec-expectations
  supports an alternate `expect` syntax. If you want your project to
  only use one syntax, you can configure the available syntaxes.

  Background:
    Given a file named "syntaxes_spec.rb" with:
      """ruby
      describe "using the should syntax" do
        specify { 3.should eq(3) }
        specify { 3.should_not eq(4) }
        specify { lambda { raise "boom" }.should raise_error("boom") }
        specify { lambda { }.should_not raise_error }
      end

      describe "using the expect syntax" do
        specify { expect(3).to eq(3) }
        specify { expect(3).not_to eq(4) }
        specify { expect { raise "boom" }.to raise_error("boom") }
        specify { expect { }.not_to raise_error }
      end
      """

  Scenario: Both syntaxes are available by default
    When I run `rspec syntaxes_spec.rb`
    Then the examples should all pass

  Scenario: Disable should syntax
    Given a file named "disable_should_syntax.rb" with:
      """ruby
      RSpec.configure do |config|
        config.expect_with :rspec do |c|
          c.syntax = :expect
        end
      end
      """
    When I run `rspec disable_should_syntax.rb syntaxes_spec.rb`
    Then the output should contain all of these:
      | 8 examples, 4 failures    |
      | undefined method `should' |

  Scenario: Disable expect syntax
    Given a file named "disable_expect_syntax.rb" with:
      """ruby
      RSpec.configure do |config|
        config.expect_with :rspec do |c|
          c.syntax = :should
        end
        config.mock_with :rspec do |c|
          c.syntax = :should
        end
      end
      """
    When I run `rspec disable_expect_syntax.rb syntaxes_spec.rb`
    Then the output should contain all of these:
      | 8 examples, 4 failures    |
      | undefined method `expect' |

  Scenario: Explicitly enable both syntaxes
    Given a file named "enable_both_syntaxes.rb" with:
      """ruby
      RSpec.configure do |config|
        config.expect_with :rspec do |c|
          c.syntax = [:should, :expect]
        end
      end
      """
    When I run `rspec enable_both_syntaxes.rb syntaxes_spec.rb`
    Then the examples should all pass

