scriptable-testlab
Version:
A lightweight, efficient tool designed to manage and update scripts for Scriptable.
167 lines (164 loc) • 4.95 kB
text/typescript
import { ArgsMockState } from '../mocks/system/args.mjs';
import { ConfigMockState } from '../mocks/system/config.mjs';
import { LocationMockState } from '../mocks/system/location.mjs';
import { ScriptMockState } from '../mocks/system/script.mjs';
import { DeviceMockState } from './device.mjs';
import { LocationAccuracy } from './location.mjs';
import { WidgetFamily } from './scriptable.mjs';
import 'scriptable-abstract';
/**
* Global preferences interface for all mocks
*/
interface GlobalPreferences {
device: Partial<DeviceMockState>;
config: Partial<ConfigMockState>;
script: Partial<ScriptMockState>;
args: Partial<ArgsMockState>;
location: Partial<LocationMockState>;
}
/**
* Runtime context information
*/
interface RuntimeContext {
readonly script: string;
readonly path: string;
readonly args: Record<string, unknown>;
}
/**
* Runtime environment state
*/
interface RuntimeEnvironment {
readonly isWidget: boolean;
readonly isNotification: boolean;
readonly isActionExtension: boolean;
readonly isSiri: boolean;
readonly isHomeScreen: boolean;
}
/**
* Configuration interface for ScriptableRuntime
*/
interface RuntimeConfig {
device?: Partial<DeviceMockState>;
widget?: Partial<ConfigMockState>;
script?: {
name?: string;
path?: string;
};
location?: Partial<LocationMockState>;
}
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
*/
declare const RuntimePresets: {
readonly darkMode: {
readonly device: {
readonly appearance: {
readonly isUsingDarkAppearance: true;
};
};
};
readonly lightMode: {
readonly device: {
readonly appearance: {
readonly isUsingDarkAppearance: false;
};
};
};
readonly smallWidget: {
readonly widget: {
readonly widgetFamily: "small";
readonly runsInWidget: true;
readonly runsInApp: false;
readonly runsWithSiri: false;
readonly runsInActionExtension: false;
readonly runsInNotification: false;
readonly runsFromHomeScreen: false;
readonly runsInAccessoryWidget: false;
};
};
readonly mediumWidget: {
readonly widget: {
readonly widgetFamily: "medium";
readonly runsInWidget: true;
readonly runsInApp: false;
readonly runsWithSiri: false;
readonly runsInActionExtension: false;
readonly runsInNotification: false;
readonly runsFromHomeScreen: false;
readonly runsInAccessoryWidget: false;
};
};
readonly largeWidget: {
readonly widget: {
readonly widgetFamily: "large";
readonly runsInWidget: true;
readonly runsInApp: false;
readonly runsWithSiri: false;
readonly runsInActionExtension: false;
readonly runsInNotification: false;
readonly runsFromHomeScreen: false;
readonly runsInAccessoryWidget: false;
};
};
readonly iPhone14Pro: {
readonly device: {
readonly name: "iPhone 14 Pro";
readonly model: "iPhone";
readonly systemName: "iOS";
readonly systemVersion: "16.0";
readonly screenSize: {
readonly width: 393;
readonly height: 852;
};
readonly screenResolution: {
readonly width: 1179;
readonly height: 2556;
};
readonly screenScale: 3;
readonly screenBrightness: 1;
};
};
};
export { type GlobalPreferences, type RuntimeConfig, type RuntimeContext, type RuntimeEnvironment, RuntimePresets, type ScriptableRuntimeState };