added test for sprintf function, removing dead code and optimizing test cases
This commit is contained in:
parent
b00bcd1352
commit
b9c05b06d0
@ -179,6 +179,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* minimal sprintf emulation for %s and %d formats
|
* minimal sprintf emulation for %s and %d formats
|
||||||
*
|
*
|
||||||
|
* Note that this function needs the parameters in the same order as the
|
||||||
|
* format strings appear in the string, contrary to the original.
|
||||||
|
*
|
||||||
* @see {@link https://stackoverflow.com/questions/610406/javascript-equivalent-to-printf-string-format#4795914}
|
* @see {@link https://stackoverflow.com/questions/610406/javascript-equivalent-to-printf-string-format#4795914}
|
||||||
* @name helper.sprintf
|
* @name helper.sprintf
|
||||||
* @function
|
* @function
|
||||||
@ -195,13 +198,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
}
|
}
|
||||||
var format = args[0],
|
var format = args[0],
|
||||||
i = 1;
|
i = 1;
|
||||||
return format.replace(/%((%)|s|d)/g, function (m) {
|
return format.replace(/%(s|d)/g, function (m) {
|
||||||
// m is the matched format, e.g. %s, %d
|
// m is the matched format, e.g. %s, %d
|
||||||
var val;
|
var val = args[i];
|
||||||
if (m[2]) {
|
|
||||||
val = m[2];
|
|
||||||
} else {
|
|
||||||
val = args[i];
|
|
||||||
// A switch statement so that the formatter can be extended.
|
// A switch statement so that the formatter can be extended.
|
||||||
switch (m)
|
switch (m)
|
||||||
{
|
{
|
||||||
@ -215,7 +214,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
// Default is %s
|
// Default is %s
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
|
||||||
return val;
|
return val;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
104
js/test.js
104
js/test.js
@ -93,6 +93,10 @@ describe('helper', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('setElementText', function () {
|
describe('setElementText', function () {
|
||||||
|
after(function () {
|
||||||
|
cleanup();
|
||||||
|
});
|
||||||
|
|
||||||
jsc.property(
|
jsc.property(
|
||||||
'replaces the content of an element',
|
'replaces the content of an element',
|
||||||
jsc.nearray(jsc.nearray(jsc.elements(alnumString))),
|
jsc.nearray(jsc.nearray(jsc.elements(alnumString))),
|
||||||
@ -104,20 +108,23 @@ describe('helper', function () {
|
|||||||
ids.forEach(function(item, i) {
|
ids.forEach(function(item, i) {
|
||||||
html += '<div id="' + item.join('') + '">' + $.PrivateBin.helper.htmlEntities(contents[i] || contents[0]) + '</div>';
|
html += '<div id="' + item.join('') + '">' + $.PrivateBin.helper.htmlEntities(contents[i] || contents[0]) + '</div>';
|
||||||
});
|
});
|
||||||
var clean = jsdom(html);
|
var elements = $('<body />').html(html);
|
||||||
ids.forEach(function(item, i) {
|
ids.forEach(function(item, i) {
|
||||||
var id = item.join(''),
|
var id = item.join(''),
|
||||||
element = $(document.getElementById(id));
|
element = elements.find('#' + id).first();
|
||||||
$.PrivateBin.helper.setElementText(element, replacingContent);
|
$.PrivateBin.helper.setElementText(element, replacingContent);
|
||||||
result *= replacingContent === $(document.getElementById(id)).text();
|
result *= replacingContent === element.text();
|
||||||
});
|
});
|
||||||
clean();
|
|
||||||
return Boolean(result);
|
return Boolean(result);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('setMessage', function () {
|
describe('setMessage', function () {
|
||||||
|
after(function () {
|
||||||
|
cleanup();
|
||||||
|
});
|
||||||
|
|
||||||
jsc.property(
|
jsc.property(
|
||||||
'replaces the content of an empty element, analog to setElementText',
|
'replaces the content of an empty element, analog to setElementText',
|
||||||
jsc.nearray(jsc.nearray(jsc.elements(alnumString))),
|
jsc.nearray(jsc.nearray(jsc.elements(alnumString))),
|
||||||
@ -129,14 +136,13 @@ describe('helper', function () {
|
|||||||
ids.forEach(function(item, i) {
|
ids.forEach(function(item, i) {
|
||||||
html += '<div id="' + item.join('') + '">' + $.PrivateBin.helper.htmlEntities(contents[i] || contents[0]) + '</div>';
|
html += '<div id="' + item.join('') + '">' + $.PrivateBin.helper.htmlEntities(contents[i] || contents[0]) + '</div>';
|
||||||
});
|
});
|
||||||
var clean = jsdom(html);
|
var elements = $('<body />').html(html);
|
||||||
ids.forEach(function(item, i) {
|
ids.forEach(function(item, i) {
|
||||||
var id = item.join(''),
|
var id = item.join(''),
|
||||||
element = $(document.getElementById(id));
|
element = elements.find('#' + id).first();
|
||||||
$.PrivateBin.helper.setMessage(element, replacingContent);
|
$.PrivateBin.helper.setMessage(element, replacingContent);
|
||||||
result *= replacingContent === $(document.getElementById(id)).text();
|
result *= replacingContent === element.text();
|
||||||
});
|
});
|
||||||
clean();
|
|
||||||
return Boolean(result);
|
return Boolean(result);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -152,20 +158,23 @@ describe('helper', function () {
|
|||||||
ids.forEach(function(item, i) {
|
ids.forEach(function(item, i) {
|
||||||
html += '<div id="' + item.join('') + '"><span class="' + (classes[i] || classes[0]) + '"></span> ' + $.PrivateBin.helper.htmlEntities(contents[i] || contents[0]) + '</div>';
|
html += '<div id="' + item.join('') + '"><span class="' + (classes[i] || classes[0]) + '"></span> ' + $.PrivateBin.helper.htmlEntities(contents[i] || contents[0]) + '</div>';
|
||||||
});
|
});
|
||||||
var clean = jsdom(html);
|
var elements = $('<body />').html(html);
|
||||||
ids.forEach(function(item, i) {
|
ids.forEach(function(item, i) {
|
||||||
var id = item.join(''),
|
var id = item.join(''),
|
||||||
element = $(document.getElementById(id));
|
element = elements.find('#' + id).first();
|
||||||
$.PrivateBin.helper.setMessage(element, replacingContent);
|
$.PrivateBin.helper.setMessage(element, replacingContent);
|
||||||
result *= ' ' + replacingContent === $(document.getElementById(id)).contents()[1].nodeValue;
|
result *= ' ' + replacingContent === element.contents()[1].nodeValue;
|
||||||
});
|
});
|
||||||
clean();
|
|
||||||
return Boolean(result);
|
return Boolean(result);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('urls2links', function () {
|
describe('urls2links', function () {
|
||||||
|
after(function () {
|
||||||
|
cleanup();
|
||||||
|
});
|
||||||
|
|
||||||
jsc.property(
|
jsc.property(
|
||||||
'ignores non-URL content',
|
'ignores non-URL content',
|
||||||
'string',
|
'string',
|
||||||
@ -223,6 +232,77 @@ describe('helper', function () {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('sprintf', function () {
|
||||||
|
after(function () {
|
||||||
|
cleanup();
|
||||||
|
});
|
||||||
|
|
||||||
|
jsc.property(
|
||||||
|
'replaces %s in strings with first given parameter',
|
||||||
|
'string',
|
||||||
|
'(small nearray) string',
|
||||||
|
'string',
|
||||||
|
function (prefix, params, postfix) {
|
||||||
|
params.unshift(prefix + '%s' + postfix);
|
||||||
|
var result = prefix + params[1] + postfix;
|
||||||
|
return result === $.PrivateBin.helper.sprintf.apply(this, params) &&
|
||||||
|
result === $.PrivateBin.helper.sprintf(params);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
jsc.property(
|
||||||
|
'replaces %d in strings with first given parameter',
|
||||||
|
'string',
|
||||||
|
'(small nearray) nat',
|
||||||
|
'string',
|
||||||
|
function (prefix, params, postfix) {
|
||||||
|
params.unshift(prefix + '%d' + postfix);
|
||||||
|
var result = prefix + params[1] + postfix;
|
||||||
|
return result === $.PrivateBin.helper.sprintf.apply(this, params) &&
|
||||||
|
result === $.PrivateBin.helper.sprintf(params);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
jsc.property(
|
||||||
|
'replaces %d in strings with 0 if first parameter is not a number',
|
||||||
|
'string',
|
||||||
|
'(small nearray) falsy',
|
||||||
|
'string',
|
||||||
|
function (prefix, params, postfix) {
|
||||||
|
params.unshift(prefix + '%d' + postfix);
|
||||||
|
var result = prefix + '0' + postfix;
|
||||||
|
return result === $.PrivateBin.helper.sprintf.apply(this, params) &&
|
||||||
|
result === $.PrivateBin.helper.sprintf(params);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
jsc.property(
|
||||||
|
'replaces %d and %s in strings in order',
|
||||||
|
'string',
|
||||||
|
'nat',
|
||||||
|
'string',
|
||||||
|
'string',
|
||||||
|
'string',
|
||||||
|
function (prefix, uint, middle, string, postfix) {
|
||||||
|
var params = [prefix + '%d' + middle + '%s' + postfix, uint, string],
|
||||||
|
result = prefix + uint + middle + string + postfix;
|
||||||
|
return result === $.PrivateBin.helper.sprintf.apply(this, params) &&
|
||||||
|
result === $.PrivateBin.helper.sprintf(params);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
jsc.property(
|
||||||
|
'replaces %d and %s in strings in reverse order',
|
||||||
|
'string',
|
||||||
|
'nat',
|
||||||
|
'string',
|
||||||
|
'string',
|
||||||
|
'string',
|
||||||
|
function (prefix, uint, middle, string, postfix) {
|
||||||
|
var params = [prefix + '%s' + middle + '%d' + postfix, string, uint],
|
||||||
|
result = prefix + string + middle + uint + postfix;
|
||||||
|
return result === $.PrivateBin.helper.sprintf.apply(this, params) &&
|
||||||
|
result === $.PrivateBin.helper.sprintf(params);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
describe('scriptLocation', function () {
|
describe('scriptLocation', function () {
|
||||||
jsc.property(
|
jsc.property(
|
||||||
'returns the URL without query & fragment',
|
'returns the URL without query & fragment',
|
||||||
|
@ -69,7 +69,7 @@ if ($MARKDOWN):
|
|||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-2xPbJySqwLEOH/wTiKWSsMT1qZnHkELGrRwKNGeNxfFnssFH7u3GtNKeccu5SB4+2Lctpd1Bt6vphTRWGi5+cw==" crossorigin="anonymous"></script>
|
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-bNqQCYlXhhJaoCspMQq5mmRFDsV5bXN1b+jr0N7zcG7Yd4hKXDYrSyxHrp1bavnpk1iG62o9rY4yTXHqarEZjw==" crossorigin="anonymous"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
@ -47,7 +47,7 @@ if ($MARKDOWN):
|
|||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-2xPbJySqwLEOH/wTiKWSsMT1qZnHkELGrRwKNGeNxfFnssFH7u3GtNKeccu5SB4+2Lctpd1Bt6vphTRWGi5+cw==" crossorigin="anonymous"></script>
|
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-bNqQCYlXhhJaoCspMQq5mmRFDsV5bXN1b+jr0N7zcG7Yd4hKXDYrSyxHrp1bavnpk1iG62o9rY4yTXHqarEZjw==" crossorigin="anonymous"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
Loading…
Reference in New Issue
Block a user