Skip to content

Commit

Permalink
feat: add library mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
jpudysz committed Mar 9, 2024
1 parent 7e5ef54 commit cc1784b
Show file tree
Hide file tree
Showing 6 changed files with 175 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export const isAndroid = Platform.OS === 'android'
export const isMobile = isIOS || isAndroid
export const isServer = typeof window === 'undefined'
export const isDev = process.env.NODE_ENV !== 'production'
export const isTest = process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined || typeof jest !== 'undefined'

export const ScreenOrientation = {
Landscape: 'landscape',
Expand Down
11 changes: 10 additions & 1 deletion src/core/Unistyles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,23 @@ import { UnistylesModule } from './UnistylesModule'
import { UnistylesRuntime } from './UnistylesRuntime'
import { UnistyleRegistry } from './UnistyleRegistry'
import type { UnistylesBridge } from '../types'
import { UnistylesError, isWeb } from '../common'
import { UnistylesError, isTest, isWeb } from '../common'
import { UnistylesMockedBridge, UnistylesMockedRegistry, UnistylesMockedRuntime } from './mocks'

class Unistyles {
private _runtime: UnistylesRuntime
private _registry: UnistyleRegistry
private _bridge: UnistylesBridge

constructor() {
if (isTest) {
this._bridge = new UnistylesMockedBridge() as unknown as UnistylesBridge
this._registry = new UnistylesMockedRegistry(this._bridge) as unknown as UnistyleRegistry
this._runtime = new UnistylesMockedRuntime(this._bridge, this._registry) as unknown as UnistylesRuntime

return
}

const isInstalled = UnistylesModule?.install() ?? false

if (!isInstalled) {
Expand Down
73 changes: 73 additions & 0 deletions src/core/mocks/UnistylesMockedBridge.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// @ts-nocheck
import type { UnistylesThemes, UnistylesBreakpoints } from '../../global'

export class UnistylesMockedBridge {
constructor() {}

public get screenWidth() {
return 400
}

public get screenHeight() {
return 860
}

public get enabledPlugins() {
return []
}

public get hasAdaptiveThemes() {
return true
}

public get themeName() {
return 'default'
}

public get breakpoint() {
return 'sm'
}

public get colorScheme() {
return 'dark'
}

public get contentSizeCategory() {
return 'unspecified'
}

public get sortedBreakpointPairs() {
return [['sm', 320], ['md', 480], ['lg', 640], ['xl', 800]]
}

public get insets() {
return {
top: 0,
right: 0,
bottom: 0,
left: 0
}
}

public get statusBar() {
return {
height: 20,
width: 400
}
}

public get navigationBar() {
return {
height: 0,
width: 0
}
}

public set themes(themes: Array<keyof UnistylesThemes>) {}
public useBreakpoints(breakpoints: UnistylesBreakpoints) {}
public useTheme(name: keyof UnistylesThemes) {}
public updateTheme(name: keyof UnistylesThemes) {}
public useAdaptiveThemes(enable: boolean) {}
public addPlugin(pluginName: string, notify: boolean) {}
public removePlugin(pluginName: string) {}
}
23 changes: 23 additions & 0 deletions src/core/mocks/UnistylesMockedRegistry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// @ts-nocheck
import type { UnistylesBreakpoints, UnistylesThemes } from '../../global'
import type { UnistylesPlugin, UnistylesConfig, UnistylesBridge } from '../../types'

export class UnistylesMockedRegistry {
public config: UnistylesConfig = {}
public breakpoints: UnistylesBreakpoints = {} as UnistylesBreakpoints
public sortedBreakpointPairs: Array<[keyof UnistylesBreakpoints, UnistylesBreakpoints[keyof UnistylesBreakpoints]]> = []
public plugins: Array<UnistylesPlugin> = []
public themes: UnistylesThemes = {} as UnistylesThemes
public themeNames: Array<keyof UnistylesThemes> = []

constructor(private unistylesBridge: UnistylesBridge) {}

public addThemes = (themes: UnistylesThemes) => this
public addBreakpoints = (breakpoints: UnistylesBreakpoints) => this
public addConfig = (config: UnistylesConfig) => this
public getTheme = (forName: keyof UnistylesThemes) => ({} as UnistylesThemes[keyof UnistylesThemes])
public addPlugin = (plugin: UnistylesPlugin, notify: boolean = true) => {}
public removePlugin = (plugin: UnistylesPlugin) => {}
public updateTheme = (name: keyof UnistylesThemes, theme: UnistylesThemes[keyof UnistylesThemes]) => {}
public hasTheme = (name: keyof UnistylesThemes) => true
}
65 changes: 65 additions & 0 deletions src/core/mocks/UnistylesMockedRuntime.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// @ts-nocheck
import { ScreenOrientation } from '../../common'
import type { UnistylesBridge, UnistylesPlugin, UnistylesRegistry } from '../../types'
import type { UnistylesThemes } from '../../global'

export class UnistylesMockedRuntime {
constructor(private unistylesBridge: UnistylesBridge, private unistylesRegistry: UnistylesRegistry) {}

public get colorScheme() {
return this.unistylesBridge.colorScheme
}

public get hasAdaptiveThemes() {
return this.unistylesBridge.hasAdaptiveThemes
}

public get themeName() {
return this.unistylesBridge.themeName
}

public get contentSizeCategory() {
return this.unistylesBridge.contentSizeCategory
}

public get breakpoint() {
return this.unistylesBridge.breakpoint
}

public get breakpoints() {
return this.unistylesRegistry.breakpoints
}

public get enabledPlugins() {
return this.unistylesBridge.enabledPlugins
}

public get screen() {
return {
width: this.unistylesBridge.screenWidth,
height: this.unistylesBridge.screenHeight
}
}

public get insets() {
return this.unistylesBridge.insets
}

public get statusBar() {
return this.unistylesBridge.statusBar
}

public get navigationBar() {
return this.unistylesBridge.navigationBar
}

public get orientation() {
return ScreenOrientation.Portrait
}

public setTheme = (name: keyof UnistylesThemes) => true
public updateTheme = (name: keyof UnistylesThemes, theme: UnistylesThemes[keyof UnistylesThemes]) => {}
public setAdaptiveThemes = (enabled: boolean) => {}
public addPlugin = (plugin: UnistylesPlugin) => {}
public removePlugin = (plugin: UnistylesPlugin) => {}
}
3 changes: 3 additions & 0 deletions src/core/mocks/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export { UnistylesMockedBridge } from './UnistylesMockedBridge'
export { UnistylesMockedRegistry } from './UnistylesMockedRegistry'
export { UnistylesMockedRuntime } from './UnistylesMockedRuntime'

0 comments on commit cc1784b

Please sign in to comment.