gnome-shell/tests/shell/fittsy.js

123 lines
3.7 KiB
JavaScript
Raw Normal View History

/* eslint camelcase: ["error", { properties: "never", allow: ["^script_"] }] */
import Clutter from 'gi://Clutter';
import Shell from 'gi://Shell';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import {sleep} from 'resource:///org/gnome/shell/ui/scripting.js';
const {Orientation, PickMode, TextDirection} = Clutter;
const EPSILON = 0.1;
function defineScriptEvent(eventName, description) {
Shell.PerfLog.get_default().define_event(
`script.${eventName}`, description, 'i');
}
function scriptEvent(eventName, bool) {
Shell.PerfLog.get_default().event_i(`script.${eventName}`,
Number(bool));
}
function checkFittsiness(eventName, actor, orientation, edge) {
const [x, y] = actor.get_transformed_position();
const pickCoords = orientation === Orientation.HORIZONTAL
? [edge, y + Math.floor(actor.height / 2)]
: [x + Math.floor(actor.width / 2), edge];
const pickedActor = global.stage.get_actor_at_pos(
PickMode.REACTIVE, ...pickCoords);
scriptEvent(eventName, pickedActor === actor);
}
/**
* run:
*/
export async function run() {
defineScriptEvent('fittsyDash', 'Dash extends to screen edge');
defineScriptEvent('fittsyTopBarVert', 'Top bar extends to top screen edge');
defineScriptEvent('fittsyTopBarHorzLTR', 'Top bar extends to left screen edge');
defineScriptEvent('fittsyTopBarHorzRTL', 'Top bar extends to right screen edge');
const {primaryMonitor} = Main.layoutManager;
const topEdge = primaryMonitor.y + EPSILON;
const bottomEdge = primaryMonitor.y + primaryMonitor.height - EPSILON;
const leftEdge = primaryMonitor.x + EPSILON;
const rightEdge = primaryMonitor.x + primaryMonitor.width - EPSILON;
const showApps = Main.overview.dash.showAppsButton;
console.debug('Checking that dash extends to bottom screen edge');
checkFittsiness('fittsyDash',
showApps, Orientation.VERTICAL, bottomEdge);
const activitiesButton = Main.panel.statusArea.activities;
console.debug('Checking that top bar extends to top screen edge');
checkFittsiness('fittsyTopBarVert',
activitiesButton, Orientation.VERTICAL, topEdge);
Main.panel.text_direction = TextDirection.LTR;
await sleep(50);
console.debug('Checking that top bar extends to left screen edge for LTR');
checkFittsiness('fittsyTopBarHorzLTR',
activitiesButton, Orientation.HORIZONTAL, leftEdge);
Main.panel.text_direction = TextDirection.RTL;
await sleep(50);
console.debug('Checking that top bar extends to right screen edge for RTL');
checkFittsiness('fittsyTopBarHorzRTL',
activitiesButton, Orientation.HORIZONTAL, rightEdge);
}
let fittsyDash = false;
let fittsyTopBarVert = false;
let fittsyTopBarHorzLTR = false;
let fittsyTopBarHorzRTL = false;
/**
* @param {number} time
* @param {number} num
*/
export function script_fittsyDash(time, num) {
fittsyDash = num !== 0;
}
/**
* @param {number} time
* @param {number} num
*/
export function script_fittsyTopBarVert(time, num) {
fittsyTopBarVert = num !== 0;
}
/**
* @param {number} time
* @param {number} num
*/
export function script_fittsyTopBarHorzLTR(time, num) {
fittsyTopBarHorzLTR = num !== 0;
}
/**
* @param {number} time
* @param {number} num
*/
export function script_fittsyTopBarHorzRTL(time, num) {
fittsyTopBarHorzRTL = num !== 0;
}
export function finish() {
if (!fittsyDash)
throw new Error('Dash does not extend to screen edge');
if (!fittsyTopBarVert)
throw new Error('Top bar does not extend to top screen edge');
if (!fittsyTopBarHorzLTR)
throw new Error('Top bar does not extend to left screen edge');
if (!fittsyTopBarHorzRTL)
throw new Error('Top bar does not extend to right screen edge');
}