UNPKG

@masala/parser

Version:
218 lines (141 loc) 7.39 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _index = require('../../lib/stream/index'); var _index2 = _interopRequireDefault(_index); var _charsBundle = require('../../lib/parsec/chars-bundle'); var _charsBundle2 = _interopRequireDefault(_charsBundle); var _numbersBundle = require('../../lib/parsec/numbers-bundle'); var _numbersBundle2 = _interopRequireDefault(_numbersBundle); var _stream = require('../../lib/stream'); var _stream2 = _interopRequireDefault(_stream); 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(); }, 'endOfStream for empty stream': function endOfStreamForEmptyStream(test) { var p = _charsBundle2.default.char(' ').optrep().thenRight(_numbersBundle2.default.number()); test.ok(_index2.default.ofParser(p, _index2.default.ofString('')).endOfStream(0), 'should be endOfStream.'); test.done(); }, 'endOfStream for non empty stream': function endOfStreamForNonEmptyStream(test) { var p = _charsBundle2.default.char(' ').optrep().thenRight(_numbersBundle2.default.number()); test.ok(_index2.default.ofParser(p, _index2.default.ofString('1')).endOfStream(1), 'should be endOfStream.'); test.done(); }, 'no endOfStream for non empty stream': function noEndOfStreamForNonEmptyStream(test) { var p = _charsBundle2.default.char(' ').optrep().thenRight(_numbersBundle2.default.number()); test.equal(_index2.default.ofParser(p, _index2.default.ofString('1')).endOfStream(0), false, 'should be endOfStream.'); test.done(); }, 'get from stream': function getFromStream(test) { var p = _charsBundle2.default.char(' ').optrep().thenRight(_numbersBundle2.default.number()); test.equal(_index2.default.ofParser(p, _index2.default.ofString('1')).get(0).isSuccess(), true, 'should be a success.'); test.done(); }, 'do not get from empty stream': function doNotGetFromEmptyStream(test) { var p = _charsBundle2.default.char(' ').optrep().thenRight(_numbersBundle2.default.number()); test.equal(_index2.default.ofParser(p, _index2.default.ofString('1')).get(1).isSuccess(), false, 'should be a failure.'); test.done(); }, 'get from stream number 123': function getFromStreamNumber123(test) { var p = _charsBundle2.default.char(' ').optrep().thenRight(_numbersBundle2.default.number()).single(); test.equal(_index2.default.ofParser(p, _index2.default.ofString('123')).get(0).success(), 123, 'should be a 123.'); test.done(); }, 'Offset are found in series of numbers': function OffsetAreFoundInSeriesOfNumbers(test) { var p = _numbersBundle2.default.number().then(_charsBundle2.default.char(' ').optrep().drop()).single(); var parserStream = _index2.default.ofParser(p, _index2.default.ofString('123 14137')); // index: ^0 ^6 var first = parserStream.get(0).success(); //>> 123 test.equal(first, 123); var second = parserStream.get(1).success(); //>> 114 test.equal(second, 14137); test.deepEqual(parserStream.offsets, [0, 6, 11]); // Offset after reading start (1) is related to index after 123 (3) // Offset after reading at 6 (7) is related to index after '123 14137'(11) test.done(); }, 'failing series of numbers': function failingSeriesOfNumbers(test) { var p = _numbersBundle2.default.number().then(_charsBundle2.default.char(' ').optrep().drop()).single(); var parserStream = _index2.default.ofParser(p, _index2.default.ofString('123 a')); // index: ^0 ^6 var first = parserStream.get(0).success(); //>> 123 test.equal(first, 123); test.deepEqual(parserStream.offsets, [0, 6]); var second = parserStream.get(1); // try 'a' test.ok(second.isFailure()); test.deepEqual(parserStream.offsets, [0, 6]); test.done(); }, 'having correct location when success': function havingCorrectLocationWhenSuccess(test) { var p = _numbersBundle2.default.number().then(_charsBundle2.default.char(' ').optrep().drop()).single(); var parserStream = _index2.default.ofParser(p, _index2.default.ofString('123 14137')); // index: ^0 ^6 var first = parserStream.get(0).success(); //>> 123 test.equal(first, 123); test.equal(0, parserStream.location(0)); var second = parserStream.get(1).success(); //>> 114 test.equal(second, 14137); test.equal(6, parserStream.location(1)); test.done(); }, 'searching illegal location will fail': function searchingIllegalLocationWillFail(test) { var p = _numbersBundle2.default.number().then(_charsBundle2.default.char(' ').optrep().drop()).single(); var parserStream = _index2.default.ofParser(p, _index2.default.ofString('123 14137')); // index: ^0 ^6 var first = parserStream.get(0).success(); //>> 123 test.equal(first, 123); var foundError = false; try { test.equal(0, parserStream.location(4)); } catch (e) { foundError = true; } test.ok(foundError); test.done(); }, 'having correct location when fail': function havingCorrectLocationWhenFail(test) { var p = _numbersBundle2.default.number(); var parserStream = _index2.default.ofParser(p, _index2.default.ofString('1234 14137')); // index: ^0 ^4 var first = parserStream.get(0).success(); //>> 123 test.equal(first, 1234); test.equal(0, parserStream.location(0)); parserStream.get(1); //>> fail test.equal(4, parserStream.location(1)); test.done(); }, 'unsafe_get can see next element': function unsafe_getCanSeeNextElement(test) { var lower = _numbersBundle2.default.number().then(spaces().opt().drop()).single(); var lowerStream = _stream2.default.ofString('10 12 44'); var parserStream = _stream2.default.ofParser(lower, lowerStream); parserStream.unsafeGet(0); var value = parserStream.unsafeGet(1); test.equal(12, value); test.done(); }, 'unsafe_get cannot see beyond next element': function unsafe_getCannotSeeBeyondNextElement(test) { var lower = _numbersBundle2.default.number().then(spaces().opt().drop()); var lowerStream = _stream2.default.ofString('10 12 44'); var parserStream = _stream2.default.ofParser(lower, lowerStream); var found = false; try { parserStream.unsafeGet(1); } catch (e) { found = true; } test.ok(found); test.done(); } }; function spaces() { return _charsBundle2.default.charIn(' \r\n\f\t').optrep().map(function () { return _unit2.default; }); } //# sourceMappingURL=parser_stream_test.js.map