summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaas Augner <git@caugner.de>2018-10-17 21:43:37 +0200
committerRoeland Jago Douma <roeland@famdouma.nl>2018-10-24 09:18:39 +0200
commit00b8be60f20b0f75918929c9ae569122b229e281 (patch)
tree74b2d9dd998cd6afb68636404f7ea262ea59656d
parent7c0cd4f9ff22d1b94176079dca152b2f56ff0c88 (diff)
downloadnextcloud-server-00b8be60f20b0f75918929c9ae569122b229e281.tar.gz
nextcloud-server-00b8be60f20b0f75918929c9ae569122b229e281.zip
humanFileSize: use toLocaleString
humanFileSize: add test with locale humanFileSize: use canonical locale humanFileSize: skip test w/o toLocaleString support humanFileSize: stub getCanonicalLocale OC.getCanonicalLocale: cover undefined case humanFileSize: fix getCanonicalLocale stub Signed-off-by: Claas Augner <git@caugner.de>
-rw-r--r--core/js/js.js13
-rw-r--r--core/js/tests/specs/coreSpec.js54
2 files changed, 67 insertions, 0 deletions
diff --git a/core/js/js.js b/core/js/js.js
index 12c47d546c1..880b986e17b 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -771,6 +771,16 @@ var OCP = {},
},
/**
+ * Returns the user's locale as a BCP 47 compliant language tag
+ *
+ * @return {String} locale string
+ */
+ getCanonicalLocale: function() {
+ var locale = this.getLocale();
+ return typeof locale === 'string' ? locale.replace(/_/g, '-') : locale;
+ },
+
+ /**
* Returns the user's locale
*
* @return {String} locale string
@@ -1843,6 +1853,9 @@ function humanFileSize(size, skipSmallSizes) {
else if(relativeSize.substr(relativeSize.length-2,2)==='.0'){
relativeSize=relativeSize.substr(0,relativeSize.length-2);
}
+ else{
+ relativeSize = parseFloat(relativeSize).toLocaleString(OC.getCanonicalLocale());
+ }
return relativeSize + ' ' + readableFormat;
}
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index 96c8e3f99ec..8a867fe3228 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -273,6 +273,25 @@ describe('Core base tests', function() {
expect(OC.filePath('files', 'ajax', 'test.php')).toEqual('http://localhost/index.php/apps/files/ajax/test.php');
});
});
+ describe('getCanonicalLocale', function() {
+ var localeStub;
+
+ beforeEach(function() {
+ localeStub = sinon.stub(OC, 'getLocale');
+ });
+ afterEach(function() {
+ localeStub.restore();
+ });
+
+ it("Returns primary locales as is", function() {
+ expect(OC.getCanonicalLocale('de')).toEqual('de');
+ expect(OC.getCanonicalLocale('zu')).toEqual('zu');
+ });
+ it("Returns extended locales with hyphens", function() {
+ expect(OC.getCanonicalLocale('az_Cyrl_AZ')).toEqual('az-Cyrl-AZ');
+ expect(OC.getCanonicalLocale('de_DE')).toEqual('de-DE');
+ });
+ });
describe('Link functions', function() {
var TESTAPP = 'testapp';
var TESTAPP_ROOT = OC.getRootPath() + '/appsx/testapp';
@@ -560,7 +579,26 @@ describe('Core base tests', function() {
});
});
describe('Util', function() {
+ var locale;
+ var localeStub;
+
+ beforeEach(function() {
+ locale = OC.getCanonicalLocale();
+ localeStub = sinon.stub(OC, 'getCanonicalLocale');
+ localeStub.returns(locale);
+ });
+
+ afterEach(function() {
+ localeStub.restore();
+ });
+
describe('humanFileSize', function() {
+ // cit() will skip tests if toLocaleString() is not supported.
+ // See https://github.com/ariya/phantomjs/issues/12581
+ //
+ // Please run these tests in Chrome/Firefox manually.
+ var cit = 4.2.toLocaleString("de") !== "4,2" ? xit : it;
+
it('renders file sizes with the correct unit', function() {
var data = [
[0, '0 B'],
@@ -589,6 +627,22 @@ describe('Core base tests', function() {
expect(OC.Util.humanFileSize(data[i][0], true)).toEqual(data[i][1]);
}
});
+ cit('renders file sizes with the correct locale', function() {
+ localeStub.returns("de");
+ var data = [
+ [0, '0 B'],
+ ["0", '0 B'],
+ ["A", 'NaN B'],
+ [125, '125 B'],
+ [128000, '125 KB'],
+ [128000000, '122,1 MB'],
+ [128000000000, '119,2 GB'],
+ [128000000000000, '116,4 TB']
+ ];
+ for (var i = 0; i < data.length; i++) {
+ expect(OC.Util.humanFileSize(data[i][0])).toEqual(data[i][1]);
+ }
+ });
});
describe('computerFileSize', function() {
it('correctly parses file sizes from a human readable formated string', function() {