(Prism.languages.sqf = Prism.languages.extend('clike', { string: { pattern: /"(?:(?:"")?[^"])*"(?!")|'(?:[^'])*'/, greedy: !0 }, keyword: /\b(?:breakOut|breakTo|call|case|catch|default|do|echo|else|execFSM|execVM|exitWith|for|forEach|forEachMember|forEachMemberAgent|forEachMemberTeam|from|goto|if|nil|preprocessFile|preprocessFileLineNumbers|private|scopeName|spawn|step|switch|then|throw|to|try|while|with)\b/i, boolean: /\b(?:false|true)\b/i, function: /\b(?:abs|accTime|acos|action|actionIDs|actionKeys|actionKeysImages|actionKeysNames|actionKeysNamesArray|actionName|actionParams|activateAddons|activatedAddons|activateKey|add3DENConnection|add3DENEventHandler|add3DENLayer|addAction|addBackpack|addBackpackCargo|addBackpackCargoGlobal|addBackpackGlobal|addCamShake|addCuratorAddons|addCuratorCameraArea|addCuratorEditableObjects|addCuratorEditingArea|addCuratorPoints|addEditorObject|addEventHandler|addForce|addForceGeneratorRTD|addGoggles|addGroupIcon|addHandgunItem|addHeadgear|addItem|addItemCargo|addItemCargoGlobal|addItemPool|addItemToBackpack|addItemToUniform|addItemToVest|addLiveStats|addMagazine|addMagazineAmmoCargo|addMagazineCargo|addMagazineCargoGlobal|addMagazineGlobal|addMagazinePool|addMagazines|addMagazineTurret|addMenu|addMenuItem|addMissionEventHandler|addMPEventHandler|addMusicEventHandler|addOwnedMine|addPlayerScores|addPrimaryWeaponItem|addPublicVariableEventHandler|addRating|addResources|addScore|addScoreSide|addSecondaryWeaponItem|addSwitchableUnit|addTeamMember|addToRemainsCollector|addTorque|addUniform|addVehicle|addVest|addWaypoint|addWeapon|addWeaponCargo|addWeaponCargoGlobal|addWeaponGlobal|addWeaponItem|addWeaponPool|addWeaponTurret|admin|agent|agents|AGLToASL|aimedAtTarget|aimPos|airDensityCurveRTD|airDensityRTD|airplaneThrottle|airportSide|AISFinishHeal|alive|all3DENEntities|allAirports|allControls|allCurators|allCutLayers|allDead|allDeadMen|allDisplays|allGroups|allMapMarkers|allMines|allMissionObjects|allow3DMode|allowCrewInImmobile|allowCuratorLogicIgnoreAreas|allowDamage|allowDammage|allowFileOperations|allowFleeing|allowGetIn|allowSprint|allPlayers|allSimpleObjects|allSites|allTurrets|allUnits|allUnitsUAV|allVariables|ammo|ammoOnPylon|animate|animateBay|animateDoor|animatePylon|animateSource|animationNames|animationPhase|animationSourcePhase|animationState|append|apply|armoryPoints|arrayIntersect|asin|ASLToAGL|ASLToATL|assert|assignAsCargo|assignAsCargoIndex|assignAsCommander|assignAsDriver|assignAsGunner|assignAsTurret|assignCurator|assignedCargo|assignedCommander|assignedDriver|assignedGunner|assignedItems|assignedTarget|assignedTeam|assignedVehicle|assignedVehicleRole|assignItem|assignTeam|assignToAirport|atan|atan2|atg|ATLToASL|attachedObject|attachedObjects|attachedTo|attachObject|attachTo|attackEnabled|backpack|backpackCargo|backpackContainer|backpackItems|backpackMagazines|backpackSpaceFor|behaviour|benchmark|binocular|blufor|boundingBox|boundingBoxReal|boundingCenter|briefingName|buildingExit|buildingPos|buldozer_EnableRoadDiag|buldozer_IsEnabledRoadDiag|buldozer_LoadNewRoads|buldozer_reloadOperMap|buttonAction|buttonSetAction|cadetMode|callExtension|camCommand|camCommit|camCommitPrepared|camCommitted|camConstuctionSetParams|camCreate|camDestroy|cameraEffect|cameraEffectEnableHUD|cameraInterest|cameraOn|cameraView|campaignConfigFile|camPreload|camPreloaded|camPrepareBank|camPrepareDir|camPrepareDive|camPrepareFocus|camPrepareFov|camPrepareFovRange|camPreparePos|camPrepareRelPos|camPrepareTarget|camSetBank|camSetDir|camSetDive|camSetFocus|camSetFov|camSetFovRange|camSetPos|camSetRelPos|camSetTarget|camTarget|camUseNVG|canAdd|canAddItemToBackpack|canAddItemToUniform|canAddItemToVest|cancelSimpleTaskDestination|canFire|canMove|canSlingLoad|canStand|canSuspend|canTriggerDynamicSimulation|canUnloadInCombat|canVehicleCargo|captive|captiveNum|cbChecked|cbSetChecked|ceil|channelEnabled|cheatsEnabled|checkAIFeature|checkVisibility|civilian|className|clear3DENAttribute|clear3DENInventory|clearAllItemsFromBackpack|clearBackpackCargo|clearBackpackCargoGlobal|clearForcesRTD|clearGroupIcons|clearItemCargo|clearItemCargoGlobal|clearItemPool|clearMagazineCargo|clearMagazineCargoGlobal|clearMagazinePool|clearOverlay|clearRadio|clearVehicleInit|clearWeaponCargo|clearWeaponCargoGlobal|clearWeaponPool|clientOwner|closeDialog|closeDisplay|closeOverlay|collapseObjectTree|collect3DENHistory|collectiveRTD|combatMode|commandArtilleryFire|commandChat|commander|commandFire|commandFollow|commandFSM|commandGetOut|commandingMenu|commandMove|commandRadio|commandStop|commandSuppressiveFire|commandTarget|commandWatch|comment|commitOverlay|compile|compileFinal|completedFSM|composeText|configClasses|configFile|configHierarchy|configName|configNull|configProperties|configSourceAddonList|configSourceMod|configSourceModList|confirmSensorTarget|connectTerminalToUAV|controlNull|controlsGroupCtrl|copyFromClipboard|copyToClipboard|copyWaypoints|cos|count|countEnemy|countFriendly|countSide|countType|countUnknown|create3DENComposition|create3DENEntity|createAgent|createCenter|createDialog|createDiaryLink|createDiaryRecord|createDiarySubject|createDisplay|createGearDialog|createGroup|createGuardedPoint|createLocation|createMarker|createMarkerLocal|createMenu|createMine|createMissionDisplay|createMPCampaignDisplay|createSimpleObject|createSimpleTask|createSite|createSoundSource|createTask|createTeam|createTrigger|createUnit|createVehicle|createVehicleCrew|createVehicleLocal|crew|ctAddHeader|ctAddRow|ctClear|ctCurSel|ctData|ctFindHeaderRows|ctFindRowHeader|ctHeaderControls|ctHeaderCount|ctRemoveHeaders|ctRemoveRows|ctrlActivate|ctrlAddEventHandler|ctrlAngle|ctrlAutoScrollDelay|ctrlAutoScrollRewind|ctrlAutoScrollSpeed|ctrlChecked|ctrlClassName|ctrlCommit|ctrlCommitted|ctrlCreate|ctrlDelete|ctrlEnable|ctrlEnabled|ctrlFade|ctrlHTMLLoaded|ctrlIDC|ctrlIDD|ctrlMapAnimAdd|ctrlMapAnimClear|ctrlMapAnimCommit|ctrlMapAnimDone|ctrlMapCursor|ctrlMapMouseOver|ctrlMapScale|ctrlMapScreenToWorld|ctrlMapWorldToScreen|ctrlModel|ctrlModelDirAndUp|ctrlModelScale|ctrlParent|ctrlParentControlsGroup|ctrlPosition|ctrlRemoveAllEventHandlers|ctrlRemoveEventHandler|ctrlScale|ctrlSetActiveColor|ctrlSetAngle|ctrlSetAutoScrollDelay|ctrlSetAutoScrollRewind|ctrlSetAutoScrollSpeed|ctrlSetBackgroundColor|ctrlSetChecked|ctrlSetDisabledColor|ctrlSetEventHandler|ctrlSetFade|ctrlSetFocus|ctrlSetFont|ctrlSetFontH1|ctrlSetFontH1B|ctrlSetFontH2|ctrlSetFontH2B|ctrlSetFontH3|ctrlSetFontH3B|ctrlSetFontH4|ctrlSetFontH4B|ctrlSetFontH5|ctrlSetFontH5B|ctrlSetFontH6|ctrlSetFontH6B|ctrlSetFontHeight|ctrlSetFontHeightH1|ctrlSetFontHeightH2|ctrlSetFontHeightH3|ctrlSetFontHeightH4|ctrlSetFontHeightH5|ctrlSetFontHeightH6|ctrlSetFontHeightSecondary|ctrlSetFontP|ctrlSetFontPB|ctrlSetFontSecondary|ctrlSetForegroundColor|ctrlSetModel|ctrlSetModelDirAndUp|ctrlSetModelScale|ctrlSetPixelPrecision|ctrlSetPosition|ctrlSetScale|ctrlSetStructuredText|ctrlSetText|ctrlSetTextColor|ctrlSetTextColorSecondary|ctrlSetTextSecondary|ctrlSetTooltip|ctrlSetTooltipColorBox|ctrlSetTooltipColorShade|ctrlSetTooltipColorText|ctrlShow|ctrlShown|ctrlText|ctrlTextHeight|ctrlTextSecondary|ctrlTextWidth|ctrlType|ctrlVisible|ctRowControls|ctRowCount|ctSetCurSel|ctSetData|ctSetHeaderTemplate|ctSetRowTemplate|ctSetValue|ctValue|curatorAddons|curatorCamera|curatorCameraArea|curatorCameraAreaCeiling|curatorCoef|curatorEditableObjects|curatorEditingArea|curatorEditingAreaType|curatorMouseOver|curatorPoints|curatorRegisteredObjects|curatorSelected|curatorWaypointCost|current3DENOperation|currentChannel|currentCommand|currentMagazine|currentMagazineDetail|currentMagazineDetailTurret|currentMagazineTurret|currentMuzzle|currentNamespace|currentTask|currentTasks|currentThrowable|currentVisionMode|currentWaypoint|currentWeapon|currentWeaponMode|currentWeaponTurret|currentZeroing|cursorObject|cursorTarget|customChat|customRadio|cutFadeOut|cutObj|cutRsc|cutText|damage|date|dateToNumber|daytime|deActivateKey|debriefingText|debugFSM|debugLog|deg|delete3DENEntities|deleteAt|deleteCenter|deleteCollection|deleteEditorObject|deleteGroup|deleteGroupWhenEmpty|deleteIdentity|deleteLocation|deleteMarker|deleteMarkerLocal|deleteRange|deleteResources|deleteSite|deleteStatus|deleteTeam|deleteVehicle|deleteVehicleCrew|deleteWaypoint|detach|detectedMines|diag_activeMissionFSMs|diag_activeScripts|diag_activeSQFScripts|diag_activeSQSScripts|diag_captureFrame|diag_captureFrameToFile|diag_captureSlowFrame|diag_codePerformance|diag_drawMode|diag_dynamicSimulationEnd|diag_enable|diag_enabled|diag_fps|diag_fpsMin|diag_frameNo|diag_lightNewLoad|diag_list|diag_log|diag_logSlowFrame|diag_mergeConfigFile|diag_recordTurretLimits|diag_setLightNew|diag_tickTime|diag_toggle|dialog|diarySubjectExists|didJIP|didJIPOwner|difficulty|difficultyEnabled|difficultyEnabledRTD|difficultyOption|direction|directSay|disableAI|disableCollisionWith|disableConversation|disableDebriefingStats|disableMapIndicators|disableNVGEquipment|disableRemoteSensors|disableSerialization|disableTIEquipment|disableUAVConnectability|disableUserInput|displayAddEventHandler|displayCtrl|displayNull|displayParent|displayRemoveAllEventHandlers|displayRemoveEventHandler|displaySetEventHandler|dissolveTeam|distance|distance2D|distanceSqr|distributionRegion|do3DENAction|doArtilleryFire|doFire|doFollow|doFSM|doGetOut|doMove|doorPhase|doStop|doSuppressiveFire|doTarget|
describe('Settings', () => {
beforeEach(() => {
cy.visit('/');
});
it('should open and close a settings menu by clicking on a button', () => {
// findByLabelText does not return the input but the label...
cy.findByLabelText(/Ouvrir les réglages/i)
.prev()
.should('not.be.checked');
cy.findByLabelText(/Ouvrir les réglages/i).click();
cy.findByLabelText(/Ouvrir les réglages/i)
.prev()
.should('be.checked');
cy.findByLabelText(/Ouvrir les réglages/i).click();
cy.findByLabelText(/Ouvrir les réglages/i)
.prev()
.should('not.be.checked');
});
it('should open and close a tooltip by clicking on a button', () => {
cy.findByLabelText(/Ouvrir les réglages/i).click();
cy.findByText(/Ackee/).should('not.be.visible');
cy.findByRole('button', { name: /Aide/i }).click();
cy.findByText(/Ackee/).should('be.visible');
cy.findByRole('button', { name: /Aide/i }).click();
cy.findByText(/Ackee/).should('not.be.visible');
});
it('should change the current theme', () => {
cy.findByLabelText(/Ouvrir les réglages/i).click();
cy.findByRole('document')
.parent()
.then(($html) => {
const initialTheme = $html.attr('data-theme');
if (initialTheme === 'light') {
cy.findByRole('radiogroup', { name: /Thème/i })
.findByRole('radio', { name: /Thème clair/i })
.should('be.checked');
cy.findByRole('radiogroup', { name: /Thème/i })
.findByRole('radio', { name: /Thème sombre/i })
.should('not.be.checked')
.check({ force: true }) // because of label
.should('be.checked');
cy.findByRole('radiogroup', { name: /Thème/i })
.findByRole('radio', { name: /Thème clair/i })
.should('not.be.checked');
cy.findByRole('document')
.parent()
.should('have.attr', 'data-theme', 'dark')
.then(() => {
expect(localStorage.getItem('theme')).to.eq('"dark"');
});
} else {
cy.findByRole('radiogroup', { name: /Thème/i })
.findByRole('radio', { name: /Thème sombre/i })
.should('be.checked');
cy.findByRole('radiogroup', { name: /Thème/i })
.findByRole('radio', { name: /Thème clair/i })
.should('not.be.checked')
.check({ force: true }) // because of label
.should('be.checked');
cy.findByRole('radiogroup', { name: /Thème/i })
.findByRole('radio', { name: /Thème sombre/i })
.should('not.be.checked');
cy.findByRole('document')
.parent()
.should('have.attr', 'data-theme', 'light')
.then(() => {
expect(localStorage.getItem('theme')).to.eq('light');
});
}
});
});
it('should change the Prism theme', () => {
cy.findByLabelText(/Ouvrir les réglages/i).click();
// We assume that the default theme is light theme.
cy.findByRole('radiogroup', { name: /Blocs de code/i })
.findByRole('radio', { name: /Thème sombre/i })
.check({ force: true }) // because of label
.should('be.checked')
.then(() => {
expect(localStorage.getItem('prismjs-color-scheme')).to.eq('"dark"');
});
cy.findByRole('radiogroup', { name: /Blocs de code/i })
.findByRole('radio', { name: /Thème clair/i })
.check({ force: true }) // because of label
.should('be.checked')
.then(() => {
expect(localStorage.getItem('prismjs-color-scheme')).to.eq('"light"');
});
});
it('should change the motion setting', () => {
cy.findByLabelText(/Ouvrir les réglages/i).click();
cy.findByRole('document')
.parent()
.then(($html) => {
const initialValue = $html.attr('data-reduced-motion');
if (initialValue === 'false') {
cy.findByRole('radiogroup', { name: /Animations/i })
.findByRole('radio', { name: /Marche/i })
.should('be.checked');
cy.findByRole('radiogroup', { name: /Animations/i })
.findByRole('radio', { name: /Arrêt/i })
.should('not.be.checked')
.check({ force: true }) // because of label
.should('be.checked');
cy.findByRole('radiogroup', { name: /Animations/i })
.findByRole('radio', { name: /Marche/i })
.should('not.be.checked');
cy.findByRole('document')
.parent()
.should('have.attr', 'data-reduced-motion', 'true')
.then(() => {
expect(localStorage.getItem('reduced-motion')).to.eq('true');
});
} else {
cy.findByRole('radiogroup', { name: /Animations/i })
.findByRole('radio', { name: /Arrêt/i })
.should('be.checked');
cy.findByRole('radiogroup', { name: /Animations/i })
.findByRole('radio', { name: /Marche/i })
.should('not.be.checked')
.check({ force: true }) // because of label
.should('be.checked');
cy.findByRole('radiogroup', { name: /Animations/i })
.findByRole('radio', { name: /Arrêt/i })
.should('not.be.checked');
cy.findByRole('document')
.parent()
.should('have.attr', 'data-reduced-motion', 'true')
.then(() => {
expect(localStorage.getItem('reduced-motion')).to.eq('true');
});
}
});
});
it('should change the Ackee setting', () => {
cy.findByLabelText(/Ouvrir les réglages/i)
.click()
.then(() => {
const storedValue = localStorage.getItem('ackee-tracking');
const parsedStoredValue = storedValue ? JSON.parse(storedValue) : '';
if (parsedStoredValue === 'full') {
cy.findByRole('radio', { name: /Complet/i }).should('be.checked');
cy.findByRole('radio', { name: /Partiel/i })
.should('not.be.checked')
.check({ force: true }) // because of label
.should('be.checked');
cy.findByRole('radio', { name: /Complet/i })
.should('not.be.checked')
.then(() => {
const newStoredValue = localStorage.getItem('ackee-tracking');
const parsedNewStoredValue = newStoredValue
? JSON.parse(newStoredValue)
: '';
expect(parsedNewStoredValue).to.eq('partial');
});
} else {
cy.findByRole('radio', { name: /Partiel/i }).should('be.checked');
cy.findByRole('radio', { name: /Complet/i })
.should('not.be.checked')
.check({ force: true }) // because of label
.should('be.checked');
cy.findByRole('radio', { name: /Partiel/i })
.should('not.be.checked')
.then(() => {
const newStoredValue = localStorage.getItem('ackee-tracking');
const parsedNewStoredValue = newStoredValue
? JSON.parse(newStoredValue)
: '';
expect(parsedNewStoredValue).to.eq('full');
});
}
});
});
});