Sha256: 16c7e584a11f81e2073053e0318da7d5ed69c4e7520240051c1b312da4257491

Contents?: true

Size: 1.48 KB

Versions: 2

Compression:

Stored size: 1.48 KB

Contents

# frozen_string_literal: true

RSpec.describe Fear::Extractor::IdentifierMatcher do
  let(:parser) { Fear::Extractor::GrammarParser.new }
  let(:matcher) { parser.parse(pattern).to_matcher }

  describe "#defined_at?" do
    subject { matcher }

    let(:pattern) { "number" }

    it { is_expected.to be_defined_at(1) }
    it { is_expected.to be_defined_at("foo") }
    it { is_expected.to be_defined_at(1.2) }
    it { is_expected.to be_defined_at([1, "2"]) }

    context "within array" do
      let(:pattern) { "[1, n, 2]" }

      it { is_expected.to be_defined_at([1, 2, 2]) }
      it { is_expected.to be_defined_at([1, "foo", 2]) }
      it { is_expected.not_to be_defined_at([1, "foo"]) }
    end
  end

  describe "#call" do
    subject { matcher.(other) }

    let(:pattern) { "1.0" }

    context "defined" do
      let(:other) { 1 }

      it { is_expected.to eq({}) }
    end
  end

  describe "#failure_reason" do
    subject { matcher.failure_reason(other) }

    let(:pattern) { "1.0" }

    context "match integer" do
      let(:other) { 1 }
      let(:pattern) { "1" }

      it { is_expected.to eq(Fear.none) }
    end

    context "match float" do
      let(:other) { 1.0 }
      let(:pattern) { "1" }

      it { is_expected.to eq(Fear.none) }
    end

    context "does not match another integer" do
      let(:other) { 2 }
      let(:pattern) { "1" }

      it { is_expected.to eq(Fear.some(<<~ERROR.strip)) }
        Expected `2` to match:
        1
        ^
      ERROR
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fear-1.2.0 spec/fear/extractor/identifier_matcher_spec.rb
fear-1.1.0 spec/fear/extractor/identifier_matcher_spec.rb