scriptable-testlab
Version:
A lightweight, efficient tool designed to manage and update scripts for Scriptable.
160 lines (153 loc) • 3.75 kB
text/typescript
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;