185 lines
5.0 KiB
JavaScript
185 lines
5.0 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
|
|
*
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
$(function () {
|
|
|
|
AscTest.CreateLogicDocument();
|
|
|
|
const charWidth = AscTest.CharWidth * AscTest.FontSize;
|
|
|
|
let dc = new AscWord.CDocumentContent();
|
|
dc.ClearContent(false);
|
|
|
|
let para = AscTest.CreateParagraph();
|
|
dc.AddToContent(0, para);
|
|
|
|
let run = new AscWord.CRun();
|
|
para.AddToContent(0, run);
|
|
|
|
function Recalculate(width)
|
|
{
|
|
if (!width)
|
|
width = 100 * charWidth;
|
|
|
|
dc.Reset(0, 0, width, 10000);
|
|
dc.Recalculate_Page(0, true);
|
|
}
|
|
|
|
function SetText(text)
|
|
{
|
|
run.ClearContent();
|
|
run.AddText(text);
|
|
}
|
|
|
|
function GetText()
|
|
{
|
|
return AscTest.GetParagraphText(para);
|
|
}
|
|
|
|
function TestText(assert, text)
|
|
{
|
|
SetText(text);
|
|
Recalculate();
|
|
|
|
assert.strictEqual(GetText(), text, "Paragraph text: " + text);
|
|
}
|
|
|
|
function TestCodePointType(assert, types)
|
|
{
|
|
let count = run.GetElementsCount();
|
|
|
|
assert.strictEqual(count, types.length, "Check run element count");
|
|
|
|
if (count !== types.length)
|
|
{
|
|
assert.true(false, "Bad elements and types length");
|
|
return;
|
|
}
|
|
|
|
for (let index = 0; index < count; ++index)
|
|
{
|
|
let item = run.GetElement(index);
|
|
assert.strictEqual(item.GetCodePointType(), types[index], "Check " + String.fromCodePoint(item.GetCodePoint()) + " code point type");
|
|
}
|
|
}
|
|
|
|
function TestCursorMove(assert, count)
|
|
{
|
|
para.MoveCursorToStartPos();
|
|
|
|
for (let index = 0; index < count; ++index)
|
|
{
|
|
assert.strictEqual(para.IsCursorAtEnd(), false, "Check cursor move right " + index);
|
|
para.MoveCursorRight();
|
|
}
|
|
|
|
assert.strictEqual(para.IsCursorAtEnd(), true, "Check cursor at the end");
|
|
|
|
para.MoveCursorToEndPos();
|
|
assert.strictEqual(para.IsCursorAtEnd(), true, "Check cursor at the end");
|
|
|
|
for (let index = 0; index < count; ++index)
|
|
{
|
|
assert.strictEqual(para.IsCursorAtBegin(), false, "Check cursor move left " + index);
|
|
para.MoveCursorLeft();
|
|
}
|
|
|
|
assert.strictEqual(para.IsCursorAtBegin(), true, "Check cursor at the start");
|
|
}
|
|
|
|
function TestDelete(assert, text, countRemove, countDelete)
|
|
{
|
|
TestText(assert, text);
|
|
para.MoveCursorToStartPos();
|
|
|
|
for (let index = 0; index < countDelete; ++index)
|
|
{
|
|
assert.strictEqual(para.IsEmpty(), false, "Check delete " + index);
|
|
para.Remove(1);
|
|
}
|
|
|
|
assert.strictEqual(para.IsEmpty(), true, "Check end of delete");
|
|
|
|
TestText(assert, text);
|
|
para.MoveCursorToEndPos();
|
|
|
|
for (let index = 0; index < countRemove; ++index)
|
|
{
|
|
assert.strictEqual(para.IsEmpty(), false, "Check remove " + index);
|
|
para.Remove(-1);
|
|
}
|
|
|
|
assert.strictEqual(para.IsEmpty(), true, "Check end of remove");
|
|
|
|
}
|
|
|
|
QUnit.module("Text shaper");
|
|
|
|
QUnit.test("Test: \"code point types\"", function (assert)
|
|
{
|
|
function Test(text, codePointTypes, moveCount, removeCount, deleteCount)
|
|
{
|
|
TestText(assert, text);
|
|
TestCodePointType(assert, codePointTypes);
|
|
TestCursorMove(assert, moveCount);
|
|
TestDelete(assert, text, removeCount, deleteCount);
|
|
}
|
|
|
|
Test("abc",
|
|
[AscWord.CODEPOINT_TYPE.BASE, AscWord.CODEPOINT_TYPE.BASE, AscWord.CODEPOINT_TYPE.BASE],
|
|
3,
|
|
3,
|
|
3);
|
|
|
|
Test("ffi",
|
|
[AscWord.CODEPOINT_TYPE.LIGATURE, AscWord.CODEPOINT_TYPE.LIGATURE_CONTINUE, AscWord.CODEPOINT_TYPE.LIGATURE_CONTINUE],
|
|
3,
|
|
3,
|
|
3);
|
|
|
|
Test("xyz",
|
|
[AscWord.CODEPOINT_TYPE.BASE, AscWord.CODEPOINT_TYPE.COMBINING_MARK, AscWord.CODEPOINT_TYPE.COMBINING_MARK],
|
|
1,
|
|
3,
|
|
1);
|
|
|
|
// Проверяем диакритический знак, который не складывается шейпером
|
|
Test("á",
|
|
[AscWord.CODEPOINT_TYPE.BASE, AscWord.CODEPOINT_TYPE.BASE],
|
|
1,
|
|
2,
|
|
1);
|
|
});
|
|
});
|