From 00b8be60f20b0f75918929c9ae569122b229e281 Mon Sep 17 00:00:00 2001 From: Claas Augner Date: Wed, 17 Oct 2018 21:43:37 +0200 Subject: [PATCH] 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 --- core/js/js.js | 13 ++++++++ core/js/tests/specs/coreSpec.js | 54 +++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/core/js/js.js b/core/js/js.js index 12c47d546c..880b986e17 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -770,6 +770,16 @@ var OCP = {}, return false; }, + /** + * 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 * @@ -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 96c8e3f99e..8a867fe322 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() {