@qaflag/core
Version:
Base requirements for the QA Flag library
135 lines (116 loc) • 3.37 kB
text/typescript
import {
BrowserSoftware,
DeviceInput,
DeviceOutput,
DeviceType,
PersonaInitOptions,
OperatingSystemType,
} from './persona.interface';
const defaultScreenSize: { [key in DeviceType]: [number, number] } = {
laptop: [1280, 720],
desktop: [1920, 1080],
tv: [3840, 2160],
phone: [926, 428],
tablet: [1024, 768],
speaker: [0, 0],
};
const defaultInputs: { [key in DeviceType]: DeviceInput[] } = {
laptop: ['mouse', 'keyboard'],
desktop: ['mouse', 'keyboard'],
tv: ['remote'],
phone: ['touch', 'keyboard'],
tablet: ['touch', 'keyboard'],
speaker: ['microphone'],
};
const defaultOutputs: { [key in DeviceType]: DeviceOutput[] } = {
laptop: ['screen', 'printer', 'speaker'],
desktop: ['screen', 'printer', 'speaker'],
tv: ['screen', 'speaker'],
phone: ['screen', 'speaker'],
tablet: ['screen', 'speaker'],
speaker: ['speaker'],
};
type DeviceParams = Pick<
PersonaInitOptions,
| 'screenSize'
| 'deviceType'
| 'deviceInputs'
| 'deviceOutputs'
| 'isPortraitMode'
>;
export const Phone: DeviceParams = {
deviceType: 'phone',
screenSize: defaultScreenSize['phone'],
deviceInputs: defaultInputs['phone'],
deviceOutputs: defaultOutputs['phone'],
isPortraitMode: true,
};
export const Laptop = (): DeviceParams => ({
deviceType: 'laptop',
screenSize: defaultScreenSize['laptop'],
deviceInputs: defaultInputs['laptop'],
deviceOutputs: defaultOutputs['laptop'],
});
export const Desktop = (): DeviceParams => ({
deviceType: 'desktop',
screenSize: defaultScreenSize['desktop'],
deviceInputs: defaultInputs['desktop'],
deviceOutputs: defaultOutputs['desktop'],
});
export const Tablet = (): DeviceParams => ({
deviceType: 'tablet',
screenSize: defaultScreenSize['tablet'],
deviceInputs: defaultInputs['tablet'],
deviceOutputs: defaultOutputs['tablet'],
});
export const Tv = (): DeviceParams => ({
deviceType: 'tv',
screenSize: defaultScreenSize['tv'],
deviceInputs: defaultInputs['tv'],
deviceOutputs: defaultOutputs['tv'],
});
export const Speaker = (): DeviceParams => ({
deviceType: 'speaker',
screenSize: defaultScreenSize['speaker'],
deviceInputs: defaultInputs['speaker'],
deviceOutputs: defaultOutputs['speaker'],
});
export const Windows = () => OS('windows');
export const Mac = () => OS('mac');
export const iOS = () => OS('ios');
export const Android = () => OS('android');
export const OS = (type: OperatingSystemType): PersonaInitOptions => ({
os: { type },
});
export const Landscape: PersonaInitOptions = {
isPortraitMode: false,
};
export const Portrait: PersonaInitOptions = {
isPortraitMode: true,
};
export const TouchScreen = (
width: number,
height: number,
mode?: 'landscape' | 'portrait',
): PersonaInitOptions => ({
deviceInputs: ['touch'],
...Screen(width, height, mode),
});
export const Screen = (
width: number,
height: number,
mode: 'landscape' | 'portrait' = 'landscape',
): PersonaInitOptions => ({
deviceOutputs: ['screen'],
screenSize: [width, height],
isPortraitMode: mode == 'portrait',
});
export const Chrome = () => Browser('chrome');
export const Firefox = () => Browser('firefox');
export const Edge = () => Browser('msedge');
export const Safari = () => Browser('safari');
export const Browser = (product: BrowserSoftware): PersonaInitOptions => ({
browser: {
product,
},
});