initial checkin
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/.settings
|
||||
/.project
|
45
quote.js
Normal file
45
quote.js
Normal file
@@ -0,0 +1,45 @@
|
||||
(function() {
|
||||
|
||||
var validquotechars = ['>'];
|
||||
|
||||
|
||||
var quoteline = function(line, maxlength, qc) {
|
||||
if (line.length > maxlength) {
|
||||
var lastspace = line.lastIndexOf(' ', maxlength);
|
||||
if (lastspace != -1) {
|
||||
line = line.substr(0, lastspace) + ' \n' + quoteline(line.substr(lastspace + 1), maxlength, qc);
|
||||
}
|
||||
}
|
||||
|
||||
//this must be after the code before, because this inserts a space in the string
|
||||
return qc + ' ' + line;
|
||||
};
|
||||
|
||||
|
||||
var quote = function(text, length, quotechar) {
|
||||
if (typeof(quotechar) === 'undefined') {
|
||||
quotechar = '>';
|
||||
}
|
||||
if (typeof(length) === 'undefined') {
|
||||
length = 75;
|
||||
}
|
||||
|
||||
var quoted = text.split('\n').map(function(v, i) {
|
||||
//if this is already quoted text, return it as is
|
||||
if (validquotechars.indexOf(v.charAt(0)) > -1) {
|
||||
return v;
|
||||
}
|
||||
|
||||
return quoteline(v, length, quotechar);
|
||||
}).join('\n');
|
||||
|
||||
return quoted;
|
||||
};
|
||||
|
||||
if (typeof(window) === 'undefined') {
|
||||
module.exports = quote;
|
||||
} else {
|
||||
window.quote = quote;
|
||||
}
|
||||
|
||||
})();
|
62
tests.js
Normal file
62
tests.js
Normal file
@@ -0,0 +1,62 @@
|
||||
var quote = require('./quote.js');
|
||||
|
||||
var test = function(name, what, ref, c) {
|
||||
process.stdout.write(name);
|
||||
|
||||
if (typeof(c) !== 'boolean') {
|
||||
c = true;
|
||||
}
|
||||
|
||||
if (typeof(what) === 'function') {
|
||||
what = what();
|
||||
}
|
||||
if (typeof(ref) === 'function') {
|
||||
ref = ref();
|
||||
}
|
||||
|
||||
if ((what === ref) === c) {
|
||||
process.stdout.write(' ✓');
|
||||
} else {
|
||||
process.stdout.write(' ⛝\n');
|
||||
process.stdout.write(' ----> expected | ' + ref + '\n');
|
||||
process.stdout.write(' ----> got | ' + what + '\n');
|
||||
}
|
||||
process.stdout.write('\n');
|
||||
};
|
||||
|
||||
|
||||
test('simple short text',
|
||||
quote('simple short text'),
|
||||
'> simple short text'
|
||||
);
|
||||
|
||||
test('an already quoted line',
|
||||
quote('> simple short text'),
|
||||
'> simple short text'
|
||||
);
|
||||
|
||||
test('a line longer than 75 chars with no spaces',
|
||||
quote('12345678901234567890123456789012345678901234567890123456789012345678901234567890'),
|
||||
'> 12345678901234567890123456789012345678901234567890123456789012345678901234567890'
|
||||
);
|
||||
|
||||
test('a line longer than 75 chars with spaces',
|
||||
quote('1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890', 75),
|
||||
'> 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 \n> 1234567890 1234567890'
|
||||
);
|
||||
|
||||
test('three lines with a hard break',
|
||||
quote('1234567890\n1234567890\n1234567890'),
|
||||
'> 1234567890\n> 1234567890\n> 1234567890'
|
||||
);
|
||||
|
||||
test('three lines, one long line, two with a hard break in between',
|
||||
quote('1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890\n' +
|
||||
'1234567890 1234567890 1234567890 1234567890\n' +
|
||||
'1234567890 1234567890 1234567890 1234567890\n'),
|
||||
'> 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 \n' +
|
||||
'> 1234567890 1234567890\n' +
|
||||
'> 1234567890 1234567890 1234567890 1234567890\n' +
|
||||
'> 1234567890 1234567890 1234567890 1234567890\n' +
|
||||
'> '
|
||||
);
|
Reference in New Issue
Block a user