'use strict';
var common = require('../common');
describe('PasteViewer', function () {
describe('run, hide, getText, setText, getFormat, setFormat & isPrettyPrinted', function () {
this.timeout(30000);
beforeEach(() => {
document.body.innerHTML = (
'
+++ no document text +++
' +
'' +
''
);
});
afterEach(() => {
globalThis.cleanup();
});
it('basic plaintext display works', function () {
PrivateBin.PasteViewer.init();
PrivateBin.PasteViewer.setFormat('plaintext');
PrivateBin.PasteViewer.setText('hello');
PrivateBin.PasteViewer.run();
assert.strictEqual(PrivateBin.PasteViewer.getText(), 'hello');
assert.ok(!document.getElementById('prettymessage').classList.contains('hidden'));
});
it('basic markdown display works', function () {
PrivateBin.PasteViewer.init();
PrivateBin.PasteViewer.setFormat('markdown');
PrivateBin.PasteViewer.setText('hello **bold**');
PrivateBin.PasteViewer.run();
assert.strictEqual(PrivateBin.PasteViewer.getText(), 'hello **bold**');
assert.ok(!document.getElementById('plaintext').classList.contains('hidden'));
});
jsc.property(
'initializes with empty text and shows nothing',
common.jscFormats(),
function (format) {
var results = [];
PrivateBin.PasteViewer.init();
PrivateBin.PasteViewer.setFormat(format);
PrivateBin.PasteViewer.setText('');
results.push(
document.getElementById('placeholder').classList.contains('hidden') &&
document.getElementById('prettymessage').classList.contains('hidden') &&
document.getElementById('plaintext').classList.contains('hidden') &&
PrivateBin.PasteViewer.getFormat() === format &&
PrivateBin.PasteViewer.getText() === ''
);
return results.every(element => element);
}
);
jsc.property(
'when no text is given and view is rendered, it shows placeholder',
common.jscFormats(),
function (format) {
var results = [];
PrivateBin.PasteViewer.init();
PrivateBin.PasteViewer.setFormat(format);
PrivateBin.PasteViewer.setText('');
PrivateBin.PasteViewer.run();
results.push(
!document.getElementById('placeholder').classList.contains('hidden') &&
document.getElementById('prettymessage').classList.contains('hidden') &&
document.getElementById('plaintext').classList.contains('hidden')
);
return results.every(element => element);
}
);
jsc.property(
'displays text according to format',
common.jscFormats(),
'nestring',
function (format, text) {
var results = [];
PrivateBin.PasteViewer.init();
PrivateBin.PasteViewer.setFormat(format);
PrivateBin.PasteViewer.setText(text);
PrivateBin.PasteViewer.run();
results.push(
document.getElementById('placeholder').classList.contains('hidden') &&
!PrivateBin.PasteViewer.isPrettyPrinted() &&
PrivateBin.PasteViewer.getText() === text
);
if (format === 'markdown') {
results.push(
document.getElementById('prettymessage').classList.contains('hidden') &&
!document.getElementById('plaintext').classList.contains('hidden')
);
console.log(document.getElementById('prettymessage').classList.contains('hidden'),
!document.getElementById('plaintext').classList.contains('hidden'));
} else {
results.push(
!document.getElementById('prettymessage').classList.contains('hidden') &&
document.getElementById('plaintext').classList.contains('hidden')
);
}
return results.every(element => element);
}
);
jsc.property(
'sanitizes XSS',
common.jscFormats(),
'string',
// @see {@link https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet}
jsc.elements([
'',
'>">\'>',
'\'\';!--"=&{()}',
'',
'\'">>">' +
'|\\>' +
'@gmail.com\'-->">' +
'">
\'">',
'
',
'
',
'
',
'
',
'
',
'xxs link',
'xxs link',
'
">',
'
',
'
',
'',
'',
'| ',
'PT SRC="httx://xss.rocks/xss.js">'
]),
'string',
function (format, prefix, xss, suffix) {
var text = prefix + xss + suffix;
document.body.innerHTML = (
' +++ no document text ' +
'+++ '
);
PrivateBin.PasteViewer.init();
PrivateBin.PasteViewer.setFormat(format);
PrivateBin.PasteViewer.setText(text);
PrivateBin.PasteViewer.run();
var result = document.body.innerHTML.indexOf(xss) === -1;
cleanup();
return result;
}
);
});
});
|