#
# specifying raabro
#
# Mon Sep 21 10:15:35 JST 2015
#
require 'spec_helper'
describe Raabro do
describe '.eseq' do
it 'parses successfully' do
i = Raabro::Input.new('')
t = Raabro.eseq(:list, i, :lt, :cha, :com, :gt)
expect(t.to_a(:leaves => true)).to eq(
[ :list, 1, 0, 5, nil, :eseq, [
[ nil, 1, 0, 1, nil, :str, '<' ],
[ nil, 1, 1, 1, nil, :rex, 'a' ],
[ nil, 1, 2, 1, nil, :str, ',' ],
[ nil, 1, 3, 1, nil, :rex, 'b' ],
[ nil, 0, 4, 0, nil, :str, [] ],
[ nil, 1, 4, 1, nil, :str, '>' ]
] ]
)
expect(i.offset).to eq(5)
end
it 'prunes' do
i = Raabro::Input.new('', :prune => true)
t = Raabro.eseq(:list, i, :lt, :cha, :com, :gt)
expect(t.to_a(:leaves => true)).to eq(
[ :list, 1, 0, 5, nil, :eseq, [
[ nil, 1, 0, 1, nil, :str, '<' ],
[ nil, 1, 1, 1, nil, :rex, 'a' ],
[ nil, 1, 2, 1, nil, :str, ',' ],
[ nil, 1, 3, 1, nil, :rex, 'b' ],
[ nil, 1, 4, 1, nil, :str, '>' ]
] ]
)
expect(i.offset).to eq(5)
end
it 'parses <>' do
i = Raabro::Input.new('<>', :prune => true)
t = Raabro.eseq(:list, i, :lt, :cha, :com, :gt)
expect(t.to_a(:leaves => true)).to eq(
[ :list, 1, 0, 2, nil, :eseq, [
[ nil, 1, 0, 1, nil, :str, '<' ],
[ nil, 1, 1, 1, nil, :str, '>' ]
] ]
)
expect(i.offset).to eq(2)
end
context 'no start parser' do
it 'parses successfully' do
i = Raabro::Input.new('a,b>', prune: false)
t = Raabro.eseq(:list, i, nil, :cha, :com, :gt)
expect(t.to_a(:leaves => true)).to eq(
[ :list, 1, 0, 4, nil, :eseq, [
[ nil, 1, 0, 1, nil, :rex, 'a' ],
[ nil, 1, 1, 1, nil, :str, ',' ],
[ nil, 1, 2, 1, nil, :rex, 'b' ],
[ nil, 0, 3, 0, nil, :str, [] ],
[ nil, 1, 3, 1, nil, :str, '>' ]
] ]
)
expect(i.offset).to eq(4)
end
end
context 'no end parser' do
it 'parses successfully' do
i = Raabro::Input.new(' true)).to eq(
[ :list, 1, 0, 4, nil, :eseq, [
[ nil, 1, 0, 1, nil, :str, '<' ],
[ nil, 1, 1, 1, nil, :rex, 'a' ],
[ nil, 1, 2, 1, nil, :str, ',' ],
[ nil, 1, 3, 1, nil, :rex, 'b' ],
[ nil, 0, 4, 0, nil, :str, [] ]
] ]
)
expect(i.offset).to eq(4)
end
it 'prunes' do
i = Raabro::Input.new(' true)
t = Raabro.eseq(:list, i, :lt, :cha, :com, nil)
expect(t.to_a(:leaves => true)).to eq(
[ :list, 1, 0, 4, nil, :eseq, [
[ nil, 1, 0, 1, nil, :str, '<' ],
[ nil, 1, 1, 1, nil, :rex, 'a' ],
[ nil, 1, 2, 1, nil, :str, ',' ],
[ nil, 1, 3, 1, nil, :rex, 'b' ]
] ]
)
expect(i.offset).to eq(4)
end
end
context 'no progress' do
it 'parses <>' do
i = Raabro::Input.new('<>', :prune => true)
t = arr(i)
expect(t.to_a(:leaves => true)).to eq(
[ nil, 1, 0, 2, nil, :eseq, [
[ nil, 1, 0, 1, nil, :str, '<' ],
[ nil, 1, 1, 0, nil, :rex, '' ],
[ nil, 1, 1, 1, nil, :str, '>' ]
] ]
)
expect(i.offset).to eq(2)
end
it 'parses ' do
i = Raabro::Input.new('', :prune => true)
t = arr(i)
expect(t.to_a(:leaves => true)).to eq(
[ nil, 1, 0, 6, nil, :eseq, [
[ nil, 1, 0, 1, nil, :str, '<' ],
[ nil, 1, 1, 1, nil, :rex, 'a' ],
[ nil, 1, 2, 1, nil, :rex, ',' ],
[ nil, 1, 3, 0, nil, :rex, '' ],
[ nil, 1, 3, 1, nil, :rex, ',' ],
[ nil, 1, 4, 1, nil, :rex, 'a' ],
[ nil, 1, 5, 1, nil, :str, '>' ]
] ]
)
expect(i.offset).to eq(6)
end
end
end
end