|
|
@@ -31,7 +31,10 @@ var jsc = require('jsverify'),
|
|
|
'`': '`',
|
|
|
'=': '='
|
|
|
},
|
|
|
- logFile = require('fs').createWriteStream('test.log');
|
|
|
+ logFile = require('fs').createWriteStream('test.log'),
|
|
|
+ mimeTypes = ['image/png','application/octet-stream'],
|
|
|
+ mimeFile = require('fs').createReadStream('/etc/mime.types'),
|
|
|
+ mimeLine = '';
|
|
|
|
|
|
global.$ = global.jQuery = require('./jquery-3.1.1');
|
|
|
global.sjcl = require('./sjcl-1.0.6');
|
|
|
@@ -51,6 +54,41 @@ console.info = console.warn = console.error = function () {
|
|
|
logFile.write(Array.prototype.slice.call(arguments).join('') + '\n');
|
|
|
}
|
|
|
|
|
|
+// populate mime types from environment
|
|
|
+mimeFile.on('data', function(data) {
|
|
|
+ mimeLine += data;
|
|
|
+ var index = mimeLine.indexOf('\n');
|
|
|
+ while (index > -1) {
|
|
|
+ var line = mimeLine.substring(0, index);
|
|
|
+ mimeLine = mimeLine.substring(index + 1);
|
|
|
+ parseMime(line);
|
|
|
+ index = mimeLine.indexOf('\n');
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+mimeFile.on('end', function() {
|
|
|
+ if (mimeLine.length > 0) {
|
|
|
+ parseMime(mimeLine);
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+function parseMime(line) {
|
|
|
+ // ignore comments
|
|
|
+ var index = line.indexOf('#');
|
|
|
+ if (index > -1) {
|
|
|
+ line = line.substring(0, index);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ignore bits after tabs
|
|
|
+ index = line.indexOf('\t');
|
|
|
+ if (index > -1) {
|
|
|
+ line = line.substring(0, index);
|
|
|
+ }
|
|
|
+ if (line.length > 0) {
|
|
|
+ mimeTypes.push(line);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* convert all applicable characters to HTML entities
|
|
|
*
|
|
|
@@ -1487,3 +1525,93 @@ describe('PasteViewer', function () {
|
|
|
);
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
+describe('AttachmentViewer', function () {
|
|
|
+ describe('setAttachment, showAttachment, removeAttachment, hideAttachment, hideAttachmentPreview, hasAttachment, getAttachment & moveAttachmentTo', function () {
|
|
|
+ this.timeout(30000);
|
|
|
+ before(function () {
|
|
|
+ cleanup();
|
|
|
+ });
|
|
|
+
|
|
|
+ jsc.property(
|
|
|
+ 'displays & hides data as requested',
|
|
|
+ jsc.elements(mimeTypes),
|
|
|
+ jsc.nearray(jsc.elements(base64String)),
|
|
|
+ 'string',
|
|
|
+ 'string',
|
|
|
+ 'string',
|
|
|
+ function (mimeType, base64, filename, prefix, postfix) {
|
|
|
+ var clean = jsdom(),
|
|
|
+ data = 'data:' + mimeType + ';base64,' + base64.join(''),
|
|
|
+ isImage = mimeType.substring(0, 6) === 'image/',
|
|
|
+ results = [];
|
|
|
+ prefix = prefix.replace(/%(s|d)/g, '%%');
|
|
|
+ postfix = postfix.replace(/%(s|d)/g, '%%');
|
|
|
+ $('body').html(
|
|
|
+ '<div id="attachment" role="alert" class="hidden alert ' +
|
|
|
+ 'alert-info"><span class="glyphicon glyphicon-download-' +
|
|
|
+ 'alt" aria-hidden="true"></span> <a class="alert-link">' +
|
|
|
+ 'Download attachment</a></div><div id="attachmentPrevie' +
|
|
|
+ 'w" class="hidden"></div>'
|
|
|
+ );
|
|
|
+ $.PrivateBin.AttachmentViewer.init();
|
|
|
+ results.push(
|
|
|
+ !$.PrivateBin.AttachmentViewer.hasAttachment() &&
|
|
|
+ $('#attachment').hasClass('hidden') &&
|
|
|
+ $('#attachmentPreview').hasClass('hidden')
|
|
|
+ );
|
|
|
+ if (filename.length) {
|
|
|
+ $.PrivateBin.AttachmentViewer.setAttachment(data, filename);
|
|
|
+ } else {
|
|
|
+ $.PrivateBin.AttachmentViewer.setAttachment(data);
|
|
|
+ }
|
|
|
+ var attachement = $.PrivateBin.AttachmentViewer.getAttachment()
|
|
|
+ results.push(
|
|
|
+ $.PrivateBin.AttachmentViewer.hasAttachment() &&
|
|
|
+ $('#attachment').hasClass('hidden') &&
|
|
|
+ $('#attachmentPreview').hasClass('hidden') &&
|
|
|
+ attachement[0] === data &&
|
|
|
+ attachement[1] === filename
|
|
|
+ );
|
|
|
+ $.PrivateBin.AttachmentViewer.showAttachment();
|
|
|
+ results.push(
|
|
|
+ !$('#attachment').hasClass('hidden') &&
|
|
|
+ (isImage ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
|
|
|
+ );
|
|
|
+ $.PrivateBin.AttachmentViewer.hideAttachment();
|
|
|
+ results.push(
|
|
|
+ $('#attachment').hasClass('hidden') &&
|
|
|
+ (isImage ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
|
|
|
+ );
|
|
|
+ if (isImage) {
|
|
|
+ $.PrivateBin.AttachmentViewer.hideAttachmentPreview();
|
|
|
+ results.push($('#attachmentPreview').hasClass('hidden'));
|
|
|
+ }
|
|
|
+ $.PrivateBin.AttachmentViewer.showAttachment();
|
|
|
+ results.push(
|
|
|
+ !$('#attachment').hasClass('hidden') &&
|
|
|
+ (isImage ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
|
|
|
+ );
|
|
|
+ var element = $('<div></div>');
|
|
|
+ $.PrivateBin.AttachmentViewer.moveAttachmentTo(element, prefix + '%s' + postfix);
|
|
|
+ if (filename.length) {
|
|
|
+ results.push(
|
|
|
+ element.children()[0].href === data &&
|
|
|
+ element.children()[0].getAttribute('download') === filename &&
|
|
|
+ element.children()[0].text === prefix + filename + postfix
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ results.push(element.children()[0].href === data);
|
|
|
+ }
|
|
|
+ $.PrivateBin.AttachmentViewer.removeAttachment();
|
|
|
+ results.push(
|
|
|
+ $('#attachment').hasClass('hidden') &&
|
|
|
+ $('#attachmentPreview').hasClass('hidden')
|
|
|
+ );
|
|
|
+ clean();
|
|
|
+ return results.every(element => element);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ });
|
|
|
+});
|
|
|
+
|