import { describe, expect, test } from 'vitest'; import { buildMobileShellUrl } from './mobileShellUrl'; describe('buildMobileShellUrl', () => { test('为 H5 附加原生移动壳上下文', () => { const url = new URL( buildMobileShellUrl('https://app.test/works/detail?work=PZ-1', { platform: 'ios', hostVersion: '0.1.0', capabilities: ['host.getRuntime', 'share.open'], }), ); expect(url.searchParams.get('clientRuntime')).toBe('native_app'); expect(url.searchParams.get('clientType')).toBe('native_app'); expect(url.searchParams.get('hostShell')).toBe('expo_mobile'); expect(url.searchParams.get('hostPlatform')).toBe('ios'); expect(url.searchParams.get('hostVersion')).toBe('0.1.0'); expect(url.searchParams.get('bridgeVersion')).toBe('1'); expect(url.searchParams.get('hostCapabilities')).toBe( 'host.getRuntime,share.open', ); expect(url.searchParams.get('work')).toBe('PZ-1'); }); test('支持按平台注入不同能力清单', () => { const iosUrl = new URL( buildMobileShellUrl('https://app.test/', { platform: 'ios', hostVersion: '0.1.0', capabilities: ['host.getRuntime', 'app.setBadgeCount'], }), ); const androidUrl = new URL( buildMobileShellUrl('https://app.test/', { platform: 'android', hostVersion: '0.1.0', capabilities: ['host.getRuntime'], }), ); expect(iosUrl.searchParams.get('hostCapabilities')).toBe( 'host.getRuntime,app.setBadgeCount', ); expect(androidUrl.searchParams.get('hostCapabilities')).toBe( 'host.getRuntime', ); }); });