Files
DocumentServer-v-9.2.0/sdkjs/tests/slide/shortcuts/shortcuts.js
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

1238 lines
48 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 (window)
{
const {
mainShortcutTypes,
thumbnailsTypes,
demonstrationTypes,
demonstrationEvents,
ExecuteDemonstrationShortcut,
ExecuteThumbnailShortcut,
ExecuteMainShortcut,
ExecuteThumbnailHotkey,
ExecuteMainHotkey,
CNativeEvent
} = AscTest;
const logicDocument = AscTest.CreateLogicDocument();
AscFormat.CHART_STYLE_MANAGER.init();
editor.sendEvent = Asc.asc_docs_api.prototype.sendEvent.bind(editor);
editor.asc_registerCallback = Asc.asc_docs_api.prototype.asc_registerCallback.bind(editor);
editor.asc_unregisterCallback = Asc.asc_docs_api.prototype.asc_unregisterCallback.bind(editor);
editor.sync_ContextMenuCallback = Asc.asc_docs_api.prototype.sync_ContextMenuCallback.bind(editor);
editor.sync_DemonstrationSlideChanged = Asc.asc_docs_api.prototype.sync_DemonstrationSlideChanged.bind(editor);
editor.sync_endDemonstration = Asc.asc_docs_api.prototype.sync_endDemonstration.bind(editor);
editor.sync_DialogAddHyperlink = Asc.asc_docs_api.prototype.sync_DialogAddHyperlink.bind(editor);
editor.getGraphicController = Asc.asc_docs_api.prototype.getGraphicController.bind(editor);
editor.FontSizeIn = Asc.asc_docs_api.prototype.FontSizeIn.bind(editor);
editor.FontSizeOut = Asc.asc_docs_api.prototype.FontSizeOut.bind(editor);
editor.asc_getChartObject = Asc.asc_docs_api.prototype.asc_getChartObject.bind(editor);
editor.asc_AddMath2 = Asc.asc_docs_api.prototype.asc_AddMath2.bind(editor);
editor.IncreaseIndent = Asc.asc_docs_api.prototype.IncreaseIndent.bind(editor);
editor.DecreaseIndent = Asc.asc_docs_api.prototype.DecreaseIndent.bind(editor);
editor.get_ShowParaMarks = Asc.asc_docs_api.prototype.get_ShowParaMarks.bind(editor);
editor.retrieveFormatPainterData = Asc.asc_docs_api.prototype.retrieveFormatPainterData.bind(editor);
editor.sync_EndAddShape = Asc.asc_docs_api.prototype.sync_EndAddShape.bind(editor);
editor.asc_getShowGuides = Asc.asc_docs_api.prototype.asc_getShowGuides.bind(editor);
editor.sync_HyperlinkClickCallback = Asc.asc_docs_api.prototype.sync_HyperlinkClickCallback.bind(editor);
editor.getAnnotations = function () {return null;};
editor.EndDemonstration = Asc.asc_docs_api.prototype.EndDemonstration.bind(editor);
editor.closeDemonstration = Asc.asc_docs_api.prototype.closeDemonstration.bind(editor);
editor.endDemoMode = Asc.asc_docs_api.prototype.endDemoMode.bind(editor);
AscCommon.CDocsCoApi.prototype.askSaveChanges = function (callback)
{
window.setTimeout(function ()
{
callback({"saveLock": false});
}, 0);
};
function CreateSlide()
{
logicDocument.addNextSlide(0);
editor.WordControl.Thumbnails.CalculatePlaces();
}
function GoToSlide(slide)
{
editor.WordControl.GoToPage(slide);
}
function CleanPresentation()
{
editor.WordControl.Thumbnails.SelectAll();
logicDocument.deleteSlides(logicDocument.GetSelectedSlideObjects());
}
function AddShape(x, y, height, width)
{
AscCommon.History.Create_NewPoint();
const shapeTrack = new AscFormat.NewShapeTrack('rect', x, y, AscFormat.GetDefaultTheme(), null, null, null, 0);
shapeTrack.track({}, x+ width, y + height);
const shape = shapeTrack.getShape(false, AscTest.DrawingDocument, null);
shape.setBDeleted(false);
shape.setParent(logicDocument.GetCurrentSlide());
shape.addToDrawingObjects();
shape.select(GetDrawingObjects(), 0);
return shape;
}
function AddChart()
{
const chart = editor.asc_getChartObject(Asc.c_oAscChartTypeSettings.lineNormal);
chart.setParent(logicDocument.GetCurrentSlide());
chart.addToDrawingObjects();
chart.spPr.setXfrm(new AscFormat.CXfrm());
chart.spPr.xfrm.setOffX(0);
chart.spPr.xfrm.setOffY(0);
chart.spPr.xfrm.setExtX(100);
chart.spPr.xfrm.setExtY(100);
logicDocument.Recalculate();
return chart;
}
function AddPlaceholderShape()
{
const shape = AddShape(0, 0, 100, 100);
shape.setNvSpPr(new AscFormat.UniNvPr());
let placeholder = new AscFormat.Ph();
placeholder.setType(AscFormat.phType_title);
shape.nvSpPr.nvPr.setPh(placeholder);
shape.txBody = AscFormat.CreateTextBodyFromString('', shape.getDrawingDocument(), shape);
shape.recalculateContentWitCompiledPr();
return shape;
}
function AddTable(columns, rows)
{
return logicDocument.Add_FlowTable(columns, rows);
}
function CreateGroup(arrObjects)
{
const controller = GetDrawingObjects();
controller.resetSelection();
for (let i = 0; i < arrObjects.length; i += 1)
{
arrObjects[i].select(controller, 0);
}
return controller.createGroup();
}
function ClearShapeAndAddParagraph(sText)
{
const textShape = AddShape(0, 0, 100, 100);
const txBody = AscFormat.CreateTextBodyFromString(sText, editor.WordControl.m_oDrawingDocument, textShape)
textShape.setTxBody(txBody);
textShape.setPaddings({Left: 0, Top: 0, Right: 0, Bottom: 0});
const content = txBody.content;
content.SetThisElementCurrent();
content.MoveCursorToStartPos();
textShape.recalculate();
return {shape: textShape, paragraph: content.Content[0]};
}
function GetDirectTextPr()
{
return logicDocument.GetDirectTextPr();
}
function GetDirectParaPr()
{
return logicDocument.GetDirectParaPr();
}
function Round(number, amount)
{
const power = Math.pow(10, amount);
return Math.round(number * power) / power;
}
function SelectDrawings(arrDrawings)
{
const drawingController = GetDrawingObjects();
drawingController.resetSelection()
for (let i = 0; i < arrDrawings.length; i += 1)
{
arrDrawings[i].select(drawingController, 0);
}
}
function GetDrawingObjects()
{
return editor.getGraphicController();
}
QUnit.module("Test shortcuts",
{
afterEach : function ()
{
CleanPresentation();
},
beforeEach: function ()
{
CreateSlide();
},
before: function ()
{
AscTest.TurnOffRecalculate();
},
after: function ()
{
AscTest.TurnOnRecalculate();
}
});
QUnit.test('Check actions with slides', (assert) =>
{
AscTest.TurnOnRecalculate();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
function CheckSelectedSlides(arrSelectedSlides)
{
const presentationSelectedSlides = logicDocument.GetSelectedSlides();
assert.deepEqual(presentationSelectedSlides, arrSelectedSlides, 'Check selected slides ' + arrSelectedSlides.join(', '));
}
GoToSlide(0);
let oldSlides = logicDocument.Slides.slice();
ExecuteThumbnailHotkey(thumbnailsTypes.addNextSlide, 0);
CheckSelectedSlides([1]);
assert.strictEqual(oldSlides.indexOf(logicDocument.Slides[1]), -1, 'Check add next slide');
oldSlides = logicDocument.Slides.slice();
ExecuteThumbnailHotkey(thumbnailsTypes.addNextSlide, 1);
CheckSelectedSlides([2]);
assert.strictEqual(oldSlides.indexOf(logicDocument.Slides[2]), -1, 'Check add next slide');
ExecuteThumbnailHotkey(thumbnailsTypes.moveToNextSlide, 0);
CheckSelectedSlides([3]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveToNextSlide, 1);
CheckSelectedSlides([4]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveToPreviousSlide, 0);
CheckSelectedSlides([3]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveToPreviousSlide, 1);
CheckSelectedSlides([2]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveToLastSlide);
CheckSelectedSlides([6]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveToFirstSlide);
CheckSelectedSlides([0]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveToLastSlide);
CheckSelectedSlides([6]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveToFirstSlide);
CheckSelectedSlides([0]);
ExecuteThumbnailHotkey(thumbnailsTypes.selectNextSlide, 0);
CheckSelectedSlides([0, 1]);
ExecuteThumbnailHotkey(thumbnailsTypes.selectNextSlide, 1);
CheckSelectedSlides([0, 1, 2]);
GoToSlide(2);
ExecuteThumbnailHotkey(thumbnailsTypes.selectPreviousSlide, 0);
CheckSelectedSlides([1, 2]);
ExecuteThumbnailHotkey(thumbnailsTypes.selectPreviousSlide, 0);
CheckSelectedSlides([0, 1, 2]);
ExecuteThumbnailHotkey(thumbnailsTypes.selectToLastSlide);
CheckSelectedSlides([2, 3, 4, 5, 6]);
ExecuteThumbnailHotkey(thumbnailsTypes.selectPreviousSlide, 1);
CheckSelectedSlides([2, 3, 4, 5]);
ExecuteThumbnailHotkey(thumbnailsTypes.selectPreviousSlide, 1);
CheckSelectedSlides([2, 3, 4]);
ExecuteThumbnailHotkey(thumbnailsTypes.selectToLastSlide);
CheckSelectedSlides([2, 3, 4, 5, 6]);
GoToSlide(3);
ExecuteThumbnailHotkey(thumbnailsTypes.selectToFirstSlide);
CheckSelectedSlides([0, 1, 2, 3]);
GoToSlide(3);
ExecuteThumbnailHotkey(thumbnailsTypes.selectToFirstSlide);
CheckSelectedSlides([0, 1, 2, 3]);
let startPositionSlides = logicDocument.Slides.slice();
function CheckMoveSlides(oldPositions, newPositions)
{
for (let i = 0; i < oldPositions.length; i += 1)
{
assert.true(startPositionSlides[oldPositions[i]] === logicDocument.Slides[newPositions[i]], 'Check position ' + oldPositions[i] + '->' + newPositions[i]);
}
startPositionSlides = logicDocument.Slides.slice();
}
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToNextPosition, 0);
CheckSelectedSlides([1, 2, 3, 4]);
CheckMoveSlides([0, 1, 2, 3], [1, 2, 3, 4]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToNextPosition, 1);
CheckSelectedSlides([2, 3, 4, 5]);
CheckMoveSlides([1, 2, 3, 4], [2, 3, 4, 5]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToStart, 0);
CheckSelectedSlides([0, 1, 2, 3]);
CheckMoveSlides([2, 3, 4, 5], [0, 1, 2, 3]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToEnd, 0);
CheckSelectedSlides([3, 4, 5, 6]);
CheckMoveSlides([0, 1, 2, 3], [3, 4, 5, 6]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToStart, 1);
CheckSelectedSlides([0, 1, 2, 3]);
CheckMoveSlides([3, 4, 5, 6], [0, 1, 2, 3]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToEnd, 1);
CheckSelectedSlides([3, 4, 5, 6]);
CheckMoveSlides([0, 1, 2, 3], [3, 4, 5, 6]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToPreviousPosition, 0);
CheckSelectedSlides([2, 3, 4, 5]);
CheckMoveSlides([3, 4, 5, 6], [2, 3, 4, 5]);
ExecuteThumbnailHotkey(thumbnailsTypes.moveSelectedSlidesToPreviousPosition, 1);
CheckSelectedSlides([1, 2, 3, 4]);
CheckMoveSlides([2, 3, 4, 5], [1, 2, 3, 4]);
ExecuteThumbnailHotkey(thumbnailsTypes.removeSelectedSlides, 0);
assert.strictEqual(logicDocument.Slides.length, 3, 'Check slide amount');
assert.true(logicDocument.Slides[0] === startPositionSlides[0], 'Check saved slides');
assert.true(logicDocument.Slides[1] === startPositionSlides[5], 'Check saved slides');
assert.true(logicDocument.Slides[2] === startPositionSlides[6], 'Check saved slides');
ExecuteThumbnailHotkey(thumbnailsTypes.removeSelectedSlides, 1);
assert.strictEqual(logicDocument.Slides.length, 2, 'Check slide amount');
assert.true(logicDocument.Slides[0] === startPositionSlides[0], 'Check saved slides');
assert.true(logicDocument.Slides[1] === startPositionSlides[6], 'Check saved slides');
ExecuteThumbnailHotkey(thumbnailsTypes.removeSelectedSlides, 1);
assert.strictEqual(logicDocument.Slides.length, 1, 'Check slide amount');
assert.true(logicDocument.Slides[0] === startPositionSlides[0], 'Check saved slides');
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
GoToSlide(0);
oldSlides = logicDocument.Slides.slice();
ExecuteMainHotkey(mainShortcutTypes.addNextSlide);
CheckSelectedSlides([1]);
assert.strictEqual(oldSlides.indexOf(logicDocument.Slides[1]), -1, 'Check add next slide');
ExecuteThumbnailShortcut(Asc.c_oAscPresentationShortcutType.EditSelectAll);
CheckSelectedSlides([0, 1, 2, 3, 4, 5, 6]);
GoToSlide(1);
ExecuteMainHotkey(mainShortcutTypes.moveToNextSlide, 0);
CheckSelectedSlides([2]);
ExecuteMainHotkey(mainShortcutTypes.moveToPreviousSlide, 0);
CheckSelectedSlides([1]);
ExecuteMainHotkey(mainShortcutTypes.moveToNextSlide, 1);
CheckSelectedSlides([2]);
ExecuteMainHotkey(mainShortcutTypes.moveToPreviousSlide, 1);
CheckSelectedSlides([1]);
ExecuteMainHotkey(mainShortcutTypes.moveToNextSlide, 2);
CheckSelectedSlides([2]);
ExecuteMainHotkey(mainShortcutTypes.moveToPreviousSlide, 2);
CheckSelectedSlides([1]);
ExecuteMainHotkey(mainShortcutTypes.moveToLastSlide);
CheckSelectedSlides([6]);
ExecuteMainHotkey(mainShortcutTypes.moveToFirstSlide);
CheckSelectedSlides([0]);
ExecuteMainHotkey(mainShortcutTypes.selectToLastSlide);
CheckSelectedSlides([0, 1, 2, 3, 4, 5, 6]);
GoToSlide(3);
ExecuteMainHotkey(mainShortcutTypes.selectToFirstSlide);
CheckSelectedSlides([0, 1, 2, 3]);
AscTest.TurnOffRecalculate();
});
QUnit.test('Check actions with catch events', (oAssert) =>
{
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
CreateSlide();
let Execute;
function ExecuteTestWithCatchEvent(sSendEvent, fCustomCheck, customExpectedValue, oEvent)
{
let check = false;
const Check = function (...args)
{
if (fCustomCheck)
{
check = fCustomCheck(...args);
}
else
{
check = true;
}
}
editor.asc_registerCallback(sSendEvent, Check);
Execute(oEvent);
oAssert.strictEqual(check, customExpectedValue === undefined ? true : customExpectedValue, 'Check catch ' + sSendEvent + ' event');
editor.asc_unregisterCallback(sSendEvent, Check);
}
editor.WordControl.DemonstrationManager.Start(null, 0);
Execute = ExecuteDemonstrationShortcut;
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 1, demonstrationEvents[demonstrationTypes.moveToNextSlide][0]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 2, demonstrationEvents[demonstrationTypes.moveToNextSlide][1]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 3, demonstrationEvents[demonstrationTypes.moveToNextSlide][2]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 4, demonstrationEvents[demonstrationTypes.moveToNextSlide][3]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 5, demonstrationEvents[demonstrationTypes.moveToNextSlide][4]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 4, demonstrationEvents[demonstrationTypes.moveToPreviousSlide][0]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 3, demonstrationEvents[demonstrationTypes.moveToPreviousSlide][1]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 2, demonstrationEvents[demonstrationTypes.moveToPreviousSlide][2]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 0, demonstrationEvents[demonstrationTypes.moveToFirstSlide][0]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 11, demonstrationEvents[demonstrationTypes.moveToLastSlide][0]);
ExecuteDemonstrationShortcut(new CNativeEvent(53));
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 4, demonstrationEvents[demonstrationTypes.moveToNumberSlide][0]);
ExecuteDemonstrationShortcut(new CNativeEvent(56));
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 7, demonstrationEvents[demonstrationTypes.moveToNumberSlide][0]);
ExecuteDemonstrationShortcut(new CNativeEvent(49));
ExecuteDemonstrationShortcut(new CNativeEvent(48));
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 9, demonstrationEvents[demonstrationTypes.moveToNumberSlide][0]);
ExecuteTestWithCatchEvent('asc_onDemonstrationSlideChanged', (nSlideNum) => nSlideNum, 10, demonstrationEvents[demonstrationTypes.moveToNumberSlide][0]);
ExecuteTestWithCatchEvent('asc_onEndDemonstration', () => true, true, demonstrationEvents[demonstrationTypes.exitFromDemonstrationMode][0]);
Execute = ExecuteMainShortcut;
ExecuteTestWithCatchEvent('asc_onPrint', () => true, true, Asc.c_oAscPresentationShortcutType.PrintPreviewAndPrint);
ExecuteTestWithCatchEvent('asc_onContextMenu', () => true, true, Asc.c_oAscPresentationShortcutType.OpenContextMenu);
ClearShapeAndAddParagraph('')
ExecuteTestWithCatchEvent('asc_onDialogAddHyperlink', () => true, true, Asc.c_oAscPresentationShortcutType.InsertHyperlink);
Execute = ExecuteThumbnailShortcut;
GoToSlide(0, FOCUS_OBJECT_THUMBNAILS);
ExecuteTestWithCatchEvent('asc_onPrint', () => true, true, Asc.c_oAscPresentationShortcutType.PrintPreviewAndPrint);
ExecuteTestWithCatchEvent('asc_onContextMenu', () => true, true, Asc.c_oAscPresentationShortcutType.OpenContextMenu);
GoToSlide(0, FOCUS_OBJECT_MAIN);
});
QUnit.test('Check add various characters', (assert) =>
{
const {paragraph} = ClearShapeAndAddParagraph('');
ExecuteMainHotkey(mainShortcutTypes.checkNonBreakingSpace);
assert.strictEqual(AscTest.GetParagraphText(paragraph), String.fromCharCode(0x00A0), 'Check add non breaking space');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.EuroSign);
assert.strictEqual(AscTest.GetParagraphText(paragraph), String.fromCharCode(0x00A0, 0x20AC), 'Check add euro sign');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.EnDash);
assert.strictEqual(AscTest.GetParagraphText(paragraph), String.fromCharCode(0x00A0, 0x20AC, 0x2013), 'Check add en dash');
ExecuteMainHotkey(mainShortcutTypes.checkAddSpace);
assert.strictEqual(AscTest.GetParagraphText(paragraph), String.fromCharCode(0x00A0, 0x20AC, 0x2013, 0x0020), 'Check add space');
});
QUnit.test('Check actions with text movements', (assert) =>
{
const {shape} = ClearShapeAndAddParagraph(
'Hello World Hello ' +
'World Hello World ' +
'Hello World Hello ' +
'World Hello World ' +
'Hello World Hello ' +
'Hello World Hello ' +
'Hello World Hello ' +
'Hello World Hello ' +
'World Hello World');
function CheckCursorPosition(expected, description)
{
const position = shape.txBody.content.GetContentPosition();
assert.strictEqual(position[position.length - 1].Position, expected, description);
}
ExecuteMainHotkey(mainShortcutTypes.checkMoveToEndLineContent);
CheckCursorPosition(18, 'Check move to end line');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorRight);
CheckCursorPosition(19, 'Check move to right char');
ExecuteMainHotkey(mainShortcutTypes.checkMoveToEndLineContent, 1);
CheckCursorPosition(36, 'Check move to end line');
ExecuteMainHotkey(mainShortcutTypes.checkMoveToEndLineContent, 1);
CheckCursorPosition(36, 'Check move to end line');
ExecuteMainHotkey(mainShortcutTypes.checkMoveToStartLineContent, 1);
CheckCursorPosition(18, 'Check move to start line');
ExecuteMainHotkey(mainShortcutTypes.checkMoveToStartLineContent, 1);
CheckCursorPosition(18, 'Check move to start line');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorRight);
CheckCursorPosition(19, 'Check move to right char');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorLeft);
CheckCursorPosition(18, 'Check move to left char');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorWordLeft);
CheckCursorPosition(12, 'Check move to left word');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorWordLeft, 1);
CheckCursorPosition(6, 'Check move to left word');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorWordRight, 1);
CheckCursorPosition(12, 'Check move to right word');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorWordRight);
CheckCursorPosition(18, 'Check move to right word');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorWordRight);
CheckCursorPosition(24, 'Check move to right word');
ExecuteMainHotkey(mainShortcutTypes.checkMoveToStartLineContent);
CheckCursorPosition(18, 'Check move to start line');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorBottom);
CheckCursorPosition(36, 'Check move down');
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorTop);
CheckCursorPosition(18, 'Check move up');
ExecuteMainHotkey(mainShortcutTypes.checkMoveToEndPosContent);
CheckCursorPosition(161, 'Check move to end document');
ExecuteMainHotkey(mainShortcutTypes.checkMoveToStartPosContent);
CheckCursorPosition(0, 'Check move to start document');
function CheckSelectedText(expectedText, description)
{
const selectedText = logicDocument.GetSelectedText();
assert.strictEqual(selectedText, expectedText, description);
}
ExecuteMainHotkey(mainShortcutTypes.checkSelectToEndLineContent);
CheckSelectedText('Hello World Hello ', 'Select to end line');
ExecuteMainHotkey(mainShortcutTypes.checkSelectCursorRight);
CheckSelectedText('Hello World Hello W', 'Select to right char');
ExecuteMainHotkey(mainShortcutTypes.checkSelectToEndLineContent, 1);
CheckSelectedText('Hello World Hello World Hello World ', 'Select to end line content');
ExecuteMainHotkey(mainShortcutTypes.checkSelectToEndLineContent, 1);
CheckSelectedText('Hello World Hello World Hello World ', 'Select to end line content');
ExecuteMainHotkey(mainShortcutTypes.checkSelectToStartLineContent, 1);
CheckSelectedText('Hello World Hello ', 'Select to start line content');
ExecuteMainHotkey(mainShortcutTypes.checkSelectToStartLineContent, 1);
CheckSelectedText('Hello World Hello ', 'Select to start line content');
ExecuteMainHotkey(mainShortcutTypes.checkSelectCursorRight);
CheckSelectedText('Hello World Hello W', 'Select to right char');
ExecuteMainHotkey(mainShortcutTypes.checkSelectCursorLeft);
CheckSelectedText('Hello World Hello ', 'Select to left char');
ExecuteMainHotkey(mainShortcutTypes.checkSelectWordCursorLeft);
CheckSelectedText('Hello World ', 'Select to left word');
ExecuteMainHotkey(mainShortcutTypes.checkSelectWordCursorRight);
CheckSelectedText('Hello World Hello ', 'Select to right word');
ExecuteMainHotkey(mainShortcutTypes.checkSelectWordCursorLeft, 1);
CheckSelectedText('Hello World ', 'Select to left word');
ExecuteMainHotkey(mainShortcutTypes.checkSelectWordCursorRight, 1);
CheckSelectedText('Hello World Hello ', 'Select to right word');
ExecuteMainHotkey(mainShortcutTypes.checkSelectWordCursorRight);
CheckSelectedText('Hello World Hello World ', 'Select to right word');
ExecuteMainHotkey(mainShortcutTypes.checkSelectWordCursorRight);
CheckSelectedText('Hello World Hello World Hello ', 'Select to right word');
ExecuteMainHotkey(mainShortcutTypes.checkSelectToStartLineContent);
CheckSelectedText('Hello World Hello ', 'Select to start line');
ExecuteMainHotkey(mainShortcutTypes.checkSelectCursorBottom);
CheckSelectedText('Hello World Hello World Hello World ', 'Select down');
ExecuteMainHotkey(mainShortcutTypes.checkSelectCursorTop);
CheckSelectedText('Hello World Hello ', 'Select up');
logicDocument.MoveCursorToEndPos();
ExecuteMainHotkey(mainShortcutTypes.checkSelectCursorLeft);
CheckSelectedText('d', 'Select to left char');
ExecuteMainHotkey(mainShortcutTypes.checkSelectWordCursorLeft);
CheckSelectedText('World', 'Select to left word');
});
QUnit.test('Check remove parts of text', (assert) =>
{
const {paragraph} = ClearShapeAndAddParagraph('Hello Hello Hello Hello Hello Hello Hello');
logicDocument.MoveCursorToEndPos();
ExecuteMainHotkey(mainShortcutTypes.checkDeleteBack);
assert.strictEqual(AscTest.GetParagraphText(paragraph), 'Hello Hello Hello Hello Hello Hello Hell', 'Check removing back symbol');
ExecuteMainHotkey(mainShortcutTypes.checkDeleteWordBack);
assert.strictEqual(AscTest.GetParagraphText(paragraph), 'Hello Hello Hello Hello Hello Hello ', 'Check removing back word');
ExecuteMainHotkey(mainShortcutTypes.checkDeleteWordBack, 1);
assert.strictEqual(AscTest.GetParagraphText(paragraph), 'Hello Hello Hello Hello Hello ', 'Check removing back word');
logicDocument.MoveCursorToStartPos();
ExecuteMainHotkey(mainShortcutTypes.checkDeleteFront);
assert.strictEqual(AscTest.GetParagraphText(paragraph), 'ello Hello Hello Hello Hello ', 'Check removing front symbol');
ExecuteMainHotkey(mainShortcutTypes.checkDeleteWordFront);
assert.strictEqual(AscTest.GetParagraphText(paragraph), 'Hello Hello Hello Hello ', 'Check removing front word');
ExecuteMainHotkey(mainShortcutTypes.checkDeleteWordFront, 1);
assert.strictEqual(AscTest.GetParagraphText(paragraph), 'Hello Hello Hello ', 'Check removing front word');
});
QUnit.test('Check text property change', (assert) =>
{
ClearShapeAndAddParagraph('Hello world');
logicDocument.SelectAll();
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Bold);
assert.strictEqual(GetDirectTextPr().GetBold(), true, 'Check turn on bold');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Bold);
assert.strictEqual(GetDirectTextPr().GetBold(), false, 'Check turn off bold');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Italic);
assert.strictEqual(GetDirectTextPr().GetItalic(), true, 'Check turn on italic');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Italic);
assert.strictEqual(GetDirectTextPr().GetItalic(), false, 'Check turn off italic');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Strikeout);
assert.strictEqual(GetDirectTextPr().GetStrikeout(), true, 'Check turn on strikeout');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Strikeout);
assert.strictEqual(GetDirectTextPr().GetStrikeout(), false, 'Check turn off strikeout');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Underline);
assert.strictEqual(GetDirectTextPr().GetUnderline(), true, 'Check turn on underline');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Underline);
assert.strictEqual(GetDirectTextPr().GetUnderline(), false, 'Check turn off underline');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Superscript);
assert.strictEqual(GetDirectTextPr().GetVertAlign(), AscCommon.vertalign_SuperScript, 'Check turn on superscript');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Superscript);
assert.strictEqual(GetDirectTextPr().GetVertAlign(), AscCommon.vertalign_Baseline, 'Check turn off superscript');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Subscript);
assert.strictEqual(GetDirectTextPr().GetVertAlign(), AscCommon.vertalign_SubScript, 'Check turn on subscript');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Subscript);
assert.strictEqual(GetDirectTextPr().GetVertAlign(), AscCommon.vertalign_Baseline, 'Check turn off subscript');
// defaultSize = 10
// 10 -> 11 -> 12 -> 14 -> 16 -> 14 -> 12 -> 11 -> 10
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.IncreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 11, 'Check increase font size');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.IncreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 12, 'Check increase font size');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.IncreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 14, 'Check increase font size');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.IncreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 16, 'Check increase font size');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.DecreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 14, 'Check decrease font size');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.DecreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 12, 'Check decrease font size');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.DecreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 11, 'Check decrease font size');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.DecreaseFontSize);
assert.strictEqual(GetDirectTextPr().GetFontSize(), 10, 'Check decrease font size');
});
QUnit.test('Check paragraph property change', (assert) =>
{
const {paragraph} = ClearShapeAndAddParagraph('Hello world');
assert.strictEqual(GetDirectParaPr().GetJc(), AscCommon.align_Left, "Check align left");
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.CenterPara);
assert.strictEqual(GetDirectParaPr().GetJc(), AscCommon.align_Center, "Check turn on center para");
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.JustifyPara);
assert.strictEqual(GetDirectParaPr().GetJc(), AscCommon.align_Justify, "Check turn on justify para");
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.LeftPara);
assert.strictEqual(GetDirectParaPr().GetJc(), AscCommon.align_Left, "Check turn on left para");
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.RightPara);
assert.strictEqual(GetDirectParaPr().GetJc(), AscCommon.align_Right, "Check turn on right para");
paragraph.Set_PresentationLevel(0);
paragraph.Pr.SetInd(0, 0, 0);
ExecuteMainHotkey(mainShortcutTypes.checkIncreaseIndent);
assert.strictEqual(GetDirectParaPr().GetIndLeft(), 11.1125, "Check indent");
ExecuteMainHotkey(mainShortcutTypes.checkDecreaseIndent);
assert.strictEqual(GetDirectParaPr().GetIndLeft(), 0, "Check unindent");
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.BulletList);
const bullet = paragraph.Get_PresentationNumbering();
assert.strictEqual(bullet.m_nType, AscFormat.numbering_presentationnumfrmt_Char, 'Check bullet list shortcut');
paragraph.Pr.SetInd(0, 0, 0);
ExecuteMainHotkey(mainShortcutTypes.checkIncreaseBulletIndent);
assert.strictEqual(paragraph.Pr.Get_IndLeft(), 11.1125, 'Check bullet indent shortcut');
ExecuteMainHotkey(mainShortcutTypes.checkDecreaseBulletIndent);
assert.strictEqual(paragraph.Pr.Get_IndLeft(), 0, 'Check bullet unindent shortcut');
});
QUnit.test('Check main actions with shapes', (assert) =>
{
const drawing1 = AddShape(0, 0, 100, 200);
const dotsPerMM = logicDocument.DrawingDocument.GetDotsPerMM();
function CheckShapePosition(X, Y)
{
assert.deepEqual([Round(drawing1.x * dotsPerMM, 10), Round(drawing1.y * dotsPerMM, 10), drawing1.extX, drawing1.extY], [X, Y, 200, 100], 'Check shape position after movement ' + X + ' ' + Y);
}
SelectDrawings([drawing1]);
AscTest.TurnOnRecalculate();
ExecuteMainHotkey(mainShortcutTypes.checkMoveShapeLeft);
CheckShapePosition(-5, 0);
ExecuteMainHotkey(mainShortcutTypes.checkLittleMoveShapeLeft);
CheckShapePosition(-6, 0);
ExecuteMainHotkey(mainShortcutTypes.checkMoveShapeRight);
CheckShapePosition(-1, 0);
ExecuteMainHotkey(mainShortcutTypes.checkLittleMoveShapeRight);
CheckShapePosition(0, 0);
ExecuteMainHotkey(mainShortcutTypes.checkMoveShapeBottom);
CheckShapePosition(0, 5);
ExecuteMainHotkey(mainShortcutTypes.checkLittleMoveShapeBottom);
CheckShapePosition(0, 6);
ExecuteMainHotkey(mainShortcutTypes.checkMoveShapeTop);
CheckShapePosition(0, 1);
ExecuteMainHotkey(mainShortcutTypes.checkLittleMoveShapeTop);
CheckShapePosition(0, 0);
AscTest.TurnOffRecalculate();
function CheckSelectedObjects(arrOfDrawings)
{
const length = Math.max(arrOfDrawings.length, GetDrawingObjects().selectedObjects.length);
for (let i = 0; i < length; i++)
{
assert.true(GetDrawingObjects().selectedObjects[i] === arrOfDrawings[i], 'Check selection movement between objects');
}
}
logicDocument.RemoveSelection();
const drawing2 = AddShape(0, 0, 10, 10);
const drawing3 = AddShape(0, 0, 10, 10);
SelectDrawings([drawing3]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectNextObject);
CheckSelectedObjects([drawing1]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectNextObject);
CheckSelectedObjects([drawing2]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectNextObject);
CheckSelectedObjects([drawing3]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectPreviousObject);
CheckSelectedObjects([drawing2]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectPreviousObject);
CheckSelectedObjects([drawing1]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectPreviousObject);
CheckSelectedObjects([drawing3]);
drawing2.setWordShape(false);
SelectDrawings([drawing2]);
ExecuteMainHotkey(mainShortcutTypes.checkAddTxBodyShape);
assert.true(!!drawing2.txBody, 'Check create textBody after enter');
SelectDrawings([drawing2]);
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorToStartPosShape);
const paragraph = drawing2.getDocContent().Content[0];
assert.true(paragraph.IsThisElementCurrent() && paragraph.IsCursorAtBegin(), 'Check movement to start position in empty content');
AscTest.EnterText([72, 101, 108, 108, 111]);
SelectDrawings([drawing2]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectAllContentShape);
assert.strictEqual(logicDocument.GetSelectedText(), 'Hello\r\n', 'Check select non empty content');
SelectDrawings([drawing1, drawing2]);
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Group);
assert.strictEqual(GetDrawingObjects().selectedObjects[0].getObjectType(), AscDFH.historyitem_type_GroupShape, 'Check group selected objects');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.UnGroup);
assert.strictEqual(GetDrawingObjects().selectedObjects[0].getObjectType(), AscDFH.historyitem_type_Shape, 'Check ungroup selected group');
assert.strictEqual(GetDrawingObjects().selectedObjects[1].getObjectType(), AscDFH.historyitem_type_Shape, 'Check ungroup selected group');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Group);
let group = GetDrawingObjects().selectedObjects[0];
group.selectObject(drawing1, 0);
GetDrawingObjects().selection.groupSelection = group;
ExecuteMainHotkey(mainShortcutTypes.checkResetStepDrawingSelection);
assert.strictEqual(GetDrawingObjects().selectedObjects[0].getObjectType(), AscDFH.historyitem_type_GroupShape, 'Check reset step drawing selection');
assert.strictEqual(group.selectedObjects.length, 0);
group.selectObject(drawing1, 0);
GetDrawingObjects().selection.groupSelection = group;
ExecuteMainHotkey(mainShortcutTypes.checkResetAllDrawingSelection);
assert.strictEqual(GetDrawingObjects().selectedObjects.length, 0, 'Check reset all drawing selection');
const graphicFrame = AddTable(4, 4);
function CheckTablePosition(row, column)
{
assert.strictEqual(graphicFrame.graphicObject.CurCell.Index, column, 'Check column active cell position');
assert.strictEqual(graphicFrame.graphicObject.CurCell.Row.Index, row, 'Check row active cell position');
}
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorRightTable);
CheckTablePosition(0, 1);
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorRightTable);
CheckTablePosition(0, 2);
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorRightTable);
CheckTablePosition(0, 3);
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorLeftTable);
CheckTablePosition(0, 2);
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorLeftTable);
CheckTablePosition(0, 1);
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorBottomTable);
CheckTablePosition(1, 1);
ExecuteMainHotkey(mainShortcutTypes.checkMoveCursorTopTable);
CheckTablePosition(0, 1);
ExecuteMainHotkey(mainShortcutTypes.checkMoveToNextCell);
CheckTablePosition(0, 2);
ExecuteMainHotkey(mainShortcutTypes.checkMoveToNextCell);
CheckTablePosition(0, 3);
ExecuteMainHotkey(mainShortcutTypes.checkMoveToPreviousCell);
CheckTablePosition(0, 2);
ExecuteMainHotkey(mainShortcutTypes.checkMoveToPreviousCell);
CheckTablePosition(0, 1);
const cell = graphicFrame.graphicObject.Content[0].Get_Cell(0);
const content = cell.GetContent();
AscFormat.AddToContentFromString(content, 'Hello Hello');
SelectDrawings([graphicFrame]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectFirstCellContent);
CheckTablePosition(0, 0);
assert.strictEqual(logicDocument.GetSelectedText(), 'Hello Hello\r\n', 'Check select first cell content');
graphicFrame.MoveCursorToStartPos();
logicDocument.MoveCursorRight(true, true);
logicDocument.MoveCursorRight(true, true);
logicDocument.MoveCursorRight(true, true);
logicDocument.MoveCursorRight(true, true);
ExecuteMainHotkey(mainShortcutTypes.checkRemoveAndMoveToStartPosTable);
assert.true(graphicFrame.graphicObject.IsCursorAtBegin(), 'Check removing in table');
assert.strictEqual(logicDocument.GetSelectedText(), '', 'Check removing in table');
});
QUnit.test('Check prevent default', (assert) =>
{
let res = ExecuteMainHotkey(mainShortcutTypes.checkNumLock);
assert.strictEqual(res & keydownresult_PreventDefault, keydownresult_PreventDefault, 'Check prevent default');
res = ExecuteMainHotkey(mainShortcutTypes.checkScrollLock);
assert.strictEqual(res & keydownresult_PreventDefault, keydownresult_PreventDefault, 'Check prevent default');
res = ExecuteMainHotkey(mainShortcutTypes.disableBrowserZoomIn);
assert.strictEqual(res & keydownresult_PreventDefault, keydownresult_PreventDefault, 'Check prevent default');
});
QUnit.test('Check remove graphic objects', (assert) =>
{
function CheckRemoveObject(spTree, shape)
{
assert.true(spTree.indexOf(shape) === -1, 'Check remove shape from spTree');
}
const checkActionsWithEvent = (eventIndex) =>
{
const shape = AddShape(0, 0, 100, 100);
SelectDrawings([shape]);
logicDocument.AddAnimation(1, 1, 0, null, false, false);
GetDrawingObjects().resetSelection();
const timing = logicDocument.GetCurTiming();
let effects = timing.getObjectEffects(shape.GetId());
effects[0].select();
ExecuteMainHotkey(mainShortcutTypes.checkRemoveAnimation, eventIndex)
effects = timing.getObjectEffects(shape.GetId());
assert.strictEqual(effects.length, 0, 'Check remove animation');
SelectDrawings([shape]);
assert.true(logicDocument.GetCurrentSlide().cSld.spTree.indexOf(shape) !== -1, 'Check available shape in spTree');
ExecuteMainHotkey(mainShortcutTypes.checkRemoveShape, eventIndex);
CheckRemoveObject(logicDocument.GetCurrentSlide().cSld.spTree, shape);
const chart = AddChart();
SelectDrawings([chart]);
ExecuteMainHotkey(mainShortcutTypes.checkRemoveChart, eventIndex);
CheckRemoveObject(logicDocument.GetCurrentSlide().cSld.spTree, chart);
const shape1 = AddShape(0, 0, 100, 100);
const shape2 = AddShape(0, 0, 100, 100);
const shape3 = AddShape(0, 0, 100, 100);
const group = CreateGroup([shape1, shape2, shape3]);
group.selectObject(shape1, 0);
GetDrawingObjects().selection.groupSelection = group;
ExecuteMainHotkey(mainShortcutTypes.checkRemoveShapeInGroup, eventIndex);
CheckRemoveObject(group.spTree, shape1);
SelectDrawings([group]);
ExecuteMainHotkey(mainShortcutTypes.checkRemoveGroup, eventIndex);
CheckRemoveObject(logicDocument.GetCurrentSlide().cSld.spTree, group);
};
checkActionsWithEvent(0);
checkActionsWithEvent(1);
});
QUnit.test('Check select all in chart title', (assert) =>
{
AscTest.TurnOnRecalculate();
const chart = AddChart();
SelectDrawings([chart]);
const titles = chart.getAllTitles();
const controller = GetDrawingObjects();
controller.selection.chartSelection = chart;
chart.selectTitle(titles[0], 0);
ExecuteMainHotkey(mainShortcutTypes.checkSelectAllContentChartTitle);
assert.strictEqual(logicDocument.GetSelectedText(), 'Diagram Title\r\n', 'Check select all content in chart title');
logicDocument.Remove();
AscTest.TurnOffRecalculate();
});
QUnit.test('Check actions for objects with placeholder', (assert) =>
{
const shape1 = AddPlaceholderShape();
const shape2 = AddPlaceholderShape();
const shape3 = AddPlaceholderShape();
SelectDrawings([shape1]);
ExecuteMainHotkey(mainShortcutTypes.checkSelectNextObjectWithPlaceholder);
assert.true(GetDrawingObjects().selectedObjects[0] === shape2, 'Check select next object with placeholder');
ExecuteMainHotkey(mainShortcutTypes.checkSelectNextObjectWithPlaceholder);
assert.true(GetDrawingObjects().selectedObjects[0] === shape3, 'Check select next object with placeholder');
ExecuteMainHotkey(mainShortcutTypes.checkAddNextSlideAfterSelectLastPlaceholderObject);
assert.strictEqual(logicDocument.Slides.length, 2, 'Check creating new slide after selecting last shape with placeholder');
assert.strictEqual(logicDocument.Get_CurPage(), 1, 'Check creating new slide after selecting last shape with placeholder');
});
QUnit.test('Check add break line', (assert) =>
{
function CheckAddBreakLine(shape)
{
assert.strictEqual(shape.txBody.content.Content.length, 1, 'Check amount paragraphs');
assert.strictEqual(shape.txBody.content.Content[0].GetLinesCount(), 2, 'Check amount lines');
}
{
AscTest.TurnOnRecalculate();
const {shape} = ClearShapeAndAddParagraph('Hello Hello');
logicDocument.MoveCursorRight(false, true);
ExecuteMainHotkey(mainShortcutTypes.checkAddBreakLine);
CheckAddBreakLine(shape);
const placeholderShape = AddPlaceholderShape();
placeholderShape.setTxBody(AscFormat.CreateTextBodyFromString('Hello hello', AscTest.DrawingDocument, placeholderShape));
placeholderShape.txBody.content.SetThisElementCurrent();
placeholderShape.txBody.content.MoveCursorToStartPos();
logicDocument.MoveCursorRight(false, true);
ExecuteMainHotkey(mainShortcutTypes.checkAddTitleBreakLine);
CheckAddBreakLine(placeholderShape);
AscTest.TurnOffRecalculate();
}
const checkAddMathBreakLine = (eventIndex) =>
{
const {shape} = ClearShapeAndAddParagraph('');
editor.asc_AddMath2(c_oAscMathType.FractionVertical);
logicDocument.Recalculate();
const paragraph = shape.txBody.content.Content[0];
logicDocument.MoveCursorLeft();
logicDocument.MoveCursorLeft();
AscTest.EnterText([56, 56, 56, 56, 56, 56, 56]);
logicDocument.MoveCursorLeft();
logicDocument.MoveCursorLeft();
ExecuteMainHotkey(mainShortcutTypes.checkAddMathBreakLine, eventIndex);
const paraMath = paragraph.GetAllParaMaths()[0];
const fraction = paraMath.Root.GetFirstElement();
const numerator = fraction.getNumerator();
const eqArray = numerator.GetFirstElement();
assert.strictEqual(eqArray.getRowsCount(), 2, 'Check add new line in math');
}
checkAddMathBreakLine(0);
checkAddMathBreakLine(1);
});
QUnit.test('Check add new paragraph', (assert) =>
{
const {shape} = ClearShapeAndAddParagraph('');
ExecuteMainHotkey(mainShortcutTypes.checkAddParagraph);
assert.strictEqual(shape.txBody.content.Content.length, 2, 'Check add new paragraph');
});
QUnit.test('Check add tab symbol', (assert) =>
{
const {paragraph} = ClearShapeAndAddParagraph('');
ExecuteMainHotkey(mainShortcutTypes.checkAddTab);
assert.true(paragraph.Content[0].Content[0].IsTab(), 'Check add tab symbol');
});
QUnit.test('Check show paragraph marks', (assert) =>
{
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.ShowParaMarks);
assert.true(editor.get_ShowParaMarks(), 'Check show para marks');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.ShowParaMarks);
assert.false(editor.get_ShowParaMarks(), 'Check hide para marks');
});
QUnit.test('Check copy/paste format and clear formatting actions', (assert) =>
{
ClearShapeAndAddParagraph('Hello');
logicDocument.SelectAll();
logicDocument.AddToParagraph(new AscCommonWord.ParaTextPr({Bold: true, Italic: true, Strikeout: true}), true);
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.CopyFormat);
let textPr = editor.getFormatPainterData().TextPr;
assert.true(textPr.GetBold(), 'Check copy paragraph property');
assert.true(textPr.GetItalic(), 'Check copy paragraph property');
assert.true(textPr.GetStrikeout(), 'Check copy paragraph property');
ClearShapeAndAddParagraph('Hello');
logicDocument.SelectAll();
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.PasteFormat);
textPr = GetDirectTextPr();
assert.true(textPr.GetBold(), 'Check paste paragraph property');
assert.true(textPr.GetItalic(), 'Check paste paragraph property');
assert.true(textPr.GetStrikeout(), 'Check paste paragraph property');
ExecuteMainHotkey(mainShortcutTypes.checkClearParagraphFormatting);
textPr = GetDirectTextPr();
assert.false(textPr.GetBold(), 'Check clear paragraph property');
assert.false(textPr.GetItalic(), 'Check clear paragraph property');
assert.false(textPr.GetStrikeout(), 'Check clear paragraph property');
});
QUnit.test('Check undo/redo', (assert) =>
{
const {paragraph} = ClearShapeAndAddParagraph('');
AscTest.EnterText([56, 56, 56, 56]);
assert.strictEqual(AscTest.GetParagraphText(paragraph), '8888', 'Check enter text');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.EditUndo);
assert.strictEqual(AscTest.GetParagraphText(paragraph), '', 'Check undo text');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.EditRedo);
assert.strictEqual(AscTest.GetParagraphText(paragraph), '8888', 'Check redo text');
});
QUnit.test('Check select all', (assert) =>
{
const {paragraph, shape} = ClearShapeAndAddParagraph('Hello');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.EditSelectAll);
assert.true(shape.txBody.content.IsSelectionUse(), 'Check content selection');
assert.true(paragraph.IsSelectedAll(), 'Check paragraph selection');
assert.strictEqual(logicDocument.GetSelectedText(), 'Hello\r\n', 'Check selected text');
});
QUnit.test('Check reset action with adding new shape', (assert) =>
{
logicDocument.StartAddShape('rect', true);
ExecuteMainHotkey(mainShortcutTypes.checkResetAddShape);
assert.true(!GetDrawingObjects().checkTrackDrawings(), 'Check reset add new shape');
});
QUnit.test('Check visit hyperlink', (assert) =>
{
CreateSlide();
ClearShapeAndAddParagraph('Hello');
logicDocument.AddHyperlink({
Text : 'abcd',
ToolTip: 'abcd',
Value : "ppaction://hlinkshowjump?jump=lastslide"
});
logicDocument.MoveCursorLeft();
logicDocument.MoveCursorLeft();
const selectedInfo = logicDocument.IsCursorInHyperlink();
ExecuteMainHotkey(mainShortcutTypes.checkVisitHyperlink);
assert.true(selectedInfo.Visited && logicDocument.GetSelectedSlides()[0] === 1, 'Check visit hyperlink');
});
QUnit.test('Check duplicate presentation objects', (assert) =>
{
const shape = AddShape(0, 0, 100, 100);
SelectDrawings([shape]);
assert.strictEqual(logicDocument.Slides[0].cSld.spTree.length, 1, 'Check duplicate graphic object');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Duplicate);
assert.strictEqual(logicDocument.Slides[0].cSld.spTree.length, 2, 'Check duplicate graphic object');
GetDrawingObjects().resetSelection();
assert.strictEqual(logicDocument.Slides.length, 1, 'Check duplicate slide');
ExecuteMainShortcut(Asc.c_oAscPresentationShortcutType.Duplicate);
assert.strictEqual(logicDocument.Slides.length, 2, 'Check duplicate slide');
});
QUnit.test('Check save action', (assert) =>
{
assert.timeout(1000);
const done1 = assert.async();
const done2 = assert.async();
function CheckSave(Execute, resolve)
{
const OldSave = editor._onSaveCallbackInner;
editor._onSaveCallbackInner = function ()
{
resolve();
editor._onSaveCallbackInner = OldSave;
};
editor._saveCheck = () => true;
editor.asc_isDocumentCanSave = () => true;
editor.canSave = true;
Execute(Asc.c_oAscPresentationShortcutType.Save);
}
new Promise((resolve) => CheckSave(ExecuteThumbnailShortcut, resolve)).then(function ()
{
assert.true(true, 'Check save shortcut');
done1();
return new Promise((resolve) => CheckSave(ExecuteMainShortcut, resolve))
}).then(function ()
{
assert.true(true, 'Check save shortcut');
done2();
});
});
})(window);