UNPKG

scriptable-testlab

Version:

A lightweight, efficient tool designed to manage and update scripts for Scriptable.

160 lines (153 loc) 3.75 kB
import type {ArgsMockState} from '../mocks/system/args'; import type {ConfigMockState} from '../mocks/system/config'; import type {LocationMockState} from '../mocks/system/location'; import type {ScriptMockState} from '../mocks/system/script'; import type {DeviceMockState} from './device'; import type {LocationAccuracy} from './location'; import type {WidgetFamily} from './scriptable'; /** * Global preferences interface for all mocks */ export interface GlobalPreferences { device: Partial<DeviceMockState>; config: Partial<ConfigMockState>; script: Partial<ScriptMockState>; args: Partial<ArgsMockState>; location: Partial<LocationMockState>; } /** * Runtime context information */ export interface RuntimeContext { readonly script: string; readonly path: string; readonly args: Record<string, unknown>; } /** * Runtime environment state */ export interface RuntimeEnvironment { readonly isWidget: boolean; readonly isNotification: boolean; readonly isActionExtension: boolean; readonly isSiri: boolean; readonly isHomeScreen: boolean; } /** * Configuration interface for ScriptableRuntime */ export interface RuntimeConfig { device?: Partial<DeviceMockState>; widget?: Partial<ConfigMockState>; script?: { name?: string; path?: string; }; location?: Partial<LocationMockState>; } export interface ScriptableRuntimeState { isDarkMode: boolean; widgetFamily: WidgetFamily | null; language: string; runsInWidget: boolean; runsInApp: boolean; scriptName: string; alertResponse?: number | null; device: { model: string; systemVersion: string; screenSize: {width: number; height: number}; screenScale: number; batteryLevel: number; isCharging: boolean; isFullyCharged: boolean; }; location: { latitude: number; longitude: number; accuracy: LocationAccuracy; altitude?: number; horizontalAccuracy?: number; verticalAccuracy?: number; }; args: { plainTexts: string[]; urls: string[]; fileURLs: string[]; images: Image[]; queryParameters: Record<string, string>; }; environment: { runsWithSiri?: boolean; runsInActionExtension?: boolean; runsInNotification?: boolean; runsFromHomeScreen?: boolean; }; } /** * Preset configurations for common testing scenarios */ export const RuntimePresets = { darkMode: { device: { appearance: { isUsingDarkAppearance: true, }, }, }, lightMode: { device: { appearance: { isUsingDarkAppearance: false, }, }, }, smallWidget: { widget: { widgetFamily: 'small', runsInWidget: true, runsInApp: false, runsWithSiri: false, runsInActionExtension: false, runsInNotification: false, runsFromHomeScreen: false, runsInAccessoryWidget: false, }, }, mediumWidget: { widget: { widgetFamily: 'medium', runsInWidget: true, runsInApp: false, runsWithSiri: false, runsInActionExtension: false, runsInNotification: false, runsFromHomeScreen: false, runsInAccessoryWidget: false, }, }, largeWidget: { widget: { widgetFamily: 'large', runsInWidget: true, runsInApp: false, runsWithSiri: false, runsInActionExtension: false, runsInNotification: false, runsFromHomeScreen: false, runsInAccessoryWidget: false, }, }, iPhone14Pro: { device: { name: 'iPhone 14 Pro', model: 'iPhone', systemName: 'iOS', systemVersion: '16.0', screenSize: {width: 393, height: 852}, screenResolution: {width: 1179, height: 2556}, screenScale: 3, screenBrightness: 1, }, }, } as const;