UNPKG

miniprogram-simulate

Version:
1,388 lines (1,265 loc) 40.8 kB
const Animation = require('./animation') const UpdateManager = require('./update-manager') const _ = require('./utils') const { systemInfo, skylineInfo, userAgent, launchOptions, preDownloadSubpackageTask, userCryptoManager, eventChannel, cacheManager, userInfo, setting, stats, ad, audioBuffer, } = require('./mock') const {LogManager, RealtimeLogManager} = require('./log') const Performance = require('./performance') const { RequestTask, DownloadTask, UploadTask, SocketTask, TCPSocket, UDPSocket, } = require('./network') const SelectorQuery = require('./selector-query') const {OffscreenCanvas, CanvasContext} = require('./canvas') const { MapContext, VideoContext, LivePlayerContext, LivePusherContext, CameraContext, } = require('./context') let nextTickQueue = [] let nextTickTimer = null const updateManager = new UpdateManager() const realtimeLogManager = new RealtimeLogManager() const logManager = new LogManager() const performance = new Performance() const MockBezier = () => t => t module.exports = { // 基础 env: {USER_DATA_PATH: '/usr/'}, canIUse: _.mockSync(true), base64ToArrayBuffer: _.mockSync(Uint8Array.from([]).buffer), arrayBufferToBase64: _.mockSync(''), // 基础 - 系统 openSystemBluetoothSetting: _.mockAsyncAndPromise( 'openSystemBluetoothSetting' ), openAppAuthorizeSetting: _.mockAsyncAndPromise('openAppAuthorizeSetting'), getWindowInfo: _.mockSync({ pixelRatio: 3, screenWidth: 428, screenHeight: 926, windowWidth: 428, windowHeight: 835, statusBarHeight: 47, safeArea: { left: 0, right: 428, top: 47, bottom: 892, width: 428, height: 845, }, screenTop: 91, }), getSystemSetting: _.mockSync({ bluetoothEnabled: true, deviceOrientation: 'portrait', locationEnabled: true, wifiEnabled: true, }), getSystemInfoSync: _.mockSync(systemInfo), getSystemInfoAsync: _.mockAsync('getSystemInfoAsync', systemInfo), getSystemInfo: _.mockAsyncAndPromise('getSystemInfo', systemInfo), getSkylineInfoSync: _.mockSync(skylineInfo), getSkylineInfo: _.mockAsync('getSkylineInfo', skylineInfo), getRendererUserAgent: _.mockAsyncAndPromise( 'getRendererUserAgent', {userAgent}, userAgent ), getDeviceInfo: _.mockSync({ abi: '', deviceAbi: '', benchmarkLevel: 1, brand: 'devtools', model: 'iPhone 12/13 Pro Max', system: 'iOS 10.0.1', platform: 'ios', cpuType: '', memorySize: '', }), getAppBaseInfo: _.mockSync({ SDKVersion: '2.32.3', enableDebug: false, host: {env: 'WeChat'}, language: 'zh_CN', version: '8.0.5', theme: 'light', }), getAppAuthorizeSetting: _.mockSync({ albumAuthorized: 'not determined', bluetoothAuthorized: 'not determined', cameraAuthorized: 'not determined', locationAuthorized: 'not determined', locationReducedAccuracy: true, microphoneAuthorized: 'not determined', notificationAuthorized: 'not determined', notificationAlertAuthorized: 'not determined', notificationBadgeAuthorized: 'not determined', notificationSoundAuthorized: 'not determined', phoneCalendarAuthorized: 'not determined', }), // 基础 - 更新 updateWeChatApp: _.mockAsyncAndPromise('updateWeChatApp'), getUpdateManager: () => updateManager, // 基础 - 小程序 - 生命周期 getLaunchOptionsSync: _.mockSync(launchOptions), getEnterOptionsSync: _.mockSync(launchOptions), // 基础 - 小程序 - 应用级事件 onUnhandledRejection() {}, onThemeChange() {}, onPageNotFound() {}, onLazyLoadError() {}, onError() {}, onAudioInterruptionEnd() {}, onAudioInterruptionBegin() {}, onAppShow() {}, onAppHide() {}, offUnhandledRejection() {}, offThemeChange() {}, offPageNotFound() {}, offLazyLoadError() {}, offError() {}, offAudioInterruptionEnd() {}, offAudioInterruptionBegin() {}, offAppShow() {}, offAppHide() {}, // 基础 - 小程序 - 调试 setEnableDebug: _.mockAsyncAndPromise('setEnableDebug'), getRealtimeLogManager: () => realtimeLogManager, getLogManager: () => logManager, // 基础 - 小程序 - 性能 reportPerformance() {}, preloadWebview: _.mockAsync('preloadWebview'), preloadSkylineView: _.mockAsync('preloadSkylineView'), preloadAssets: _.mockAsync('preloadAssets'), getPerformance: () => performance, // 基础 - 小程序 - 分包加载 preDownloadSubpackage: () => preDownloadSubpackageTask, getUserCryptoManager: () => userCryptoManager, // 路由 switchTab: _.mockAsyncAndPromise('switchTab'), reLaunch: _.mockAsyncAndPromise('reLaunch'), redirectTo: _.mockAsyncAndPromise('redirectTo'), navigateTo: _.mockAsyncAndPromise('navigateTo', {eventChannel}), navigateBack: _.mockAsyncAndPromise('navigateBack'), // 路由 - 自定义路由 router: { addRouteBuilder() {}, getRouteContext: () => null, removeRouteBuilder() {}, }, // 跳转 openEmbeddedMiniProgram: _.mockAsyncAndPromise('openEmbeddedMiniProgram'), navigateToMiniProgram: _.mockAsyncAndPromise('navigateToMiniProgram'), navigateBackMiniProgram: _.mockAsyncAndPromise('navigateBackMiniProgram'), exitMiniProgram: _.mockAsyncAndPromise('exitMiniProgram'), // 转发 updateShareMenu: _.mockAsyncAndPromise('updateShareMenu'), showShareMenu: _.mockAsyncAndPromise('showShareMenu'), showShareImageMenu: _.mockAsyncAndPromise('showShareImageMenu'), shareVideoMessage: _.mockAsyncAndPromise('shareVideoMessage'), shareFileMessage: _.mockAsyncAndPromise('shareFileMessage'), onCopyUrl() {}, offCopyUrl() {}, hideShareMenu: _.mockAsyncAndPromise('hideShareMenu'), getShareInfo: _.mockAsync('getShareInfo', { encryptedData: '987654321', iv: '123456789', cloudID: '', }), authPrivateMessage: _.mockAsync('authPrivateMessage', { valid: true, encryptedData: '987654321', iv: '123456789', }), // 界面 - 交互 showToast: _.mockAsyncAndPromise('showToast'), showModal: _.mockAsyncAndPromise('showModal', { content: '', confirm: true, cancel: false, }), showLoading: _.mockAsyncAndPromise('showLoading'), showActionSheet: _.mockAsyncAndPromise('showActionSheet', {tapIndex: 0}), hideToast: _.mockAsyncAndPromise('hideToast'), hideLoading: _.mockAsyncAndPromise('hideLoading'), enableAlertBeforeUnload: _.mockAsync('enableAlertBeforeUnload'), disableAlertBeforeUnload: _.mockAsync('disableAlertBeforeUnload'), // 界面 - 导航栏 showNavigationBarLoading: _.mockAsyncAndPromise('showNavigationBarLoading'), setNavigationBarTitle: _.mockAsyncAndPromise('setNavigationBarTitle'), setNavigationBarColor: _.mockAsyncAndPromise('setNavigationBarColor'), hideNavigationBarLoading: _.mockAsyncAndPromise('hideNavigationBarLoading'), hideHomeButton: _.mockAsyncAndPromise('hideHomeButton'), // 界面 - 背景 setBackgroundTextStyle: _.mockAsyncAndPromise('setBackgroundTextStyle'), setBackgroundColor: _.mockAsyncAndPromise('setBackgroundColor'), // 界面 - Tab Bar showTabBarRedDot: _.mockAsyncAndPromise('showTabBarRedDot'), showTabBar: _.mockAsyncAndPromise('showTabBar'), setTabBarStyle: _.mockAsyncAndPromise('setTabBarStyle'), setTabBarItem: _.mockAsyncAndPromise('setTabBarItem'), setTabBarBadge: _.mockAsyncAndPromise('setTabBarBadge'), removeTabBarBadge: _.mockAsyncAndPromise('removeTabBarBadge'), hideTabBarRedDot: _.mockAsyncAndPromise('hideTabBarRedDot'), hideTabBar: _.mockAsyncAndPromise('hideTabBar'), // 界面 - 字体 loadFontFace: _.mockAsyncAndPromise('loadFontFace', {status: 'loaded'}), // 界面 - 下拉刷新 stopPullDownRefresh: _.mockAsyncAndPromise('stopPullDownRefresh'), startPullDownRefresh: _.mockAsyncAndPromise('startPullDownRefresh'), // 界面 - 滚动 pageScrollTo: _.mockAsyncAndPromise('pageScrollTo'), // 界面 - 动画 createAnimation: (transition = {}) => new Animation(transition), // 界面 - 置顶 setTopBarText: _.mockAsyncAndPromise('setTopBarText'), // 界面 - 自定义组件 nextTick(func) { if (typeof func !== 'function') return nextTickQueue.push(func) if (nextTickTimer) return nextTickTimer = setTimeout(() => { const funcQueue = nextTickQueue nextTickQueue = [] nextTickTimer = null for (const func of funcQueue) { if (func) func() } }, 0) }, // 界面 - 菜单 getMenuButtonBoundingClientRect: _.mockSync({ width: 87, height: 32, top: 51, right: 421, bottom: 83, left: 334, }), // 界面 - 窗口 setWindowSize: _.mockAsync('setWindowSize'), onWindowResize() {}, offWindowResize() {}, checkIsPictureInPictureActive: _.mockSync(false), // 界面 - worklet 动画 worklet: { cancelAnimation() {}, derived(updaterWorklet) { if (typeof updaterWorklet !== 'function') return return {value: updaterWorklet()} }, shared: value => ({value}), decay(config) { if (config && config.clamp) return config.clamp[0] || 0 return 0 }, Easing: { bounce: t => { if (t < 1 / 2.75) return 7.5625 * t * t if (t < 2 / 2.75) { const t2 = t - 1.5 / 2.75 return 7.5625 * t2 * t2 + 0.75 } if (t < 2.5 / 2.75) { const t2 = t - 2.25 / 2.75 return 7.5625 * t2 * t2 + 0.9375 } const t2 = t - 2.625 / 2.75 return 7.5625 * t2 * t2 + 0.984375 }, ease: t => MockBezier(0.42, 0, 1, 1)(t), elastic: (bounciness = 1) => t => 1 - (Math.cos((t * Math.PI) / 2) ** 3) * Math.cos(t * bounciness * Math.PI), linear: t => t, quad: t => t * t, cubic: t => t * t * t, poly: n => t => t ** n, bezier: (x1, y1, x2, y2) => ({ factory: () => MockBezier(x1, y1, x2, y2), }), circle: t => 1 - Math.sqrt(1 - t * t), sin: t => 1 - Math.cos((t * Math.PI) / 2), exp: t => 2 ** (10 * (t - 1)), in: easing => easing, out: easing => t => 1 - easing(1 - t), inOut: easing => t => { if (t < 0.5) return easing(t * 2) / 2 return 1 - easing((1 - t) * 2) / 2 }, }, spring(value, options, callback) { if (typeof callback === 'function') setTimeout(() => callback(false), 100) return value }, timing(value, options, callback) { if (typeof callback === 'function') setTimeout(() => callback(false), 100) return value }, delay: (delayTime, delayedAnimation) => delayedAnimation || 0, repeat(animation, numberOfReps, reverse, callback) { if (typeof callback === 'function') setTimeout(() => callback(false), 100) return animation || 0 }, sequence: animation => animation || 0, runOnJS: func => (typeof func === 'function' ? func : () => {}), runOnUI: func => (typeof func === 'function' ? func : () => {}), }, // 网络 - 发起请求 request: options => new RequestTask(options), // 网络 - 下载 downloadFile: options => new DownloadTask(options), // 网络 - 上传 uploadFile: options => new UploadTask(options), // 网络 - WebSocket sendSocketMessage: _.mockAsyncAndPromise('sendSocketMessage'), onSocketOpen() {}, onSocketMessage() {}, onSocketError() {}, onSocketClose() {}, connectSocket: options => new SocketTask(options), closeSocket: _.mockAsync('closeSocket'), // 网络 - mDNS stopLocalServiceDiscovery: _.mockAsyncAndPromise('stopLocalServiceDiscovery'), startLocalServiceDiscovery: _.mockAsyncAndPromise( 'startLocalServiceDiscovery' ), onLocalServiceResolveFail() {}, onLocalServiceLost() {}, onLocalServiceFound() {}, onLocalServiceDiscoveryStop() {}, offLocalServiceResolveFail() {}, offLocalServiceLost() {}, offLocalServiceFound() {}, offLocalServiceDiscoveryStop() {}, // 网络 - TCP 通信 createTCPSocket: () => new TCPSocket(), // 网络 - UDP 通信 createUDPSocket: () => new UDPSocket(), // 支付 requestPluginPayment: _.mockAsync('requestPluginPayment'), requestPayment: _.mockAsyncAndPromise('requestPayment'), // 数据缓存 setStorageSync() {}, setStorage: _.mockAsync('setStorage'), revokeBufferURL() {}, removeStorageSync() {}, removeStorage: _.mockAsync('removeStorage'), getStorageSync: _.mockSync(''), getStorageInfoSync: _.mockSync({ currentSize: 1, keys: [], limitSize: 10240, }), getStorageInfo: _.mockAsync('getStorageInfo', { currentSize: 1, keys: [], limitSize: 10240, }), getStorage: _.mockAsync('getStorage', {data: ''}), createBufferURL: _.mockSync(''), clearStorageSync() {}, clearStorage: _.mockAsync('clearStorage'), batchSetStorageSync() {}, batchSetStorage: _.mockAsync('batchSetStorage'), batchGetStorageSync: _.mockSync([]), batchGetStorage: _.mockAsync('batchGetStorage', {dataList: []}), // 数据缓存 - 周期性更新 setBackgroundFetchToken: _.mockAsyncAndPromise('setBackgroundFetchToken'), onBackgroundFetchData() {}, getBackgroundFetchToken: _.mockAsyncAndPromise('getBackgroundFetchToken', { token: '', }), getBackgroundFetchData: _.mockAsyncAndPromise('getBackgroundFetchData', { fetchedData: '', timeStamp: Date.now(), path: '/', query: '', scene: 1001, }), // 数据缓存 - 缓存管理器 createCacheManager: () => cacheManager, // 数据分析 reportMonitor() {}, reportEvent() {}, reportAnalytics() {}, getExptInfoSync: _.mockSync({}), // XR-FRAME // 暂不支持 // 画布 createOffscreenCanvas: () => new OffscreenCanvas(), createCanvasContext: () => new CanvasContext(), canvasToTempFilePath: _.mockAsyncAndPromise('canvasToTempFilePath', { tempFilePath: '', }), canvasPutImageData: _.mockAsyncAndPromise('canvasPutImageData'), canvasGetImageData: _.mockAsyncAndPromise('canvasGetImageData', { width: 100, height: 100, data: Uint8Array.from(0), }), // 媒体 - 地图 createMapContext: () => new MapContext(), // 媒体 - 图片 saveImageToPhotosAlbum: _.mockAsyncAndPromise('saveImageToPhotosAlbum'), previewMedia: _.mockAsyncAndPromise('previewMedia'), previewImage: _.mockAsyncAndPromise('previewImage'), getImageInfo: _.mockAsyncAndPromise('getImageInfo', { width: 100, height: 100, path: '/', orientation: 'up', type: 'jpeg', }), editImage: _.mockAsync('editImage', {tempFilePath: '/'}), cropImage: _.mockAsync('cropImage', {tempFilePath: '/'}), compressImage: _.mockAsyncAndPromise('compressImage', {tempFilePath: '/'}), chooseMessageFile: _.mockAsyncAndPromise('chooseMessageFile', { tempFiles: [], }), chooseImage: _.mockAsyncAndPromise('chooseImage', { tempFilePaths: [], tempFiles: [], }), // 媒体 - 视频 saveVideoToPhotosAlbum: _.mockAsyncAndPromise('saveVideoToPhotosAlbum'), openVideoEditor: _.mockAsync('openVideoEditor', { duration: 0, size: 1024, tempFilePath: '', tempThumbPath: '', }), getVideoInfo: _.mockAsyncAndPromise('getVideoInfo', { orientation: 'up', type: 'mp4', duration: 0, size: 0, height: 0, width: 0, fps: 0, bitrate: 0, }), createVideoContext: () => new VideoContext(), compressVideo: _.mockAsyncAndPromise('compressVideo', { tempFilePath: '', size: 1024, }), chooseVideo: _.mockAsyncAndPromise('chooseVideo', { tempFilePath: '', duration: 0, size: 1024, height: 0, width: 0, }), chooseMedia: _.mockAsyncAndPromise('chooseMedia', { tempFiles: [], type: 'mix', }), // 媒体 - 音频 stopVoice: _.mockAsyncAndPromise('stopVoice'), setInnerAudioOption: _.mockAsyncAndPromise('setInnerAudioOption'), playVoice: _.mockAsyncAndPromise('playVoice'), pauseVoice: _.mockAsyncAndPromise('pauseVoice'), getAvailableAudioSources: _.mockAsyncAndPromise('getAvailableAudioSources', { audioSources: ['auto'], }), createWebAudioContext: _.mockSync({ state: '', onstatechange() {}, currentTime: 0, WebAudioContextNode: { positionX: 0, positionY: 0, positionZ: 0, forwardX: 0, forwardY: 0, forwardZ: 0, upX: 0, upY: 0, upZ: 0, setOrientation() {}, setPosition() {}, }, listener() {}, sampleRate: 0, close: _.mockSync(Promise.resolve({})), createAnalyser: _.mockSync(null), createBiquadFilter: _.mockSync(null), createBuffer: _.mockSync(audioBuffer), createBufferSource: _.mockSync(null), createChannelMerger: _.mockSync(null), createChannelSplitter: _.mockSync(null), createConstantSource: _.mockSync(null), createDelay: _.mockSync(null), createDynamicsCompressor: _.mockSync(null), createGain: _.mockSync(null), createIIRFilter: _.mockSync(null), createOscillator: _.mockSync(null), createPanner: _.mockSync(null), createPeriodicWave: _.mockSync(null), createScriptProcessor: _.mockSync(null), createWaveShaper: _.mockSync(null), decodeAudioData: _.mockSync(audioBuffer), resume: _.mockSync(Promise.resolve({})), suspend: _.mockSync(Promise.resolve({})), }), createMediaAudioPlayer: _.mockSync({ volume: 0, addAudioSource: _.mockSync(Promise.resolve({})), destroy: _.mockSync(Promise.resolve({})), removeAudioSource: _.mockSync(Promise.resolve({})), start: _.mockSync(Promise.resolve({})), stop: _.mockSync(Promise.resolve({})), }), createInnerAudioContext: _.mockSync({ src: '', startTime: 0, autoplay: true, loop: true, obeyMuteSwitch: true, volume: 0, playbackRate: 0, duration: 0, currentTime: 0, paused: true, buffered: 0, referrerPolicy: '', destroy() {}, offCanplay() {}, offEnded() {}, offError() {}, offPause() {}, offPlay() {}, offSeeked() {}, offSeeking() {}, offStop() {}, offTimeUpdate() {}, offWaiting() {}, onCanplay() {}, onEnded() {}, onError() {}, onPause() {}, onPlay() {}, onSeeked() {}, onSeeking() {}, onStop() {}, onTimeUpdate() {}, onWaiting() {}, pause() {}, play() {}, seek() {}, stop() {}, }), createAudioContext: _.mockSync({ pause() {}, play() {}, seek() {}, setSrc() {}, }), // 媒体 - 背景音频 stopBackgroundAudio: _.mockAsyncAndPromise('stopBackgroundAudio'), seekBackgroundAudio: _.mockAsyncAndPromise('seekBackgroundAudio'), playBackgroundAudio: _.mockAsyncAndPromise('playBackgroundAudio'), pauseBackgroundAudio: _.mockAsyncAndPromise('pauseBackgroundAudio'), onBackgroundAudioStop() {}, onBackgroundAudioPlay() {}, onBackgroundAudioPause() {}, getBackgroundAudioPlayerState: _.mockAsyncAndPromise( 'getBackgroundAudioPlayerState', { duration: 0, currentPosition: 0, status: 0, downloadPercent: 0, dataUrl: '', } ), getBackgroundAudioManager: _.mockSync({ src: '', startTime: 0, title: '', epname: '', singer: '', coverImgUrl: '', webUrl: '', protocol: '', playbackRate: 0, duration: 0, currentTime: 0, paused: true, buffered: 0, referrerPolicy: '', onCanplay() {}, onEnded() {}, onError() {}, onNext() {}, onPause() {}, onPlay() {}, onPrev() {}, onSeeked() {}, onSeeking() {}, onStop() {}, onTimeUpdate() {}, onWaiting() {}, pause() {}, play() {}, seek() {}, stop() {}, }), // 媒体 - 实时音视频 createLivePusherContext: () => new LivePusherContext(), createLivePlayerContext: () => new LivePlayerContext(), // 媒体 - 录音 stopRecord: _.mockAsyncAndPromise('stopRecord'), startRecord: _.mockAsyncAndPromise('startRecord', {tempFilePath: '/'}), getRecorderManager: _.mockSync({ onError() {}, onFrameRecorded() {}, onInterruptionBegin() {}, onInterruptionEnd() {}, onPause() {}, onResume() {}, onStart() {}, onStop() {}, pause() {}, resume() {}, start() {}, stop() {}, }), // 媒体 - 相机 createCameraContext: () => new CameraContext(), // 媒体 - 音视频合成 createMediaContainer: _.mockSync({ addTrack() {}, destroy() {}, export() {}, extractDataSource() {}, removeTrack() {}, }), // 媒体 - 实时语音 updateVoIPChatMuteConfig: _.mockAsyncAndPromise('updateVoIPChatMuteConfig'), subscribeVoIPVideoMembers: _.mockAsyncAndPromise('subscribeVoIPVideoMembers'), setEnable1v1Chat: _.mockAsyncAndPromise('setEnable1v1Chat'), onVoIPVideoMembersChanged() {}, onVoIPChatStateChanged() {}, onVoIPChatSpeakersChanged() {}, onVoIPChatMembersChanged() {}, onVoIPChatInterrupted() {}, offVoIPVideoMembersChanged() {}, offVoIPChatStateChanged() {}, offVoIPChatSpeakersChanged() {}, offVoIPChatMembersChanged() {}, offVoIPChatInterrupted() {}, joinVoIPChat: _.mockAsyncAndPromise('joinVoIPChat', {openIdList: []}), join1v1Chat: _.mockAsyncAndPromise('join1v1Chat'), exitVoIPChat: _.mockAsyncAndPromise('exitVoIPChat'), // 媒体 - 画面录制器 createMediaRecorder: _.mockSync({ destroy: _.mockSync(Promise.resolve({})), off() {}, on() {}, pause: _.mockSync(Promise.resolve({})), requestFrame: _.mockSync(Promise.resolve({})), resume: _.mockSync(Promise.resolve({})), start: _.mockSync(Promise.resolve({})), stop: _.mockSync(Promise.resolve({})), }), // 媒体 - 视频解码器 createVideoDecoder: _.mockSync({ getFrameData: _.mockSync({ width: 0, height: 0, data: Uint8Array.from(0).buffer, pkPts: 0, pkDts: 0, }), off() {}, on() {}, remove: _.mockSync(Promise.resolve({})), seek: _.mockSync(Promise.resolve({})), start: _.mockSync(Promise.resolve({})), stop: _.mockSync(Promise.resolve({})), }), // 位置 stopLocationUpdate: _.mockAsyncAndPromise('stopLocationUpdate'), startLocationUpdateBackground: _.mockAsyncAndPromise( 'startLocationUpdateBackground' ), startLocationUpdate: _.mockAsyncAndPromise('startLocationUpdate'), openLocation: _.mockAsyncAndPromise('openLocation'), onLocationChangeError() {}, onLocationChange() {}, offLocationChangeError() {}, offLocationChange() {}, getLocation: _.mockAsyncAndPromise('getLocation', { latitude: 23.12908, longitude: 113.26436, speed: -1, accuracy: 65, altitude: 0, verticalAccuracy: 65, horizontalAccuracy: 65, }), getFuzzyLocation: _.mockAsync('getFuzzyLocation', { latitude: 23.12908, longitude: 113.26436, }), choosePoi: _.mockAsyncAndPromise('choosePoi', { type: 2, city: '广州', name: '腾讯微信总部', address: '广东省广州市海珠区tit创意园品牌街', latitude: 23.1001, longitude: 113.32456, }), chooseLocation: _.mockAsyncAndPromise('chooseLocation', { name: '腾讯微信总部', address: '广东省广州市海珠区tit创意园品牌街', latitude: 23.1001, longitude: 113.32456, }), // 文件 saveFileToDisk: _.mockAsync('saveFileToDisk'), openDocument: _.mockAsyncAndPromise('openDocument'), getFileSystemManager: _.mockSync({ access: _.mockAsync('access'), accessSync() {}, appendFile: _.mockAsync('appendFile'), appendFileSync() {}, close: _.mockAsync('close'), closeSync() {}, copyFile: _.mockAsync('copyFile'), copyFileSync() {}, fstat: _.mockAsync('fstat', stats), fstatSync: _.mockSync(stats), ftruncate: _.mockAsync('ftruncate'), ftruncateSync() {}, getFileInfo: _.mockAsync('getFileInfo', {size: 1024}), getSavedFileList: _.mockAsync('getSavedFileList', {fileList: []}), mkdir: _.mockAsync('mkdir'), mkdirSync() {}, open: _.mockAsync('open', {fd: ''}), openSync: _.mockSync(''), read: _.mockAsync('read', { bytesRead: 0, arrayBuffer: Uint8Array.from([]).buffer, }), readCompressedFile: _.mockAsync('readCompressedFile', { data: Uint8Array.from([]).buffer, }), readCompressedFileSync: _.mockSync(Uint8Array.from([]).buffer), readdir: _.mockAsync('readdir', {files: []}), readdirSync: _.mockSync([]), readFile: _.mockAsync('readFile', {data: ''}), readFileSync: _.mockSync(''), readSync: _.mockSync({ bytesRead: 0, arrayBuffer: Uint8Array.from([]).buffer, }), readZipEntry: _.mockAsync('readZipEntry', {entries: {}}), removeSavedFile: _.mockAsync('removeSavedFile'), rename: _.mockAsync('rename'), renameSync() {}, rmdir: _.mockAsync('rmdir'), rmdirSync() {}, saveFile: _.mockAsync('saveFile', {savedFilePath: ''}), saveFileSync: _.mockSync(''), stat: _.mockAsync('stat', {stats}), statSync: _.mockSync(stats), truncate: _.mockAsync('truncate'), truncateSync() {}, unlink: _.mockAsync('unlink'), unlinkSync() {}, unzip: _.mockAsync('unzip'), write: _.mockAsync('write', {bytesWritten: 0}), writeFile: _.mockAsync('writeFile'), writeFileSync() {}, writeSync: _.mockSync({bytesWritten: 0}), }), // 开放接口 - 登录 pluginLogin: _.mockAsync('pluginLogin', {code: '123456789'}), login: _.mockAsync('login', {code: '123456789'}), checkSession: _.mockAsyncAndPromise('checkSession'), // 开放接口 - 帐号信息 getAccountInfoSync: _.mockSync({ miniProgram: { appId: 'wx123456789', envVersion: 'develop', version: '', }, plugin: undefined, }), // 开放接口 - 用户信息 getUserProfile: _.mockAsyncAndPromise('getUserProfile', userInfo), getUserInfo: _.mockAsync('getUserInfo', userInfo), // 开放接口 - 授权 authorizeForMiniProgram: _.mockAsync('authorizeForMiniProgram'), authorize: _.mockAsyncAndPromise('authorize'), // 开放接口 - 设置 openSetting: _.mockAsyncAndPromise('openSetting', setting), getSetting: _.mockAsyncAndPromise('getSetting', setting), // 开放接口 - 收货地址 chooseAddress: _.mockAsyncAndPromise('chooseAddress', { userName: '张三', postalCode: '510000', provinceName: '广东省', cityName: '广州市', countyName: '海珠区', detailInfo: '新港中路397号', detailInfoNew: '', nationalCode: '510000', telNumber: '020-81167888', }), // 开放接口 - 卡券 openCard: _.mockAsyncAndPromise('openCard'), addCard: _.mockAsyncAndPromise('addCard', {cardList: []}), // 开放接口 - 发票 chooseInvoiceTitle: _.mockAsyncAndPromise('chooseInvoiceTitle', { type: '0', title: '广州腾讯科技有限公司', taxNumber: '91440101327598294H', companyAddress: '广州市海珠区新港中路397号自编72号(商业街F5-1)', telephone: '020-81167888', bankName: '招商银行股份有限公司广州市体育东路支行', bankAccount: '1209 0928 2210 301', }), chooseInvoice: _.mockAsyncAndPromise('chooseInvoice', {invoiceInfo: '{}'}), // 开放接口 - 生物认证 startSoterAuthentication: _.mockAsyncAndPromise('startSoterAuthentication', { authMode: '', resultJSON: '{"raw":"msg","fid":"2","counter":123,"tee_n":"TEE Name","tee_v":"TEE Version","fp_n":"Fingerprint Sensor Name","fp_v":"Fingerprint Sensor Version","cpu_id":"CPU Id","uid":"21"}', resultJSONSignature: '', }), checkIsSupportSoterAuthentication: _.mockAsyncAndPromise( 'checkIsSupportSoterAuthentication', {supportMode: ['fingerPrint']} ), checkIsSoterEnrolledInDevice: _.mockAsyncAndPromise( 'checkIsSoterEnrolledInDevice', {isEnrolled: true} ), // 开放接口 - 微信运动 shareToWeRun: _.mockAsyncAndPromise('shareToWeRun'), getWeRunData: _.mockAsync('getWeRunData', { encryptedData: '', iv: '', cloudID: '', }), // 开放接口 - 订阅消息 requestSubscribeMessage: _.mockAsyncAndPromise('requestSubscribeMessage'), requestSubscribeDeviceMessage: _.mockAsyncAndPromise( 'requestSubscribeDeviceMessage' ), // 开放接口 - 微信红包 showRedPackage: _.mockAsyncAndPromise('showRedPackage'), // 开放接口 - 收藏 addVideoToFavorites: _.mockAsyncAndPromise('addVideoToFavorites'), addFileToFavorites: _.mockAsyncAndPromise('addFileToFavorites'), // 开放接口 - 我的小程序 checkIsAddedToMyMiniProgram: _.mockAsync('checkIsAddedToMyMiniProgram', { added: false, }), // 开放接口 - 车牌 chooseLicensePlate: _.mockAsyncAndPromise('chooseLicensePlate', { plateNumber: '粤A88888', }), // 开放接口 - 我的视频号 reserveChannelsLive() {}, openChannelsUserProfile: _.mockAsync('openChannelsUserProfile'), openChannelsLive: _.mockAsync('openChannelsLive'), openChannelsEvent: _.mockAsync('openChannelsEvent'), openChannelsActivity: _.mockAsync('openChannelsActivity'), getChannelsShareKey: _.mockAsync('getChannelsShareKey', { sharerOpenId: '', promoter: { finderNickname: '', promoterId: '', promoterOpenId: '', }, }), getChannelsLiveNoticeInfo: _.mockAsync('getChannelsLiveNoticeInfo', { noticeId: '', status: 1, startTime: '', headUrl: '', nickname: '', reservable: false, otherInfos: [], }), getChannelsLiveInfo: _.mockAsync('getChannelsLiveInfo', { feedId: '', nonceId: '', description: '', status: 3, headUrl: '', nickname: '', replayStatus: 6, otherInfos: [], }), // 开放接口 - 音视频通话 requestDeviceVoIP: _.mockAsync('requestDeviceVoIP'), getDeviceVoIPList: _.mockAsync('getDeviceVoIPList', {list: []}), // 开放接口 - 微信群 getGroupEnterInfo: _.mockAsync('getGroupEnterInfo', { encryptedData: '', iv: '', cloudID: '', }), // 开放接口 - 微信客服 openCustomerServiceChat: _.mockAsync('openCustomerServiceChat'), // 设备 - 蓝牙 - 通用 stopBluetoothDevicesDiscovery: _.mockAsyncAndPromise( 'stopBluetoothDevicesDiscovery' ), startBluetoothDevicesDiscovery: _.mockAsyncAndPromise( 'startBluetoothDevicesDiscovery' ), openBluetoothAdapter: _.mockAsyncAndPromise('openBluetoothAdapter'), onBluetoothDeviceFound() {}, onBluetoothAdapterStateChange() {}, offBluetoothDeviceFound() {}, offBluetoothAdapterStateChange() {}, makeBluetoothPair: _.mockAsyncAndPromise('makeBluetoothPair'), isBluetoothDevicePaired: _.mockAsyncAndPromise('isBluetoothDevicePaired'), getConnectedBluetoothDevices: _.mockAsyncAndPromise( 'getConnectedBluetoothDevices', {devices: []} ), getBluetoothDevices: _.mockAsyncAndPromise('getBluetoothDevices', { devices: [], }), getBluetoothAdapterState: _.mockAsyncAndPromise('getBluetoothAdapterState', { discovering: true, available: true, }), closeBluetoothAdapter: _.mockAsyncAndPromise('closeBluetoothAdapter'), // 设备 - 蓝牙 - 低功耗中心设备 writeBLECharacteristicValue: _.mockAsyncAndPromise( 'writeBLECharacteristicValue' ), setBLEMTU: _.mockAsyncAndPromise('setBLEMTU', {mtu: 0}), readBLECharacteristicValue: _.mockAsyncAndPromise( 'readBLECharacteristicValue' ), onBLEMTUChange() {}, onBLEConnectionStateChange() {}, onBLECharacteristicValueChange() {}, offBLEMTUChange() {}, offBLEConnectionStateChange() {}, offBLECharacteristicValueChange() {}, notifyBLECharacteristicValueChange: _.mockAsyncAndPromise( 'notifyBLECharacteristicValueChange' ), getBLEMTU: _.mockAsyncAndPromise('getBLEMTU', {mtu: 0}), getBLEDeviceServices: _.mockAsyncAndPromise('getBLEDeviceServices', { services: [], }), getBLEDeviceRSSI: _.mockAsyncAndPromise('getBLEDeviceRSSI', {RSSI: 0}), getBLEDeviceCharacteristics: _.mockAsyncAndPromise( 'getBLEDeviceCharacteristics', {characteristics: []} ), createBLEConnection: _.mockAsyncAndPromise('createBLEConnection'), closeBLEConnection: _.mockAsyncAndPromise('closeBLEConnection'), // 设备 - 蓝牙 - 低功耗外围设备 onBLEPeripheralConnectionStateChanged() {}, offBLEPeripheralConnectionStateChanged() {}, createBLEPeripheralServer: _.mockAsyncAndPromise( 'createBLEPeripheralServer', { server: { addService: _.mockAsync('addService'), close: _.mockAsync('close'), removeService: _.mockAsync('removeService'), startAdvertising: _.mockAsync('startAdvertising'), stopAdvertising: _.mockAsync('stopAdvertising'), writeCharacteristicValue: _.mockAsync('writeCharacteristicValue'), onCharacteristicWriteRequest() {}, offCharacteristicWriteRequest() {}, onCharacteristicReadRequest() {}, offCharacteristicReadRequest() {}, onCharacteristicSubscribed() {}, offCharacteristicSubscribed() {}, onCharacteristicUnsubscribed() {}, offCharacteristicUnsubscribed() {}, }, } ), // 设备 - 蓝牙 - 信标(Beacon) stopBeaconDiscovery: _.mockAsyncAndPromise('stopBeaconDiscovery'), startBeaconDiscovery: _.mockAsyncAndPromise('startBeaconDiscovery'), onBeaconUpdate() {}, onBeaconServiceChange() {}, offBeaconUpdate() {}, offBeaconServiceChange() {}, getBeacons: _.mockAsyncAndPromise('getBeacons', {beacons: []}), // 设备 - NFC 读写 getNFCAdapter: _.mockSync({ startDiscovery: _.mockAsync('startDiscovery'), stopDiscovery: _.mockAsync('stopDiscovery'), getNdef: _.mockSync(undefined), getNfcA: _.mockSync(undefined), getNfcB: _.mockSync(undefined), getIsoDep: _.mockSync(undefined), getNfcF: _.mockSync(undefined), getNfcV: _.mockSync(undefined), getMifareClassic: _.mockSync(undefined), getMifareUltralight: _.mockSync(undefined), onDiscovered() {}, offDiscovered() {}, }), // 设备 - Wi-Fi stopWifi: _.mockAsyncAndPromise('stopWifi'), startWifi: _.mockAsyncAndPromise('startWifi'), setWifiList: _.mockAsyncAndPromise('setWifiList'), onWifiConnectedWithPartialInfo() {}, onWifiConnected() {}, onGetWifiList() {}, offWifiConnectedWithPartialInfo() {}, offWifiConnected() {}, offGetWifiList() {}, getWifiList: _.mockAsyncAndPromise('getWifiList'), getConnectedWifi: _.mockAsyncAndPromise('getConnectedWifi', { wifi: { SSID: '', BSSID: '', secure: false, signalStrength: 0, frequency: 0, }, }), connectWifi: _.mockAsyncAndPromise('connectWifi'), // 设备 - 日历 addPhoneRepeatCalendar: _.mockAsyncAndPromise('addPhoneRepeatCalendar'), addPhoneCalendar: _.mockAsyncAndPromise('addPhoneCalendar'), // 设备 - 联系人 chooseContact: _.mockAsync('chooseContact', { phoneNumber: '123456789', displayName: 'june', }), addPhoneContact: _.mockAsyncAndPromise('addPhoneContact'), // 设备 - 无障碍 checkIsOpenAccessibility: _.mockAsyncAndPromise('checkIsOpenAccessibility', { open: true, }), // 设备 - 电量 getBatteryInfoSync: _.mockSync({ level: 100, isCharging: false, }), getBatteryInfo: _.mockAsyncAndPromise('getBatteryInfo', { level: 100, isCharging: false, }), // 设备 - 剪贴板 setClipboardData: _.mockAsyncAndPromise('setClipboardData'), getClipboardData: _.mockAsyncAndPromise('getClipboardData', {data: ''}), // 设备 - NFC stopHCE: _.mockAsyncAndPromise('stopHCE'), startHCE: _.mockAsyncAndPromise('startHCE'), sendHCEMessage: _.mockAsyncAndPromise('sendHCEMessage'), onHCEMessage() {}, offHCEMessage() {}, getHCEState: _.mockAsyncAndPromise('getHCEState'), // 设备 - 网络 onNetworkWeakChange() {}, onNetworkStatusChange() {}, offNetworkWeakChange() {}, offNetworkStatusChange() {}, getNetworkType: _.mockAsyncAndPromise('getNetworkType', { networkType: 'wifi', signalStrength: 0, hasSystemProxy: false, }), getLocalIPAddress: _.mockAsync('getLocalIPAddress', { localip: '192.168.0.1', netmask: '255.255.255.0', }), // 设备 - 加密 getRandomValues: userCryptoManager.getRandomValues, // 设备 - 屏幕 setVisualEffectOnCapture: _.mockAsync('setVisualEffectOnCapture'), setScreenBrightness: _.mockAsyncAndPromise('setScreenBrightness'), setKeepScreenOn: _.mockAsyncAndPromise('setKeepScreenOn'), onUserCaptureScreen() {}, onScreenRecordingStateChanged() {}, offUserCaptureScreen() {}, offScreenRecordingStateChanged() {}, getScreenRecordingState: _.mockAsync('getScreenRecordingState', { state: 'off', }), getScreenBrightness: _.mockAsyncAndPromise('getScreenBrightness', { value: 0, }), // 设备 - 键盘 onKeyboardHeightChange() {}, offKeyboardHeightChange() {}, hideKeyboard: _.mockAsyncAndPromise('hideKeyboard'), getSelectedTextRange: _.mockAsyncAndPromise('getSelectedTextRange', { start: 0, end: 0, }), // 设备 - 电话 makePhoneCall: _.mockAsyncAndPromise('makePhoneCall'), // 设备 - 加速计 stopAccelerometer: _.mockAsyncAndPromise('stopAccelerometer'), startAccelerometer: _.mockAsyncAndPromise('startAccelerometer'), onAccelerometerChange() {}, offAccelerometerChange() {}, // 设备 - 罗盘 stopCompass: _.mockAsyncAndPromise('stopCompass'), startCompass: _.mockAsyncAndPromise('startCompass'), onCompassChange() {}, offCompassChange() {}, // 设备 - 设备方向 stopDeviceMotionListening: _.mockAsyncAndPromise('stopDeviceMotionListening'), startDeviceMotionListening: _.mockAsyncAndPromise( 'startDeviceMotionListening' ), onDeviceMotionChange() {}, offDeviceMotionChange() {}, // 设备 - 陀螺仪 stopGyroscope: _.mockAsyncAndPromise('stopGyroscope'), startGyroscope: _.mockAsyncAndPromise('startGyroscope'), onGyroscopeChange() {}, offGyroscopeChange() {}, // 设备 - 内存 onMemoryWarning() {}, offMemoryWarning() {}, // 设备 - 扫码 scanCode: _.mockAsyncAndPromise('scanCode', { result: '', scanType: 'QR_CODE', charSet: 'utf8', path: '/', rawData: '', }), // 设备 - 短信 sendSms: _.mockAsync('sendSms'), // 设备 - 振动 vibrateShort: _.mockAsyncAndPromise('vibrateShort'), vibrateLong: _.mockAsyncAndPromise('vibrateLong'), // AI - AI 推理 getInferenceEnvInfo: _.mockAsync('getInferenceEnvInfo', {ver: ''}), createInferenceSession: _.mockSync({ onLoad() {}, offLoad() {}, onError() {}, offError() {}, run: () => new Promise(resolve => resolve({})), destroy() {}, }), // AI - 视觉算法 isVKSupport: _.mockSync(false), createVKSession: _.mockSync({ state: 0, config: { version: 'v2', track: { plane: {mode: 3}, marker: false, OSD: false, face: {mode: 1}, OCR: {mode: 1}, body: {mode: 1}, hand: {mode: 1}, threeDof: false, }, gl: undefined, }, cameraSize: { width: 414, height: 672, }, start() {}, stop() {}, destroy() {}, requestAnimationFrame: func => setTimeout(func, 0), cancelAnimationFrame: clearTimeout, getVKFrame: () => ({ timestamp: 0, camera: { viewMatrix: Float32Array.from([]), intrinsics: Float32Array.from([]), getProjectionMatrix: () => Float32Array.from([]), }, getCameraTexture: () => ({ yTexture: undefined, uvTexture: undefined, }), getCameraBuffer: () => Uint8Array.from([]).buffer, getDisplayTransform: () => Float32Array.from([]), }), hitTest: () => [], addMarker: () => 0, removeMarker() {}, getAllMarker: () => [], addOSDMarker: () => 0, removeOSDMarker() {}, getAllOSDMarker: () => [], update3DMode() {}, updateOSDThreshold() {}, detectFace() {}, detectBody() {}, detectHand() {}, runOCR() {}, on() {}, off() {}, }), // AI - 人脸检测 stopFaceDetect: _.mockAsync('stopFaceDetect'), initFaceDetect: _.mockAsync('initFaceDetect'), faceDetect: _.mockAsync('faceDetect', { detectRect: { height: 0, width: 0, originX: 0, originY: 0 }, x: -1, y: -1, pointArray: [], confArray: { global: 1, leftEye: 1, rightEye: 1, mouth: 1, nose: 1 }, angleArray: {pitch: 0, yaw: 0, roll: 0}, faceInfo: [], }), // Worker createWorker: _.mockSync({ postMessage() {}, terminate() {}, testOnProcessKilled() {}, onMessage() {}, onProcessKilled() {}, }), // WXML createSelectorQuery: () => new SelectorQuery(), createIntersectionObserver: (compInst, options) => compInst.createIntersectionObserver(options), // 第三方平台 getExtConfigSync: () => ({}), getExtConfig: _.mockAsyncAndPromise('getExtConfig', {extConfig: {}}), // 广告 createRewardedVideoAd: () => ad, createInterstitialAd: () => ad, }