Sha256: ebab8cf5e07600ad57f1535b9d8a301861c9ac25deddda7f72934a1fa9a01332

Contents?: true

Size: 1.12 KB

Versions: 13

Compression:

Stored size: 1.12 KB

Contents

require_relative "spec_helper"

describe 'ZScan combinators' do
  it "#try restores pos" do
    z = ZScan.new "hello"
    return1 = z.try do
      z.scan 'h'
      z.scan 'e'
    end
    assert_equal 'e', return1
    assert_equal 2, z.pos

    return2 = z.try do
      z.scan 'l'
      z.scan 'l'
      z.scan 'p' # fails
    end
    assert_equal nil, return2
    assert_equal 2, z.pos
  end

  it "#zero_or_one" do
    z = Zscan.new "aab"
    assert_equal ['a'], z.zero_or_one{z.scan 'a'}
    assert_equal 1, z.pos

    z = Zscan.new 'aab'
    assert_equal [], z.zero_or_one{z.scan 'b'}
    assert_equal 0, z.pos
  end

  it "#zero_or_more" do
    z = Zscan.new "aab"
    assert_equal ['a', 'a'], z.zero_or_more{z.scan 'a'}
    assert_equal 2, z.pos

    assert_equal 'aab', z.zero_or_more('aa'){z.scan 'c'; z.scan 'b'}

    z = Zscan.new 'aab'
    assert_equal [], z.zero_or_more{z.scan 'b'}
    assert_equal 0, z.pos
  end

  it "#one_or_more" do
    z = Zscan.new 'aab'
    assert_equal ['a', 'a'], z.one_or_more{z.scan 'a'}
    assert_equal 2, z.pos

    z = Zscan.new 'aab'
    assert_equal nil, z.one_or_more([]){z.scan 'b'}
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
zscan-2.0.9 spec/combinator_spec.rb
zscan-2.0.8 spec/combinator_spec.rb
zscan-2.0.7 spec/combinator_spec.rb
zscan-2.0.6 spec/combinator_spec.rb
zscan-2.0.5 spec/combinator_spec.rb
zscan-2.0.4 spec/combinator_spec.rb
zscan-2.0.3 spec/combinator_spec.rb
zscan-2.0.2 spec/combinator_spec.rb
zscan-2.0.1 spec/combinator_spec.rb
zscan-2.0 spec/combinator_spec.rb
zscan-1.3 spec/combinator_spec.rb
zscan-1.2 spec/combinator_spec.rb
zscan-1.1 spec/combinator_spec.rb