Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

321 lines
16 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
$(function () {
module("Utils");
test("Asc.typeOf", function test_typeOf() {
strictEqual(Asc.typeOf(1), "number", "Asc.typeOf( 1 )");
strictEqual(Asc.typeOf(1.1), "number", "Asc.typeOf( 1.1 )");
strictEqual(Asc.typeOf(new Number(2)), "number", "Asc.typeOf( new Number(2) )");
strictEqual(Asc.typeOf(new Number(2.2)), "number", "Asc.typeOf( new Number(2.2) )");
strictEqual(Asc.typeOf('abc'), "string", "Asc.typeOf( 'abc' )");
strictEqual(Asc.typeOf(new String('def')), "string", "Asc.typeOf( new String('def') )");
strictEqual(Asc.typeOf([1]), "array", "Asc.typeOf( [1] )");
strictEqual(Asc.typeOf(function () {}), "function", "Asc.typeOf( function () {} )");
strictEqual(Asc.typeOf(new Function()), "function", "Asc.typeOf( new Function() )");
});
test("Asc.lastIndexOf", function test_lastIndexOf() {
strictEqual(Asc.lastIndexOf("aabb aa bb bbaa", /a{2}/, 8), 5, 'Asc.lastIndexOf("aabb aa bb bbaa", /a{2}/, 8)');
strictEqual(Asc.lastIndexOf("aabb aa bb bbaa", /a{2}/, 15), 13, 'Asc.lastIndexOf("aabb aa bb bbaa", /a{2}/, 13)');
strictEqual(Asc.lastIndexOf("aabb aa bb bbaa", /a[^b]+b/, 15), 6, 'Asc.lastIndexOf("aabb aa bb bbaa", /a[^b]+b/, 15)');
strictEqual(Asc.lastIndexOf("aabb aa bb bbaa", /c+/, 15), -1, 'Asc.lastIndexOf("aabb aa bb bbaa", /c+/, 15)');
});
test("Asc.search", function test_search() {
strictEqual(Asc.search([1, 2, 3], function (a) {return a === 1}), 0, 'Asc.search([1, 2, 3], function (a) {return a === 1})');
strictEqual(Asc.search([1, 2, 3], function (a) {return a > 1}), 1, 'Asc.search([1, 2, 3], function (a) {return a > 1})');
strictEqual(Asc.search([1, 2, 3], function (a) {return a < 0}), -1, 'Asc.search([1, 2, 3], function (a) {return a < 0})');
strictEqual(Asc.search([], function (a) {return a > 1}), -1, 'Asc.search([], function (a) {return a > 1})');
});
test("Asc.floor", function test_floor() {
strictEqual(Asc.floor(0), Math.floor(0), "Asc.floor(0)");
strictEqual(Asc.floor(45.0), Math.floor(45.0), "Asc.floor(45.0)");
strictEqual(Asc.floor(45.4), Math.floor(45.4), "Asc.floor(45.4)");
strictEqual(Asc.floor(45.5), Math.floor(45.5), "Asc.floor(45.5)");
strictEqual(Asc.floor(45.6), Math.floor(45.6), "Asc.floor(45.6)");
strictEqual(Asc.floor(46), Math.floor(46), "Asc.floor(46)");
strictEqual(Asc.floor(-0), Math.floor(-0), "Asc.floor(-0)");
strictEqual(Asc.floor(-45.0), Math.floor(-45.0), "Asc.floor(-45.0)");
strictEqual(Asc.floor(-45.4), Math.floor(-45.4), "Asc.floor(-45.4)");
strictEqual(Asc.floor(-45.5), Math.floor(-45.5), "Asc.floor(-45.5)");
strictEqual(Asc.floor(-45.6), Math.floor(-45.6), "Asc.floor(-45.6)");
strictEqual(Asc.floor(-46), Math.floor(-46), "Asc.floor(-46)");
strictEqual(Asc.floor(.6+.7+.7), 2, "Asc.floor(.6+.7+.7)"); // 1.99999...
strictEqual(Asc.floor(-.6-.7-.7), -2, "Asc.floor(-.6-.7-.7)"); // -1.99999...
strictEqual(Asc.floor(.1+.2-.3), 0, "Asc.floor(.1+.2-.3)"); // 5.5e-17
strictEqual(Asc.floor(-.1-.2+.3), 0, "Asc.floor(-.1-.2+.3)"); // -5.5e-17
strictEqual(Asc.floor(.1+.2+.9-.2), 1, "Asc.floor(.1+.2+.9-.2)"); // 1.0000...2
strictEqual(Asc.floor(-.1-.2-.9+.2), -1, "Asc.floor(.1+.2+.9-.2)"); // -1.0000...2
});
test("Asc.ceil", function test_ceil() {
strictEqual(Asc.ceil(0), Math.ceil(0), "Asc.ceil(0)");
strictEqual(Asc.ceil(45.0), Math.ceil(45.0), "Asc.ceil(45.0)");
strictEqual(Asc.ceil(45.4), Math.ceil(45.4), "Asc.ceil(45.4)");
strictEqual(Asc.ceil(45.5), Math.ceil(45.5), "Asc.ceil(45.5)");
strictEqual(Asc.ceil(45.6), Math.ceil(45.6), "Asc.ceil(45.6)");
strictEqual(Asc.ceil(46), Math.ceil(46), "Asc.ceil(46)");
strictEqual(Asc.ceil(-0), Math.ceil(-0), "Asc.ceil(-0)");
strictEqual(Asc.ceil(-45.0), Math.ceil(-45.0), "Asc.ceil(-45.0)");
strictEqual(Asc.ceil(-45.4), Math.ceil(-45.4), "Asc.ceil(-45.4)");
strictEqual(Asc.ceil(-45.5), Math.ceil(-45.5), "Asc.ceil(-45.5)");
strictEqual(Asc.ceil(-45.6), Math.ceil(-45.6), "Asc.ceil(-45.6)");
strictEqual(Asc.ceil(-46), Math.ceil(-46), "Asc.ceil(-46)");
strictEqual(Asc.ceil(.6+.7+.7), 2, "Asc.ceil(.6+.7+.7)"); // 1.99999...
strictEqual(Asc.ceil(-.6-.7-.7), -2, "Asc.ceil(-.6-.7-.7)"); // -1.99999...
strictEqual(Asc.ceil(.1+.2-.3), 0, "Asc.ceil(.1+.2-.3)"); // 5.5e-17
strictEqual(Asc.ceil(-.1-.2+.3), 0, "Asc.ceil(-.1-.2+.3)"); // -5.5e-17
strictEqual(Asc.ceil(.1+.2+.9-.2), 1, "Asc.ceil(.1+.2+.9-.2)"); // 1.0000...2
strictEqual(Asc.ceil(-.1-.2-.9+.2), -1, "Asc.ceil(.1+.2+.9-.2)"); // -1.0000...2
});
test("Asc.round", function test_round() {
strictEqual(Asc.round(0), Math.round(0), "Asc.round(0)");
strictEqual(Asc.round(45.0), Math.round(45.0), "Asc.round(45.0)");
strictEqual(Asc.round(45.4), Math.round(45.4), "Asc.round(45.4)");
strictEqual(Asc.round(45.5), Math.round(45.5), "Asc.round(45.5)");
strictEqual(Asc.round(45.6), Math.round(45.6), "Asc.round(45.6)");
strictEqual(Asc.round(46), Math.round(46), "Asc.round(46)");
strictEqual(Asc.round(-0), Math.round(-0), "Asc.round(-0)");
strictEqual(Asc.round(-45.0), Math.round(-45.0), "Asc.round(-45.0)");
strictEqual(Asc.round(-45.4), Math.round(-45.4), "Asc.round(-45.4)");
strictEqual(Asc.round(-45.5), Math.round(-45.5), "Asc.round(-45.5)");
strictEqual(Asc.round(-45.6), Math.round(-45.6), "Asc.round(-45.6)");
strictEqual(Asc.round(-46), Math.round(-46), "Asc.round(-46)");
strictEqual(Asc.round(.6+.7+.7), 2, "Asc.round(.6+.7+.7)"); // 1.99999...
strictEqual(Asc.round(-.6-.7-.7), -2, "Asc.round(-.6-.7-.7)"); // -1.99999...
strictEqual(Asc.round(.1+.2-.3), 0, "Asc.round(.1+.2-.3)"); // 5.5e-17
strictEqual(Asc.round(-.1-.2+.3), 0, "Asc.round(-.1-.2+.3)"); // -5.5e-17
strictEqual(Asc.round(.1+.2+.9-.2), 1, "Asc.round(.1+.2+.9-.2)"); // 1.0000...2
strictEqual(Asc.round(-.1-.2-.9+.2), -1, "Asc.round(.1+.2+.9-.2)"); // -1.0000...2
});
function check_range(range, c1, r1, c2, r2, msg) {
strictEqual(range.c1, c1, msg + ", c1");
strictEqual(range.r1, r1, msg + ", r1");
strictEqual(range.c2, c2, msg + ", c2");
strictEqual(range.r2, r2, msg + ", r2");
}
test("Asc.Range", function test_Range() {
var range = new Asc.Range(1, 2, 3, 4),
range2 = new Asc.Range(2, 1, 4, 3),
range3 = new Asc.Range(5, 4, 3, 2, true),
range4 = new Asc.Range(8, 3, 2, 5),
range5 = range4.clone();
range4.normalize();
ok(range instanceof Asc.Range, "new Asc.Range(1, 2, 3, 4) instanceof Asc.Range");
ok(range2 instanceof Asc.Range, "Asc.Range(2, 1, 4, 3) instanceof Asc.Range");
ok(range3 instanceof Asc.Range, "Asc.Range(5, 4, 3, 2, true) instanceof Asc.Range");
ok(range5 instanceof Asc.Range, "Asc.Range(8, 3, 2, 5).clone() instanceof Asc.Range");
check_range(range, 1, 2, 3, 4, "Asc.Range(1, 2, 3, 4)");
check_range(range2, 2, 1, 4, 3, "Asc.Range(2, 1, 4, 3)");
check_range(range3, 3, 2, 5, 4, "Asc.Range(5, 4, 3, 2, true)");
check_range(range4, 2, 3, 8, 5, "Asc.Range(8, 3, 2, 5).normalize()");
check_range(range5, 8, 3, 2, 5, "Asc.Range(8, 3, 2, 5).clone()");
ok(range.contains(1, 2), "Asc.Range(1, 2, 3, 4).contains(1, 2)");
ok(range.contains(2, 2), "Asc.Range(1, 2, 3, 4).contains(2, 2)");
ok(range.contains(3, 2), "Asc.Range(1, 2, 3, 4).contains(3, 2)");
ok(range.contains(3, 3), "Asc.Range(1, 2, 3, 4).contains(3, 3)");
ok(range.contains(3, 4), "Asc.Range(1, 2, 3, 4).contains(3, 4)");
ok(range.contains(2, 4), "Asc.Range(1, 2, 3, 4).contains(2, 4)");
ok(range.contains(1, 4), "Asc.Range(1, 2, 3, 4).contains(1, 4)");
ok(range.contains(1, 3), "Asc.Range(1, 2, 3, 4).contains(1, 3)");
ok(range.contains(2, 3), "Asc.Range(1, 2, 3, 4).contains(2, 3)");
ok(!range.contains(2, 1), "!Asc.Range(1, 2, 3, 4).contains(2, 1)");
ok(!range.contains(4, 3), "!Asc.Range(1, 2, 3, 4).contains(4, 3)");
ok(!range.contains(2, 5), "!Asc.Range(1, 2, 3, 4).contains(2, 5)");
ok(!range.contains(0, 3), "!Asc.Range(1, 2, 3, 4).contains(0, 3)");
ok(!range.contains(4, 1), "!Asc.Range(1, 2, 3, 4).contains(4, 1)");
ok(!range.contains(4, 5), "!Asc.Range(1, 2, 3, 4).contains(4, 5)");
ok(!range.contains(0, 5), "!Asc.Range(1, 2, 3, 4).contains(0, 5)");
ok(!range.contains(0, 1), "!Asc.Range(1, 2, 3, 4).contains(0, 1)");
});
test("Asc.Range.intersection", function test_RangeIntersection() {
var range = new Asc.Range(2,4,10,12), r;
strictEqual(range.intersection(new Asc.Range(1,1,2,2)), null, "Range(2,4,10,12) & Range(1,1,2,2)");
strictEqual(range.intersection(new Asc.Range(4,1,5,2)), null, "Range(2,4,10,12) & Range(4,1,5,2)");
strictEqual(range.intersection(new Asc.Range(13,1,14,2)), null, "Range(2,4,10,12) & Range(13,1,14,2)");
strictEqual(range.intersection(new Asc.Range(13,7,14,8)), null, "Range(2,4,10,12) & Range(13,7,14,8)");
strictEqual(range.intersection(new Asc.Range(13,15,14,16)), null, "Range(2,4,10,12) & Range(13,15,14,16)");
strictEqual(range.intersection(new Asc.Range(8,15,9,16)), null, "Range(2,4,10,12) & Range(8,15,9,16)");
strictEqual(range.intersection(new Asc.Range(0,13,1,14)), null, "Range(2,4,10,12) & Range(0,13,1,14)");
strictEqual(range.intersection(new Asc.Range(0,5,1,6)), null, "Range(2,4,10,12) & Range(0,5,1,6)");
r = range.intersection( new Asc.Range(1,3,3,5) );
check_range(r, 2, 4, 3, 5, "Range(2,4,10,12) & Range(1,3,3,5)");
r = range.intersection( new Asc.Range(1,6,3,7) );
check_range(r, 2, 6, 3, 7, "Range(2,4,10,12) & Range(1,6,3,7)");
r = range.intersection( new Asc.Range(1,11,3,13) );
check_range(r, 2, 11, 3, 12, "Range(2,4,10,12) & Range(1,11,3,13)");
r = range.intersection( new Asc.Range(4,3,5,5) );
check_range(r, 4, 4, 5, 5, "Range(2,4,10,12) & Range(4,3,5,5)");
r = range.intersection( new Asc.Range(4,6,5,7) );
check_range(r, 4, 6, 5, 7, "Range(2,4,10,12) & Range(4,6,5,7)");
r = range.intersection( new Asc.Range(4,11,5,13) );
check_range(r, 4, 11, 5, 12, "Range(2,4,10,12) & Range(4,11,5,13)");
r = range.intersection( new Asc.Range(9,3,11,5) );
check_range(r, 9, 4, 10, 5, "Range(2,4,10,12) & Range(9,3,11,5)");
r = range.intersection( new Asc.Range(9,6,11,7) );
check_range(r, 9, 6, 10, 7, "Range(2,4,10,12) & Range(9,6,11,7)");
r = range.intersection( new Asc.Range(9,11,11,13) );
check_range(r, 9, 11, 10, 12, "Range(2,4,10,12) & Range(9,11,11,13)");
r = range.intersection( new Asc.Range(1,3,3,13) );
check_range(r, 2, 4, 3, 12, "Range(2,4,10,12) & Range(1,3,3,13)");
r = range.intersection( new Asc.Range(6,3,7,13) );
check_range(r, 6, 4, 7, 12, "Range(2,4,10,12) & Range(6,3,7,13)");
r = range.intersection( new Asc.Range(8,2,12,14) );
check_range(r, 8, 4, 10, 12, "Range(2,4,10,12) & Range(8,2,12,14)");
r = range.intersection( new Asc.Range(1,3,11,5) );
check_range(r, 2, 4, 10, 5, "Range(2,4,10,12) & Range(1,3,11,5)");
r = range.intersection( new Asc.Range(1,8,11,9) );
check_range(r, 2, 8, 10, 9, "Range(2,4,10,12) & Range(1,8,11,9)");
r = range.intersection( new Asc.Range(1,11,11,13) );
check_range(r, 2, 11, 10, 12, "Range(2,4,10,12) & Range(1,11,11,13)");
});
test("Asc.Range.union", function test_RangeUnion() {
var range = new Asc.Range(2,4,10,12), r;
r = range.union( new Asc.Range(2,4,3,5) );
check_range(r, 2, 4, 10, 12, "Range(2,4,10,12) | Range(2,4,3,5)");
r = range.union( new Asc.Range(9,3,13,5) );
check_range(r, 2, 3, 13, 12, "Range(2,4,10,12) | Range(9,3,13,5)");
});
test("Asc.HandlersList", function test_HandlersList() {
function handler1(msg) {
equal(1, 1, msg+", handler1() is called");
}
function handler2(msg, p1) {
equal(p1, "p1", msg+', handler2("p1") is called');
}
function handler3(msg) {
equal(3, 3, msg+", handler3() is called");
}
var l1 = new AscCommonExcel.HandlersList(),
l2 = AscCommonExcel.HandlersList({}),
l3 = new AscCommonExcel.HandlersList({"onEvent1":handler1, "onEvent2":handler2});
expect(15);
ok(l1 instanceof AscCommonExcel.HandlersList, "new Asc.HandlersList() instanceof Asc.HandlersList"); //1
ok(l2 instanceof AscCommonExcel.HandlersList, "Asc.HandlersList({}) instanceof Asc.HandlersList"); //2
l3.trigger("onEvent1", "trigger event without args"); //3
l3.trigger("onEvent2", "trigger event with arg 'p1'", "p1"); //4
l1.add("event3", handler3);
l1.trigger("event3", "trigger event with handler added by 'add()'"); //5
strictEqual(l1.remove("event4"), false, "remove nonexistent event handler"); //6
strictEqual(l1.remove("event3"), true, "remove existent event handler"); //7
l1.trigger("event3", "trigger event with nonexistent handler"); //-
l1.add("event12", [handler1, handler2]);
l1.trigger("event12", "trigger event with multiple handlers attached by single 'add()'", "p1"); //8,9
l2.add("event2", handler1);
l2.add("event2", handler2);
l2.trigger("event2", "trigger event with 2 attached handlers", "p1"); //10,11
l2.remove("event2", handler2);
l2.trigger("event2", "trigger event with second handler removed by 'remove()'"); //12
l3.add("onEvent1", handler3);
l3.trigger("onEvent1", "trigger event with second handler attached by 'add()'"); //13,14
strictEqual(l3.remove("onEvent1"), true, "remove all handlers by 'remove()'"); //15
l3.trigger("onEvent1", "trigger event with all handlers removed by 'remove()'"); //-
});
test("DependencyGraph.startListeningRange", function test_HandlersList() {
function getRandomArbitary(min, max)
{
return Math.round(Math.random() * (max - min) + min);
}
var bboxCount = 100;
var colMax = 100;
var rowMax = 100;
var sheetId = 0;
var graph = new AscCommonExcel.DependencyGraph(null);
var standard = {};
for(var i = 0 ; i < bboxCount; ++i){
var r1 = getRandomArbitary(0, rowMax);
var r2 = getRandomArbitary(0, rowMax);
var c1 = getRandomArbitary(0, colMax);
var c2 = getRandomArbitary(0, colMax);
var bbox = new Asc.Range(c1, c2, r1, r2, true);
var listener = {bbox: bbox, getListenerId: function(){return i;}};
standard[listener.getListenerId()] = listener;
graph.startListeningRange(sheetId, bbox, listener);
}
for(var i in standard){
var data = standard[i];
delete standard[i];
graph.endListeningRange(sheetId, data.bbox, data);
}
var res = "";
var sheetContainer = graph.sheetListeners[sheetId];
for(var i in sheetContainer.cellMap){
res += i;
}
for(var i in sheetContainer.areaMap){
res += i;
}
strictEqual(res, "", "DependencyGraph no empty");
});
});