peasy
Version:
an easy but powerful parser
144 lines (135 loc) • 5.21 kB
text/coffeescript
chai = require 'chai'
expect = chai.expect
{charset, inCharset} = peasy = require '../../index'
describe "run testpeasy:", ->
it '', ->
describe "peasy", ->
it "charset('ab') should contain 'a'", ->
set = charset('ab')
expect(inCharset('a', set)).to.equal true
expect(inCharset('0', set)).to.equal false
describe "peasy.parser", ->
it "should parse with A: Ax|a", ->
class Parser extends peasy.Parser
constructor: ->
super
a =
x =
=
parser = new Parser()
parse = (text) -> parser.parse(text, parser.A)
expect(parse('a')).to.equal 'a'
expect(parse('ax')).to.equal 'ax'
expect(parse('axx')).to.equal 'axx'
expect(parse('axxx')).to.equal 'axxx'
it "should parse with A: Bx|a; B:A|b", ->
class Parser extends peasy.Parser
constructor: ->
super
a =
b =
x =
=
B =
parser = new Parser()
parse = (text) -> parser.parse(text, parser.A)
expect(parse('a')).to.equal 'a'
expect(parse('ax')).to.equal 'ax'
expect(parse('axx')).to.equal 'axx'
expect(parse('axxx')).to.equal 'axxx'
expect(parse('b')).to.equal 'b'
expect(parse('bx')).to.equal 'bx'
expect(parse('bxxx')).to.equal 'bxxx'
expect(parse('bxg')).to.equal 'bx'
expect(parse('bxxg')).to.equal 'bxx'
expect(parse('bxxxg')).to.equal 'bxxx'
expect(parse('fg')).to.equal undefined
expect(parse('')).to.equal undefined
it "should parse with A: Bx|a; B:C; C:A|b", ->
class Parser extends peasy.Parser
constructor: ->
super
a =
b =
x =
=
B = -> C()
C =
parser = new Parser()
parse = (text) -> parser.parse(text, parser.A)
expect(parse('a')).to.equal 'a'
expect(parse('ax')).to.equal 'ax'
expect(parse('axx')).to.equal 'axx'
expect(parse('axxx')).to.equal 'axxx'
expect(parse('b')).to.equal 'b'
expect(parse('bx')).to.equal 'bx'
expect(parse('bxxx')).to.equal 'bxxx'
expect(parse('bxg')).to.equal 'bx'
expect(parse('bxxg')).to.equal 'bxx'
expect(parse('bxxxg')).to.equal 'bxxx'
expect(parse('fg')).to.equal undefined
expect(parse('')).to.equal undefined
it "should parse with A: Bx|a; B:C|Ay; C:A|b", ->
class Parser extends peasy.Parser
constructor: ->
super
a =
b =
x =
y =
=
B =
C =
parser = new Parser()
parse = (text) -> parser.parse(text, parser.A)
expect(parse('a')).to.equal 'a'
expect(parse('ax')).to.equal 'ax'
expect(parse('axx')).to.equal 'axx'
expect(parse('axxx')).to.equal 'axxx'
expect(parse('ay')).to.equal 'ay'
expect(parse('ayx')).to.equal 'ayx'
expect(parse('ayxyx')).to.equal 'ayxyx'
expect(parse('bxx')).to.equal 'bxx'# Bx Cx Ax Bxx Cxx bxx
expect(parse('ayxxx')).to.equal 'ayxxx'# Bx Cx Ax Bxx Cxx Axx Bxxx Ayxxx ayxxx
expect(parse('ayxmxx')).to.equal 'ayx'
expect(parse('b')).to.equal 'b'
expect(parse('bx')).to.equal 'bx'
expect(parse('bxxx')).to.equal 'bxxx'
expect(parse('bxg')).to.equal 'bx'
expect(parse('bxxg')).to.equal 'bxx'
expect(parse('bxxxg')).to.equal 'bxxx'
expect(parse('fg')).to.equal undefined
expect(parse('')).to.equal undefined
it "should parse with Root: Az; A: Bx|a; B:C|Ay; C:A|b", ->
class Parser extends peasy.Parser
constructor: ->
super
a =
b =
x =
y =
z =
= => (m = ) and z() and m+'z'
=
B =
C =
parser = new Parser()
parse = (text) -> parser.parse(text)
expect(parse('az')).to.equal 'az'
expect(parse('axz')).to.equal 'axz'
expect(parse('axxz')).to.equal 'axxz'
expect(parse('axxxz')).to.equal 'axxxz'
expect(parse('ayz')).to.equal 'ayz'
expect(parse('ayxz')).to.equal 'ayxz'
expect(parse('ayxyxz')).to.equal 'ayxyxz'
expect(parse('bxxz')).to.equal 'bxxz'
expect(parse('ayxxxz')).to.equal 'ayxxxz'
expect(parse('ayxmxxz')).to.equal undefined
expect(parse('bz')).to.equal 'bz'
expect(parse('bxz')).to.equal 'bxz'
expect(parse('bxxxz')).to.equal 'bxxxz'
expect(parse('bxgz')).to.equal undefined
expect(parse('bxxgz')).to.equal undefined
expect(parse('bxxxgz')).to.equal undefined
expect(parse('fg')).to.equal undefined
expect(parse('')).to.equal undefined