var reporter = require('nodeunit').reporters['default'], RegExpParser = require('../regexparser').RegExpParser; function runtest(test, input, expected_output, expected_errors) { var parser = new RegExpParser(input), actual_output; try { actual_output = parser.parse(); } catch(e) { test.fail(e.message); test.done(); return; } expected_errors = expected_errors || []; test.deepEqual(actual_output, expected_output); test.equal(parser.errors.length, expected_errors.length); for (var i=0,n=parser.errors.length; i\\w+)", { type: 'Group', capture: true, number: 1, name: 'ws', operand: { type: 'Plus', operand: { type: 'CharacterClassEscape', class: 'w', raw: '\\w', range: [ 6, 8 ] }, greedy: true, range: [ 6, 9 ] }, range: [ 0, 10 ] }, []); }, named_capture_group_empty_name: function(test) { runtest(test, "(?<>\\w+)", { type: 'Group', capture: true, number: 1, name: '', operand: { type: 'Plus', operand: { type: 'CharacterClassEscape', class: 'w', raw: '\\w', range: [ 4, 6 ] }, greedy: true, range: [ 4, 7 ] }, range: [ 0, 8 ] }, [ { type: 'Error', code: 11, range: [ 3, 4 ] } ]); }, named_capture_group_missing_rangle: function(test) { runtest(test, "(?\\w+", { type: 'Group', capture: true, number: 1, name: 'ws', operand: { type: 'Plus', operand: { type: 'CharacterClassEscape', class: 'w', raw: '\\w', range: [ 6, 8 ] }, greedy: true, range: [ 6, 9 ] }, range: [ 0, 9 ] }, [ { type: 'Error', code: 5, range: [ 8, 9 ] } ]); }, named_backref: function(test) { runtest(test, "\\k", { type: 'NamedBackReference', name: 'ws', raw: '\\k', range: [ 0, 6 ] }, []); }, named_backref_empty_name: function(test) { runtest(test, "\\k<>", { type: 'NamedBackReference', name: '', raw: '\\k<>', range: [ 0, 4 ] }, [ { type: 'Error', code: 11, range: [ 3, 4 ] } ]); }, named_backref_missing_rangle: function(test) { runtest(test, "\\k', range: [ 0, 5 ] }, [ { type: 'Error', code: 12, range: [ 4, 5 ] } ]); }, positive_lookbehind: function(test) { runtest(test, "(?<=\$)0", { type: 'Sequence', elements: [ { type: 'ZeroWidthPositiveLookbehind', operand: { type: 'Dollar', range: [ 4, 5 ] }, range: [ 0, 6 ] }, { type: 'Constant', value: '0', range: [ 6, 7 ] } ], range: [ 0, 7 ] }, []); }, negative_lookbehind: function(test) { runtest(test, "(?