UNPKG

extjs-gpl

Version:

GPL licensed version of Sencha Ext JS

871 lines (755 loc) 38.4 kB
describe("Ext.util.Format", function() { var savedFormatLocale = { thousandSeparator: Ext.util.Format.thousandSeparator, decimalSeparator: Ext.util.Format.decimalSeparator, currencySign: Ext.util.Format.currencySign }; describe("undef", function() { it("should return the value itself if defined", function() { expect(Ext.util.Format.undef("this is a defined value")).toBe("this is a defined value"); expect(Ext.util.Format.undef(12345)).toBe(12345); expect(Ext.util.Format.undef(12345.67)).toBe(12345.67); expect(Ext.util.Format.undef(true)).toBe(true); }); it("should return an empty string if the value is undefined", function() { expect(Ext.util.Format.undef(undefined)).toBe(""); }); }); describe("defaultValue", function() { it("should return the value itself if defined", function () { expect(Ext.util.Format.defaultValue("value", "default value")).toBe("value"); }); it("should return the default value if the value is undefined", function() { expect(Ext.util.Format.defaultValue(undefined, "default value")).toBe("default value"); }); it("should return the default value if the value is empty", function() { expect(Ext.util.Format.defaultValue("", "default value")).toBe("default value"); }); }); describe("substr", function() { it("should truncate the string from the start position", function() { expect(Ext.util.Format.substr("abc", 0, 1)).toBe("a"); expect(Ext.util.Format.substr("abc", 1, 1)).toBe("b"); expect(Ext.util.Format.substr("abc", 2, 1)).toBe("c"); }); it("should truncate the string at the specified length", function() { expect(Ext.util.Format.substr("abc", 0, 0)).toBe(""); expect(Ext.util.Format.substr("abc", 0, 1)).toBe("a"); expect(Ext.util.Format.substr("abc", 0, 2)).toBe("ab"); expect(Ext.util.Format.substr("abc", 0, 3)).toBe("abc"); }); it("should convert non-string values to its string representation and then truncate", function() { expect(Ext.util.Format.substr(1234, 1, 2)).toBe("23"); expect(Ext.util.Format.substr(true, 1, 2)).toBe("ru"); }); it("should start at the end of the string if start value is negative", function() { expect(Ext.util.Format.substr("abc", -1, 1)).toBe("c"); expect(Ext.util.Format.substr("abc", -2, 1)).toBe("b"); expect(Ext.util.Format.substr("abc", -3, 1)).toBe("a"); expect(Ext.util.Format.substr("abc", -4, 1)).toBe("a"); expect(Ext.util.Format.substr("abc", -5, 1)).toBe("a"); }); it("should return empty string if start position is out of bounds", function() { expect(Ext.util.Format.substr("abc", 4, 1)).toBe(""); expect(Ext.util.Format.substr("abc", 5, 1)).toBe(""); expect(Ext.util.Format.substr("abc", 6, 1)).toBe(""); }); it("should return empty string if length is negative", function() { expect(Ext.util.Format.substr("abc", 0, -1)).toBe(""); expect(Ext.util.Format.substr("abc", 0, -2)).toBe(""); expect(Ext.util.Format.substr("abc", 0, -3)).toBe(""); }); it("should return the whole string if specified length is greater than string length", function() { expect(Ext.util.Format.substr("abc", 0, 4)).toBe("abc"); expect(Ext.util.Format.substr("abc", 0, 5)).toBe("abc"); expect(Ext.util.Format.substr("abc", 1, 3)).toBe("bc"); expect(Ext.util.Format.substr("abc", 2, 2)).toBe("c"); }); }); describe("lowercase", function() { it("should preserve lowercase strings", function() { expect(Ext.util.Format.lowercase("lowercase string")).toBe("lowercase string"); }); it("should convert uppercase strings to lowercase", function() { expect(Ext.util.Format.lowercase("UPPERCASE STRING")).toBe("uppercase string"); }); it("should convert mixed lowercase/uppercase strings to lowercase", function() { expect(Ext.util.Format.lowercase("MIXED string")).toBe("mixed string"); expect(Ext.util.Format.lowercase("mixed STRING")).toBe("mixed string"); expect(Ext.util.Format.lowercase("MiXeD sTrIng")).toBe("mixed string"); }); it("should be null/undefined safe", function() { expect(Ext.util.Format.lowercase(undefined)).toBe("undefined"); expect(Ext.util.Format.lowercase(null)).toBe("null"); }); it("should cast non-string values before processing", function() { expect(Ext.util.Format.lowercase(123)).toBe("123"); expect(Ext.util.Format.lowercase(true)).toBe("true"); }); }); describe("uppercase", function() { it("should preserve uppercase strings", function() { expect(Ext.util.Format.uppercase("UPPERCASE STRING")).toBe("UPPERCASE STRING"); }); it("should convert lowercase strings to uppercase", function() { expect(Ext.util.Format.uppercase("lowercase string")).toBe("LOWERCASE STRING"); }); it("should convert mixed lowercase/uppercase strings to uppercase", function() { expect(Ext.util.Format.uppercase("MIXED string")).toBe("MIXED STRING"); expect(Ext.util.Format.uppercase("mixed STRING")).toBe("MIXED STRING"); expect(Ext.util.Format.uppercase("MiXeD sTrIng")).toBe("MIXED STRING"); }); it("should be null/undefined safe", function() { expect(Ext.util.Format.uppercase(undefined)).toBe("UNDEFINED"); expect(Ext.util.Format.uppercase(null)).toBe("NULL"); }); it("should cast non-string values before processing", function() { expect(Ext.util.Format.uppercase(123)).toBe("123"); expect(Ext.util.Format.uppercase(true)).toBe("TRUE"); }); }); describe("usMoney", function(){ it("should format with 2 decimals, prefixed by a dollar sign", function() { expect(Ext.util.Format.usMoney(1234.567)).toBe("$1,234.57"); }); it("should format with 2 decimals, prefixed by a negative sign, and a dollar sign", function() { expect(Ext.util.Format.usMoney(-1234.567)).toBe("-$1,234.57"); }); it("should format with a comma as a thousand separator", function() { expect(Ext.util.Format.usMoney(1234567.89)).toBe("$1,234,567.89"); }); }); describe("currency", function() { it("should allow 0 for a decimal value", function(){ expect(Ext.util.Format.currency(100, '$', 0)).toBe('$100'); }); it("should position currency signal where specified", function() { expect(Ext.util.Format.currency(123.45, '$', 2)).toBe("$123.45"); expect(Ext.util.Format.currency(123.45, '$', 2, false)).toBe("$123.45"); expect(Ext.util.Format.currency(123.45, '$', 2, true)).toBe("123.45$"); }); describe("currency in FR locale", function(){ beforeEach(function() { Ext.apply(Ext.util.Format, { thousandSeparator: '.', decimalSeparator: ',', currencySign: '\u20ac', dateFormat: 'd/m/Y' }); }); afterEach(function() { Ext.apply(Ext.util.Format, savedFormatLocale); }); it("should format with 2 decimals, prefixed by a euro sign", function() { expect(Ext.util.Format.currency(1234.567)).toBe("\u20ac1.234,57"); }); it("should format with 2 decimals, prefixed by a negative sign, and a euro sign", function() { expect(Ext.util.Format.currency(-1234.567)).toBe("-\u20ac1.234,57"); }); }); }); describe("number", function () { describe("number in default (US) locale", function() { it("should format with no decimals", function() { expect(Ext.util.Format.number(1, "0")).toBe("1"); }); it("should format with two decimals", function() { expect(Ext.util.Format.number(1, "0.00")).toBe("1.00"); }); it("should format+round with two decimals, and no thousand separators", function() { expect(Ext.util.Format.number(1234.567, "0.00")).toBe("1234.57"); }); it("should format+round with two decimals, and ',' as the thousand separator", function() { expect(Ext.util.Format.number(1234.567, ",0.00")).toBe("1,234.57"); }); it("should format+round with no decimals, and ',' as the thousand separator", function() { expect(Ext.util.Format.number(1234.567, ",0")).toBe("1,235"); }); }); describe("number using FR locale", function() { var savedFormatLocale = { thousandSeparator: Ext.util.Format.thousandSeparator, decimalSeparator: Ext.util.Format.decimalSeparator, currencySign: Ext.util.Format.currencySign, dateFormat: Ext.util.Format.dateFormat }; beforeEach(function() { Ext.apply(Ext.util.Format, { thousandSeparator: '.', decimalSeparator: ',', currencySign: '\u20ac', dateFormat: 'd/m/Y' }); }); afterEach(function() { Ext.apply(Ext.util.Format, savedFormatLocale); }); it("should format with no decimals", function() { expect(Ext.util.Format.number(1, "0")).toBe("1"); }); it("should format with two decimals", function() { expect(Ext.util.Format.number(1, "0.00")).toBe("1,00"); }); it("should format+round with two decimals, and no thousand separators", function() { expect(Ext.util.Format.number(1234.567, "0.00")).toBe("1234,57"); }); it("should format+round with two decimals after a ',', and '.' as the thousand separator", function() { expect(Ext.util.Format.number(1234.567, ",0.00")).toBe("1.234,57"); }); it("should format+round with no decimals, and '.' as the thousand separator", function() { expect(Ext.util.Format.number(1234.567, ",0")).toBe("1.235"); }); it("should use custom separator with thousands specified where num < 1000", function(){ expect(Ext.util.Format.number(12.34, '0,000.00')).toBe("12,34"); }); }); // In Ext4, the "/i" suffix allows you to use locale-specific separators in the format string, as opposed // to US/UK conventions. Output however ALWAYS follows the local settings in the Format singleton which may // be overridden by locale files. describe("number using FR locale with /i", function() { var savedFormatLocale = { thousandSeparator: Ext.util.Format.thousandSeparator, decimalSeparator: Ext.util.Format.decimalSeparator, currencySign: Ext.util.Format.currencySign, dateFormat: Ext.util.Format.dateFormat }; // set up the FR formatting locale beforeEach(function() { Ext.apply(Ext.util.Format, { thousandSeparator: '.', decimalSeparator: ',', currencySign: '\u20ac', dateFormat: 'd/m/Y' }); }); afterEach(function() { Ext.apply(Ext.util.Format, savedFormatLocale); }); // Demonstrate "Incorrect" use with "/i". '.' means thousand separator and ',' means decimal in FR locale. // Read carefully. In the formatting strings below, '.' is taken to mean thousand separator, and // ',' is taken to mean decimal separator it("should format with no decimals", function() { expect(Ext.util.Format.number(1, "0.00/i")).toBe("1"); }); it("should format+round with no decimals, and '.' as thousand separator", function() { expect(Ext.util.Format.number(1234.567, "0.00/i")).toBe("1.235"); }); it("should format+round with three decimals after a ',', and '.' as the thousand separator", function() { expect(Ext.util.Format.number(1234.567, ",0.00/i")).toBe("1.234,567"); }); it("should format+round with one decimal, and no thousand separator", function() { expect(Ext.util.Format.number(1234.567, ",0/i")).toBe("1234,6"); }); // Correct usage it("should format with two decimals", function() { expect(Ext.util.Format.number(1, "0,00/i")).toBe("1,00"); }); it("should format+round with two decimals, and no thousand separators", function() { expect(Ext.util.Format.number(1234.567, "0,00/i")).toBe("1234,57"); }); it("should format+round with two decimals after a ',', and '.' as the thousand separator", function() { expect(Ext.util.Format.number(1234.567, ".0,00/i")).toBe("1.234,57"); }); it("should format+round with no decimals, and '.' as the thousand separator", function() { expect(Ext.util.Format.number(1234.567, ".0/i")).toBe("1.235"); }); }); describe("using # for max decimal places", function(){ it("should limit the number of decimal places", function(){ expect(Ext.util.Format.number(1.23456, '0.##')).toBe('1.23'); }); it("should should not pad decimals if less than the format", function(){ expect(Ext.util.Format.number(1.987, '0.#####')).toBe('1.987'); }); it("should not add decimals if not required", function() { expect(Ext.util.Format.number(17, '0.#####')).toBe('17'); }); it("should apply decimals when using thousand sep", function(){ expect(Ext.util.Format.number(98765.432, '0,000.##')).toBe('98,765.43'); }); it("should pad correctly with a mixture of # & 0", function() { expect(Ext.util.Format.number(1.983, '0.0##')).toBe('1.983'); expect(Ext.util.Format.number(1.9, '0.00##')).toBe('1.90'); expect(Ext.util.Format.number(1.98765, '0.000######')).toBe('1.98765'); }); describe("euro style separator", function(){ var savedFormatLocale = { thousandSeparator: Ext.util.Format.thousandSeparator, decimalSeparator: Ext.util.Format.decimalSeparator, currencySign: Ext.util.Format.currencySign, dateFormat: Ext.util.Format.dateFormat }; // set up the FR formatting locale beforeEach(function() { Ext.apply(Ext.util.Format, { thousandSeparator: '.', decimalSeparator: ',', currencySign: '\u20ac', dateFormat: 'd/m/Y' }); }); afterEach(function() { Ext.apply(Ext.util.Format, savedFormatLocale); }); describe("without /i", function() { it("should limit the number of decimal places", function(){ expect(Ext.util.Format.number(1.23456, '0.##')).toBe('1,23'); }); it("should should not pad decimals if less than the format", function(){ expect(Ext.util.Format.number(1.987, '0.#####')).toBe('1,987'); }); it("should not add decimals if not required", function() { expect(Ext.util.Format.number(17, '0.#####')).toBe('17'); }); it("should apply decimals when using thousand sep", function(){ expect(Ext.util.Format.number(98765.432, '0,000.##')).toBe('98.765,43'); }); }); describe("with /i", function() { it("should limit the number of decimal places", function(){ expect(Ext.util.Format.number(1.23456, '0,##/i')).toBe('1,23'); }); it("should should not pad decimals if less than the format", function(){ expect(Ext.util.Format.number(1.987, '0,#####/i')).toBe('1,987'); }); it("should not add decimals if not required", function() { expect(Ext.util.Format.number(17, '0,#####/i')).toBe('17'); }); it("should apply decimals when using thousand sep", function(){ expect(Ext.util.Format.number(98765.432, '0.000,##/i')).toBe('98.765,43'); }); }); }); }); describe("using a mixture of 0 & # for decimals", function() { it("should pad to at least the amount specified", function() { expect(Ext.util.Format.number(1.2, '0.00##')).toBe('1.20'); }); it("should trim trailing numbers after the specified amount", function() { expect(Ext.util.Format.number(1.23456, '0.00##')).toBe('1.2346'); }); it("should not have trailing zeroes after the specified decimal", function() { expect(Ext.util.Format.number(1.234, '0.00##')).toBe('1.234'); }); it("should add decimals when using thousands", function() { expect(Ext.util.Format.number(11000.234, '0,000.00##')).toBe('11,000.234'); }); it("should apply decimals when using a negative number", function() { expect(Ext.util.Format.number(-1.2, '0,000.00##')).toBe('-1.20'); }); describe("euro style separator", function(){ var savedFormatLocale = { thousandSeparator: Ext.util.Format.thousandSeparator, decimalSeparator: Ext.util.Format.decimalSeparator, currencySign: Ext.util.Format.currencySign, dateFormat: Ext.util.Format.dateFormat }; // set up the FR formatting locale beforeEach(function() { Ext.apply(Ext.util.Format, { thousandSeparator: '.', decimalSeparator: ',', currencySign: '\u20ac', dateFormat: 'd/m/Y' }); }); afterEach(function() { Ext.apply(Ext.util.Format, savedFormatLocale); }); describe("without /i", function() { it("should pad to at least the amount specified", function() { expect(Ext.util.Format.number(1.2, '0.00##')).toBe('1,20'); }); it("should trim trailing numbers after the specified amount", function() { expect(Ext.util.Format.number(1.23456, '0.00##')).toBe('1,2346'); }); it("should not have trailing zeroes after the specified decimal", function() { expect(Ext.util.Format.number(1.234, '0.00##')).toBe('1,234'); }); it("should add decimals when using thousands", function() { expect(Ext.util.Format.number(11000.234, '0,000.00##')).toBe('11.000,234'); }); it("should apply decimals when using a negative number", function() { expect(Ext.util.Format.number(-1.2, '0,000.00##')).toBe('-1,20'); }); }); describe("with /i", function() { it("should pad to at least the amount specified", function() { expect(Ext.util.Format.number(1.2, '0,00##/i')).toBe('1,20'); }); it("should trim trailing numbers after the specified amount", function() { expect(Ext.util.Format.number(1.23456, '0,00##/i')).toBe('1,2346'); }); it("should not have trailing zeroes after the specified decimal", function() { expect(Ext.util.Format.number(1.234, '0,00##/i')).toBe('1,234'); }); it("should add decimals when using thousands", function() { expect(Ext.util.Format.number(11000.234, '0.000,00##/i')).toBe('11.000,234'); }); it("should apply decimals when using a negative number", function() { expect(Ext.util.Format.number(-1.2, '0.000,00##/i')).toBe('-1,20'); }); }); }); }); describe("negative", function() { it("should check for a 0 value before appending negative", function(){ expect(Ext.util.Format.number(-2.842170943040401e-14, "0,000.00")).toBe('0.00'); }); it("should apply the thousandSep with a large negative number", function(){ expect(Ext.util.Format.number(-22002, '0,000')).toBe('-22,002'); }); it("should not put the negative when a small negative number trims trailing zeroes and rounds to 0", function() { expect(Ext.util.Format.number(-0.00000001, '0,0.######')).toBe('0'); }); }); it("should return the number itself if formatString is not specified", function() { expect(Ext.util.Format.number(12345.67, undefined)).toBe(12345.67); expect(Ext.util.Format.number(12345.67, null)).toBe(12345.67); }); it("should return empty string if value is not a number", function() { expect(Ext.util.Format.number("this is not a number", "0.00")).toBe(""); }); it("should return empty string if the value is NaN", function() { expect(Ext.util.Format.number(window.NaN, '0.00')).toBe(''); }); it("should raise error if more than one decimal point is specified in the format string", function() { expect(function() { Ext.util.Format.number("1234.67", "0.0.00"); }).toThrow(); }); }); describe("date", function() { it("should return empty string for undefined values", function() { expect(Ext.util.Format.date(undefined)).toBe(''); }); it("should return empty string for null values", function() { expect(Ext.util.Format.date(null)).toBe(''); }); it("should parse string dates", function() { expect(Ext.util.Format.date("10/15/81")).toBe("10/15/1981"); }); it("should format according to Ext.Date.defaultFormat if no format was specified", function() { var date = new Date(1981, 9, 15, 15, 46, 30); expect(Ext.util.Format.date(date)).toBe("10/15/1981"); }); it("should format according to specified format when specified", function() { var date = new Date(1981, 9, 15, 15, 46, 30); expect(Ext.util.Format.date(date, "d/m/Y H:i:s")).toBe("15/10/1981 15:46:30"); }); }); describe("dateRenderer", function() { it("should return a function that formats dates with the specified format", function() { var date = new Date(1981, 9, 15, 15, 46, 30); expect(Ext.util.Format.dateRenderer("d/m/Y H:i:s").call(this, date)).toBe("15/10/1981 15:46:30"); }); }); describe('hex', function () { it('should not reduce length when digits is positive', function () { expect(Ext.util.Format.hex(0x12e4, 2)).toBe('12e4'); }); it('should reduce length when digits is negative', function () { expect(Ext.util.Format.hex(0x12e4, -2)).toBe('e4'); }); it('should drop fractional digits', function () { expect(Ext.util.Format.hex(0x12e4 + 0.123)).toBe('12e4'); }); it('should pad with 0 on the left to achieve length', function () { expect(Ext.util.Format.hex(0x0e, 2)).toBe('0e'); }); it('should pad with 0 on the left if too short', function () { expect(Ext.util.Format.hex(0x0e, -3)).toBe('00e'); }); it('should not pad when exact length', function () { expect(Ext.util.Format.hex(0x1e, 2)).toBe('1e'); }); }); describe('percent', function () { it('should format 0.5 as 50%', function () { var s = Ext.util.Format.percent(0.5); expect(s).toBe('50%'); }); it('should format 0.314 as 31%', function () { var s = Ext.util.Format.percent(0.314); expect(s).toBe('31%'); }); it('should format 0.314 as 31.4% with 0.0 format', function () { var s = Ext.util.Format.percent(0.314, '0.0'); expect(s).toBe('31.4%'); }); }); describe('or', function () { it('should map truthy values properly', function () { var s = Ext.util.Format.or(1, 'F'); expect(s).toBe(1); }); it('should map 0 properly', function () { var s = Ext.util.Format.or(0, 'F'); expect(s).toBe('F'); }); it('should map false properly', function () { var s = Ext.util.Format.or(false, 'F'); expect(s).toBe('F'); }); it('should map "" properly', function () { var s = Ext.util.Format.or("", 'F'); expect(s).toBe('F'); }); it('should map NaN properly', function () { var s = Ext.util.Format.or(NaN, 'F'); expect(s).toBe('F'); }); it('should map null properly', function () { var s = Ext.util.Format.or(null, 'F'); expect(s).toBe('F'); }); it('should map undefined properly', function () { var s = Ext.util.Format.or(undefined, 'F'); expect(s).toBe('F'); }); }); describe('pick', function () { it('should map an object properly', function () { var s = Ext.util.Format.pick({}, 'F', 'T'); expect(s).toBe('T'); }); it('should map a string properly', function () { var s = Ext.util.Format.pick('foo', 'F', 'T'); expect(s).toBe('T'); }); it('should map 0 properly', function () { var s = Ext.util.Format.pick(0, 'F', 'T'); expect(s).toBe('F'); }); it('should map 1 properly', function () { var s = Ext.util.Format.pick(1, 'zero', 'one', 'two', 'three'); expect(s).toBe('one'); }); it('should map 3 properly', function () { var s = Ext.util.Format.pick(3, 'zero', 'one', 'two', 'three'); expect(s).toBe('three'); }); it('should map false properly', function () { var s = Ext.util.Format.pick(false, 'F', 'T'); expect(s).toBe('F'); }); it('should map "" properly', function () { var s = Ext.util.Format.pick("", 'F', 'T'); expect(s).toBe('F'); }); it('should map NaN properly', function () { var s = Ext.util.Format.pick(NaN, 'F', 'T'); expect(s).toBe('F'); }); it('should map null properly', function () { var s = Ext.util.Format.pick(null, 'F', 'T'); expect(s).toBe('F'); }); it('should map undefined properly', function () { var s = Ext.util.Format.pick(undefined, 'F', 'T'); expect(s).toBe('F'); }); }); describe("stripTags", function() { it("should return undefined if value is undefined", function() { expect(Ext.util.Format.stripTags(undefined)).toBeUndefined(); }); it("should return null if value is null", function() { expect(Ext.util.Format.stripTags(null)).toBeNull(); }); it("should return the exact original value if it doesn't contains any tags", function() { expect(Ext.util.Format.stripTags("this string contains no tags")).toBe("this string contains no tags"); }); it("should strip tags when found", function() { expect(Ext.util.Format.stripTags("<p>this string <b>contains</b> tags</p>")).toBe("this string contains tags"); }); }); describe("stripScripts", function() { it("should return undefined if value is undefined", function() { expect(Ext.util.Format.stripScripts(undefined)).toBeUndefined(); }); it("should return null if value is null", function() { expect(Ext.util.Format.stripScripts(null)).toBeNull(); }); it("should return the exact original value if it doesn't contains any scripts", function() { expect(Ext.util.Format.stripTags("this string contains no scripts")).toBe("this string contains no scripts"); }); it("should stript scripts when found", function() { expect(Ext.util.Format.stripScripts("<script>alert('foo');</script>this string <b>contains</b> scripts")).toBe("this string <b>contains</b> scripts"); }); }); describe("fileSize", function() { var fs = Ext.util.Format.fileSize; it("should return the size in bytes if size < 1024", function() { expect(fs(-9999999999)).toBe("-9999999999 bytes"); expect(fs(0)).toBe("0 bytes"); expect(fs(1023)).toBe("1023 bytes"); }); it("should return byte in the singular form if the value is 1", function(){ expect(fs(1)).toBe('1 byte'); }); it("should return the size in kilobytes if 1024 <= size < 1MB", function() { expect(fs(1024)).toBe("1 KB"); expect(fs(1024 * 1024 - 1)).toBe("1024 KB"); }); it("should return the size in megabytes if 1MB <= size < 1GB", function() { expect(fs(1024 * 1024)).toBe("1 MB"); expect(fs(1024 * 1024 * 100)).toBe("100 MB"); expect(fs(1024 * 1024 * 1024 - 1)).toBe("1024 MB"); }); it("should return the size in GB otherwise", function(){ expect(fs(1024 * 1024 * 1024)).toBe("1 GB"); expect(fs(15 * 1024 * 1024 * 1024)).toBe("15 GB"); }); }); describe("math", function() { it("should return the first argument and the evaluation of the second argument", function() { expect(Ext.util.Format.math(12, '+ 12')).toBe(24); expect(Ext.util.Format.math(12, '* 12')).toBe(144); }); }); describe("round", function() { it("should round the original value if the precision is not specified", function() { expect(Ext.util.Format.round(1234.56)).toBe(1235); }); it("should preserve the original value if precision is not a number", function() { expect(Ext.util.Format.round(1234.56, "invalid precision")).toBe(1234.56); }); it("should round the value to the specified precision", function() { expect(Ext.util.Format.round(1234.50, 1)).toBe(1234.5); expect(Ext.util.Format.round(1234.54, 1)).toBe(1234.5); expect(Ext.util.Format.round(1234.55, 1)).toBe(1234.6); expect(Ext.util.Format.round(1234.59, 1)).toBe(1234.6); }); }); describe("numberRenderer", function() { it("should return a function that formats a number with the specified format", function() { expect(Ext.util.Format.numberRenderer("0.00")(123.321)).toBe("123.32"); }); }); describe("plural", function() { it("should return the singular form if count == 1", function() { expect(Ext.util.Format.plural(1, "car")).toBe("1 car"); expect(Ext.util.Format.plural(1, "child", "children")).toBe("1 child"); }); it("should return the plural as singular+s by default if count <> 1", function() { expect(Ext.util.Format.plural(0, "car")).toBe("0 cars"); expect(Ext.util.Format.plural(2, "car")).toBe("2 cars"); }); it("should return the specified plural if count <> 1", function() { expect(Ext.util.Format.plural(0, "child", "children")).toBe("0 children"); expect(Ext.util.Format.plural(2, "child", "children")).toBe("2 children"); }); }); describe("nl2br", function() { it("should convert newline characters to <br/>", function() { expect(Ext.util.Format.nl2br("first line\nsecond line")).toBe("first line<br/>second line"); }); it("should be null/undefined safe", function() { expect(Ext.util.Format.nl2br(undefined)).toBe(""); expect(Ext.util.Format.nl2br(null)).toBe(""); }); }); describe("capitalize", function() { it("should be alias to Ext.String.capitalize", function() { expect(Ext.util.Format.capitalize).toBe(Ext.String.capitalize); }); }); describe("ellipsis", function() { it("should be alias to Ext.String.ellipsis", function() { expect(Ext.util.Format.ellipsis).toBe(Ext.String.ellipsis); }); }); describe("format", function() { it("should be alias to Ext.String.format", function() { expect(Ext.util.Format.format).toBe(Ext.String.format); }); }); describe("htmlDecode", function() { it("should be alias to Ext.String.htmlDecode", function() { expect(Ext.util.Format.htmlDecode).toBe(Ext.String.htmlDecode); }); }); describe("htmlEncode", function() { it("should be alias to Ext.String.htmlEncode", function() { expect(Ext.util.Format.htmlEncode).toBe(Ext.String.htmlEncode); }); }); describe("leftPad", function() { it("should be alias to Ext.String.leftPad", function() { expect(Ext.util.Format.leftPad).toBe(Ext.String.leftPad); }); }); describe("trim", function() { it("should be alias to Ext.String.trim", function() { expect(Ext.util.Format.trim).toBe(Ext.String.trim); }); }); describe("parseBox", function() { it("should return a box when 4 margins are specified", function() { expect(Ext.util.Format.parseBox("1 2 3 4")).toEqual({ top: 1, right: 2, bottom: 3, left: 4 }); }); it("should return a box when 3 margins are specified", function() { expect(Ext.util.Format.parseBox("1 2 3")).toEqual({ top: 1, right: 2, bottom: 3, left: 2 }); }); it("should return a box when 2 margins are specified", function() { expect(Ext.util.Format.parseBox("1 2")).toEqual({ top: 1, right: 2, bottom: 1, left: 2 }); }); it("should return a box when 1 margin is specified", function() { expect(Ext.util.Format.parseBox("1")).toEqual({ top: 1, right: 1, bottom: 1, left: 1 }); }); it("should return a box when 1 margin is specified as number", function() { expect(Ext.util.Format.parseBox(1)).toEqual({ top: 1, right: 1, bottom: 1, left: 1 }); }); it("should return a 0 margin box when no margin is specified", function() { var zeroMarginBox = { top: 0, right: 0, bottom: 0, left: 0 }; expect(Ext.util.Format.parseBox(undefined)).toEqual(zeroMarginBox); expect(Ext.util.Format.parseBox(null)).toEqual(zeroMarginBox); expect(Ext.util.Format.parseBox("")).toEqual(zeroMarginBox); expect(Ext.util.Format.parseBox(" ")).toEqual(zeroMarginBox); }); }); describe("escapeRegex", function() { it("should escape regular expressions", function() { expect(Ext.util.Format.escapeRegex("-.*+?^${}()|[]/\\abc0123")).toBe("\\-\\.\\*\\+\\?\\^\\$\\{\\}\\(\\)\\|\\[\\]\\/\\\\abc0123"); }); }); describe('word', function () { it('should split on spaces or punctuation', function () { expect(Ext.util.Format.word('a b, abc', 2)).toBe('abc'); }); it('should return empty if out of bounds', function () { expect(Ext.util.Format.word('a b, abc', 5)).toBe(''); }); }); });