UNPKG

@masala/parser

Version:
172 lines (120 loc) 5.39 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _index = require('../../lib/stream/index'); var _index2 = _interopRequireDefault(_index); var _index3 = require('../../lib/parsec/index'); var _unit = require('../../lib/data/unit'); var _unit2 = _interopRequireDefault(_unit); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = { setUp: function setUp(done) { done(); }, 'expect (chain) to be accepted': function expectChainToBeAccepted(test) { var lower = _index3.C.char('x'); var upper = _index3.F.satisfy(function (val) { return val === 'x'; }); var parser = lower.chain(upper); var response = parser.parse(_index2.default.ofString('x')); test.ok(response.isAccepted(), 'Should be accepted'); test.done(); }, 'expect (chain) to be rejected': function expectChainToBeRejected(test) { var lower = _index3.C.char('x'); var upper = _index3.F.satisfy(function (val) { return val === 'y'; }); var parser = lower.chain(upper); var response = parser.parse(_index2.default.ofString('x')); test.ok(!response.isAccepted(), 'Should be rejected'); test.done(); }, 'expect (chain) to be accepted and offset to have move': function expectChainToBeAcceptedAndOffsetToHaveMove(test) { var lower = _index3.C.char('x'); // satisfy makes the stuff move only if accepted var upper = _index3.F.satisfy(function (val) { return val === 'x'; }); var parser = lower.chain(upper); var response = parser.parse(_index2.default.ofString('x')); test.ok(response.offset === 1, 'Should have moved'); test.done(); }, 'expect (chain) to be accepted and offset to have move more': function expectChainToBeAcceptedAndOffsetToHaveMoveMore(test) { var lower = _index3.C.string('xyz'); // satisfy makes the stuff move only if accepted var upper = _index3.F.satisfy(function (val) { return val === 'xyz'; }); var parser = lower.chain(upper.then(upper)); var response = parser.parse(_index2.default.ofString('xyzxyz')); test.equal(response.offset, 2, 'Should have moved more'); test.done(); }, 'expect (chain) to be find back the source offset': function expectChainToBeFindBackTheSourceOffset(test) { var lower = _index3.C.string('xyz'); // satisfy makes the stuff move only if accepted var upper = _index3.F.satisfy(function (val) { return val === 'xyz'; }); var parser = lower.chain(upper.then(upper)); var response = parser.parse(_index2.default.ofString('xyzxyz')); test.equal(response.input.source.offsets[response.offset], 6, 'Should have find stringStream offset'); test.done(); }, 'expect (chain) to be accepted again': function expectChainToBeAcceptedAgain(test) { test.expect(1); var p1 = _index3.N.number().thenLeft(_index3.C.char(' ').opt()), p2 = _index3.F.any().then(_index3.F.any()).thenLeft(_index3.F.eos()).map(function (r) { return r[0] + r[1]; }); test.equal(p1.chain(p2).parse(_index2.default.ofString('12 34'), 0).isAccepted(), true, 'should be accepted.'); test.done(); }, 'expect (chain) to return 46': function expectChainToReturn46(test) { test.expect(1); // tests here var p1 = _index3.N.number().thenLeft(_index3.C.char(' ').opt()), p2 = _index3.F.any().then(_index3.F.any()).thenLeft(_index3.F.eos()).array().map(function (r) { return r[0] + r[1]; }); test.equal(p1.chain(p2).parse(_index2.default.ofString('12 34'), 0).value, 46); test.done(); }, 'expect (chain) to add multiple numbers ': function expectChainToAddMultipleNumbers(test) { var token = _index3.N.number().then(spaces().opt().drop()).single(); var lex = _index3.F.satisfy(function (number) { return number > 0; }).rep().map(function (values) { return values.array().reduce(function (acc, n) { return acc + n; }, 0); }); var parsing = token.chain(lex).parse(_index2.default.ofString('10 12 44'), 0); test.ok(parsing.isEos(), 'should have been consumed'); test.equal(parsing.value, 66); test.done(); }, 'expect (chain) to be not satisfied by upper level ': function expectChainToBeNotSatisfiedByUpperLevel(test) { var token = _index3.N.number().then(spaces().opt().drop()); var lex = _index3.F.satisfy(function (number) { return number > 0; }).rep().map(function (values) { return values.array().reduce(function (acc, n) { return acc + n; }, 0); }); var parsing = token.chain(lex).parse(_index2.default.ofString('10 -12 44'), 0); test.ok(!parsing.isEos(), 'should have been consumed'); test.done(); } }; function spaces() { return _index3.C.charIn(' \r\n\f\t').optrep().map(function () { return _unit2.default; }); } //# sourceMappingURL=parser_chain_test.js.map