Sha256: 56e167689506abfef2093a10ec7a9df82737900240a371d6bdedfca21832f05a

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

require_relative "spec_helper"

describe ZScan do
  before :each do
    @z = ZScan.new 'ab你好'
  end

  it "random workflow" do
    assert_equal 2, @z.match_bytesize('ab')
    @z.pos = 4
    assert_equal 8, @z.bytepos
    @z.push
    assert_equal nil, @z.scan(/ab你/)
    @z.pos = 0
    assert_equal 'ab你', @z.scan(/ab你/)

    @z.restore
    assert_equal 8, @z.bytepos
    @z.pos = 3
    @z.restore
    assert_equal 8, @z.bytepos
  end

  it "scans from middle" do
    @z.bytepos = 2
    assert_equal '你', @z.scan('你')
    assert_equal '好', @z.rest
  end

  it "won't overflow pos" do
    @z.pos = 20
    assert_equal 8, @z.bytepos
    assert_equal 4, @z.pos

    @z.skip('ab')
    assert_equal 8, @z.bytepos

    @z.pos = -1
    assert_equal 0, @z.bytepos
    assert_equal 0, @z.pos

    @z.bytepos = 20
    assert_equal 8, @z.bytepos
    assert_equal 4, @z.pos

    @z.bytepos = -1
    assert_equal 0, @z.bytepos
    assert_equal 0, @z.pos
  end

  it "recognizes anchors" do
    z = ZScan.new "a x:b+ $ \\k<x>"
    z.pos = 1
    assert_equal ' ', z.scan(/\s*(\#.*$\s*)*/)
    z.pos = 1
    assert_equal '', z.scan(/(?<=a)/)
    assert_equal nil, z.scan(/^/)
  end

  it "stack doesn't underflow" do
    @z.push
    @z.pop
    @z.pop
    @z.pos = 3
    @z.push
    @z.pos = 4
    @z.pop
    assert_equal 3, @z.pos
  end

  it "#reset, #terminate and #line_index" do
    z = ZScan.new ''
    assert_equal 0, z.line_index
    z.terminate
    assert_equal 0, z.line_index
    z.reset
    assert_equal 0, z.line_index

    z = ZScan.new "a\nb\nc"
    assert_equal 0, z.line_index
    z.terminate
    assert_equal 2, z.line_index
    z.reset
    assert_equal 0, z.line_index
    z.pos = 1
    assert_equal 0, z.line_index
    z.pos = 2
    assert_equal 1, z.line_index
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
zscan-1.2 spec/zscan_spec.rb
zscan-1.1 spec/zscan_spec.rb