Sha256: 60369e771b8020f33d2ed1efeaf2323819283047059f233be6f2fbc34d5e80fa

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

require 'dentaku/token_scanner'

describe Dentaku::TokenScanner do
  let(:whitespace) { described_class.new(:whitespace, '\s') }
  let(:numeric)    { described_class.new(:numeric,    '(\d+(\.\d+)?|\.\d+)',
    lambda { |raw| raw =~ /\./ ? BigDecimal.new(raw) : raw.to_i })
  }

  it 'returns a token for a matching string' do
    token = whitespace.scan(' ').first
    expect(token.category).to eq(:whitespace)
    expect(token.value).to eq(' ')
  end

  it 'returns falsy for a non-matching string' do
    expect(whitespace.scan('A')).not_to be
  end

  it 'performs raw value conversion' do
    token = numeric.scan('5').first
    expect(token.category).to eq(:numeric)
    expect(token.value).to eq(5)
  end

  it 'returns a list of all configured scanners' do
    expect(described_class.scanners.length).to eq 12
  end

  it 'allows customizing available scanners' do
    described_class.scanners = [:whitespace, :numeric]
    expect(described_class.scanners.length).to eq 2
    described_class.scanners = described_class.available_scanners
  end

  it 'ignores invalid scanners' do
    described_class.scanners = [:whitespace, :numeric, :fake]
    expect(described_class.scanners.length).to eq 2
    described_class.scanners = described_class.available_scanners
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dentaku-2.0.4 spec/token_scanner_spec.rb