var balanced = require('../index'),
fs = require('fs');
var examples = {
bracketsBasic: fs.readFileSync(__dirname + '/example-text/brackets-basic.txt', 'utf8'),
bracketsHead: fs.readFileSync(__dirname + '/example-text/brackets-head.txt', 'utf8'),
comments: fs.readFileSync(__dirname + '/example-text/brackets-comments.txt', 'utf8')
};
describe('Replacements', function() {
it('can perform simple string replacements', function() {
expect(balanced.replacements({source: examples.bracketsBasic, open: '{', close: '}', replace: function (source, head, tail) {
return '' + source + '';
}})).toEqual(
'GARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGE{{TEXT}}GARBAGE\nGARBAGE\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\nGARBAGE\nGARBAGE\nGARBAGE\n\t{TEXT}\n\t{TEXT}\nGARBAGE\nGARBAGE\nGARBAGE(TEXT)GARBAGE\nGARBAGE\nGARBAGE(\n\tTEXT\n)GARBAGE\nGARBAGE\nGARBAGE(((TEXT)))GARBAGE\nGARBAGE(\n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n)GARBAGE\nGARBAGE\nGARBAGE(\n\t(TEXT)\n\t(TEXT)\n)GARBAGE\nGARBAGE\nGARBAGE[TEXT]GARBAGE\nGARBAGE\nGARBAGE[\n\tTEXT\n]GARBAGE\nGARBAGE\nGARBAGE[[[TEXT]]]GARBAGE\nGARBAGE[\n\t[\n\t\t[\n\t\t\tTEXT\n\t\t]\n\t]\n]GARBAGE\nGARBAGE\nGARBAGE[\n\t[TEXT]\n\t[TEXT]\n]GARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\n\t\n\t\t\n\t\t\tTEXT\n\t\t\n\t\nGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\n\tTEXT\nGARBAGE\nGARBAGE'
);
expect(balanced.replacements({source: examples.bracketsBasic, open: '(', close: ')', replace: function (source, head, tail) {
return '' + source + '';
}})).toEqual(
'GARBAGE{TEXT}GARBAGE\nGARBAGE\nGARBAGE{\n\tTEXT\n}GARBAGE\nGARBAGE\nGARBAGE{{{TEXT}}}GARBAGE\nGARBAGE{\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\n}GARBAGE\nGARBAGE\nGARBAGE{\n\t{TEXT}\n\t{TEXT}\n}GARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGE((TEXT))GARBAGE\nGARBAGE\n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\nGARBAGE\nGARBAGE\nGARBAGE\n\t(TEXT)\n\t(TEXT)\nGARBAGE\nGARBAGE\nGARBAGE[TEXT]GARBAGE\nGARBAGE\nGARBAGE[\n\tTEXT\n]GARBAGE\nGARBAGE\nGARBAGE[[[TEXT]]]GARBAGE\nGARBAGE[\n\t[\n\t\t[\n\t\t\tTEXT\n\t\t]\n\t]\n]GARBAGE\nGARBAGE\nGARBAGE[\n\t[TEXT]\n\t[TEXT]\n]GARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\n\t\n\t\t\n\t\t\tTEXT\n\t\t\n\t\nGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\n\tTEXT\nGARBAGE\nGARBAGE'
);
expect(balanced.replacements({source: examples.bracketsBasic, open: '[', close: ']', replace: function (source, head, tail) {
return '' + source + '';
}})).toEqual(
'GARBAGE{TEXT}GARBAGE\nGARBAGE\nGARBAGE{\n\tTEXT\n}GARBAGE\nGARBAGE\nGARBAGE{{{TEXT}}}GARBAGE\nGARBAGE{\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\n}GARBAGE\nGARBAGE\nGARBAGE{\n\t{TEXT}\n\t{TEXT}\n}GARBAGE\nGARBAGE\nGARBAGE(TEXT)GARBAGE\nGARBAGE\nGARBAGE(\n\tTEXT\n)GARBAGE\nGARBAGE\nGARBAGE(((TEXT)))GARBAGE\nGARBAGE(\n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n)GARBAGE\nGARBAGE\nGARBAGE(\n\t(TEXT)\n\t(TEXT)\n)GARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGE[[TEXT]]GARBAGE\nGARBAGE\n\t[\n\t\t[\n\t\t\tTEXT\n\t\t]\n\t]\nGARBAGE\nGARBAGE\nGARBAGE\n\t[TEXT]\n\t[TEXT]\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\n\t\n\t\t\n\t\t\tTEXT\n\t\t\n\t\nGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\n\tTEXT\nGARBAGE\nGARBAGE'
);
expect(balanced.replacements({source: examples.bracketsBasic, open: '', close: '', replace: function (source, head, tail) {
return '' + source + '';
}})).toEqual(
'GARBAGE{TEXT}GARBAGE\nGARBAGE\nGARBAGE{\n\tTEXT\n}GARBAGE\nGARBAGE\nGARBAGE{{{TEXT}}}GARBAGE\nGARBAGE{\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\n}GARBAGE\nGARBAGE\nGARBAGE{\n\t{TEXT}\n\t{TEXT}\n}GARBAGE\nGARBAGE\nGARBAGE(TEXT)GARBAGE\nGARBAGE\nGARBAGE(\n\tTEXT\n)GARBAGE\nGARBAGE\nGARBAGE(((TEXT)))GARBAGE\nGARBAGE(\n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n)GARBAGE\nGARBAGE\nGARBAGE(\n\t(TEXT)\n\t(TEXT)\n)GARBAGE\nGARBAGE\nGARBAGE[TEXT]GARBAGE\nGARBAGE\nGARBAGE[\n\tTEXT\n]GARBAGE\nGARBAGE\nGARBAGE[[[TEXT]]]GARBAGE\nGARBAGE[\n\t[\n\t\t[\n\t\t\tTEXT\n\t\t]\n\t]\n]GARBAGE\nGARBAGE\nGARBAGE[\n\t[TEXT]\n\t[TEXT]\n]GARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\n\t\n\t\t\n\t\t\tTEXT\n\t\t\n\t\nGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\n\tTEXT\nGARBAGE\nGARBAGE'
);
});
it('can perform simple regexp replacements', function() {
expect(balanced.replacements({source: examples.bracketsBasic, open: /\[|\{|\(|/, close: /\]|\}|\)|<\/tag>/, replace: function (source, head, tail) {
return '' + source + '';
}})).toEqual(
'GARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGE{{TEXT}}GARBAGE\nGARBAGE\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\nGARBAGE\nGARBAGE\nGARBAGE\n\t{TEXT}\n\t{TEXT}\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGE((TEXT))GARBAGE\nGARBAGE\n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\nGARBAGE\nGARBAGE\nGARBAGE\n\t(TEXT)\n\t(TEXT)\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGE[[TEXT]]GARBAGE\nGARBAGE\n\t[\n\t\t[\n\t\t\tTEXT\n\t\t]\n\t]\nGARBAGE\nGARBAGE\nGARBAGE\n\t[TEXT]\n\t[TEXT]\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\nGARBAGE\nGARBAGE\nGARBAGETEXTGARBAGE\nGARBAGE\n\t\n\t\t\n\t\t\tTEXT\n\t\t\n\t\nGARBAGE\nGARBAGE\nGARBAGE\n\tTEXT\n\tTEXT\nGARBAGE\nGARBAGE'
);
});
it('can perform head replacements', function () {
expect(balanced.replacements({source: examples.bracketsHead, head: 'head (', open: '(', close: ')', replace: function (source, head, tail) {
return '' + source + '';
}})).toEqual(
'GARBAGE \n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead ()\nGARBAGE\nGARBAGE head2 (\n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead2 ()\n)GARBAGE\nGARBAGE \n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead ()\nGARBAGE\nGARBAGE head2 (\n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead2 ()\n)GARBAGE'
);
});
it('can perform regexp head matches', function () {
expect(balanced.replacements({source: examples.bracketsHead, head: /head\d? \(/, open: '(', close: ')', replace: function (source, head, tail) {
return '' + source + '';
}})).toEqual(
'GARBAGE \n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead ()\nGARBAGE\nGARBAGE \n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead2 ()\nGARBAGE\nGARBAGE \n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead ()\nGARBAGE\nGARBAGE \n\t(\n\t\t(\n\t\t\tTEXT\n\t\t)\n\t)\n\thead2 ()\nGARBAGE'
);
});
it('can ignore matches', function () {
var blockComments = balanced.matches({source: examples.comments, open: '/*', close: '*/'}),
singleLineComments = balanced.getRangesForMatch(examples.comments, /^\s*\/\/.+$/gim);
expect(balanced.replacements({
source: examples.comments,
open: ['{', '[', '('],
close: ['}', ']', ')'],
ignore: Array.prototype.concat.call([], blockComments, singleLineComments),
replace: function (source, head, tail) {
return '' + source + '';
}
})).toEqual(
'\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\n\n\ta {\n\n\t}\n\n\ta [\n\n\t]\n\n\ta (\n\n\t)\n\n// {{TEXT}{TEXT}}a{}a[]a()\n/*\n{\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\n\n\ta {\n\n\t}\n\n\ta [\n\n\t\n\n\ta (\n\n\t)\n}\n*/'
);
});
it('can ignore matches 2', function () {
var blockComments = balanced.matches({source: examples.comments, open: '/*', close: '*/'});
expect(balanced.replacements({
source: examples.comments,
open: ['{', '[', '('],
close: ['}', ']', ')'],
ignore: blockComments,
replace: function (source, head, tail) {
return '' + source + '';
}
})).toEqual(
'\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\n\n\ta {\n\n\t}\n\n\ta [\n\n\t]\n\n\ta (\n\n\t)\n\n// {{TEXT}{TEXT}}a{}a[]a()\n/*\n{\n\t{\n\t\t{\n\t\t\tTEXT\n\t\t\n\t\t{\n\t\t\tTEXT\n\t\t}\n\t}\n\n\ta {\n\n\t}\n\n\ta [\n\n\t\n\n\ta (\n\n\t)\n}\n*/'
);
});
});