mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-05-12 03:23:48 +00:00
- schema/form-schema/table 三个此前无测试的包补齐基础用例 - utils 扩充 dom helpers、compiledCond、getDefaultValueFromFields 等边界场景 - stage 补充常量/枚举与 selected class、getTargetElStyle 等工具用例 - core 新增 utils(style2Obj/transformStyle/getTransform)、Env、Store、FlowState、Page 用例 测试文件总数 43 -> 51, 用例数 419 -> 559。 Co-authored-by: Cursor <cursoragent@cursor.com>
129 lines
4.0 KiB
TypeScript
129 lines
4.0 KiB
TypeScript
/*
|
||
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
||
*
|
||
* Copyright (C) 2025 Tencent. All rights reserved.
|
||
*
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*/
|
||
import { describe, expect, test } from 'vitest';
|
||
|
||
import Env from '../src/Env';
|
||
import FlowState from '../src/FlowState';
|
||
import Store from '../src/Store';
|
||
|
||
describe('Env', () => {
|
||
test('空 ua 时所有标识为 false', () => {
|
||
const env = new Env('');
|
||
expect(env.isIos).toBe(false);
|
||
expect(env.isAndroid).toBe(false);
|
||
expect(env.isWeb).toBe(false);
|
||
});
|
||
|
||
test('iPhone ua 解析为 isIos / isIphone', () => {
|
||
const ua =
|
||
'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148';
|
||
const env = new Env(ua);
|
||
expect(env.isIphone).toBe(true);
|
||
expect(env.isIos).toBe(true);
|
||
expect(env.isAndroid).toBe(false);
|
||
expect(env.isWeb).toBe(false);
|
||
});
|
||
|
||
test('iPad ua 解析为 isIpad / isIos', () => {
|
||
const ua = 'Mozilla/5.0 (iPad; CPU OS 16_0 like Mac OS X)';
|
||
const env = new Env(ua);
|
||
expect(env.isIpad).toBe(true);
|
||
expect(env.isIos).toBe(true);
|
||
});
|
||
|
||
test('Android phone vs Android pad', () => {
|
||
const phone = new Env('Mozilla/5.0 (Linux; Android 13; Mobile)');
|
||
expect(phone.isAndroid).toBe(true);
|
||
expect(phone.isAndroidPad).toBe(false);
|
||
|
||
const pad = new Env('Mozilla/5.0 (Linux; Android 13; Tablet)');
|
||
expect(pad.isAndroid).toBe(true);
|
||
expect(pad.isAndroidPad).toBe(true);
|
||
});
|
||
|
||
test('Mac / Windows / Wechat / 企业 QQ', () => {
|
||
const mac = new Env('Mozilla/5.0 (Macintosh; Intel Mac OS X)');
|
||
expect(mac.isMac).toBe(true);
|
||
expect(mac.isWeb).toBe(true);
|
||
|
||
const win = new Env('Mozilla/5.0 (Windows NT 10.0)');
|
||
expect(win.isWin).toBe(true);
|
||
|
||
const wechat = new Env('Mozilla/5.0 ... MicroMessenger/8.0');
|
||
expect(wechat.isWechat).toBe(true);
|
||
|
||
const qq = new Env('Mozilla/5.0 ... QQ/8.0.0');
|
||
expect(qq.isMqq).toBe(true);
|
||
|
||
const wxwork = new Env('MicroMessenger/8.0 wxwork/4.0');
|
||
expect(wxwork.isWechat).toBe(false);
|
||
});
|
||
|
||
test('OpenHarmony 时 isWeb 为 false', () => {
|
||
const env = new Env('Mozilla/5.0 OpenHarmony 4.0');
|
||
expect(env.isOpenHarmony).toBe(true);
|
||
expect(env.isWeb).toBe(false);
|
||
});
|
||
|
||
test('支持自定义扩展属性', () => {
|
||
const env = new Env('Mozilla/5.0 (Macintosh; Intel Mac OS X)', { custom: 'value', isWin: true });
|
||
expect((env as any).custom).toBe('value');
|
||
expect(env.isWin).toBe(true);
|
||
});
|
||
});
|
||
|
||
describe('Store', () => {
|
||
test('默认 initialData', () => {
|
||
const store = new Store();
|
||
expect(store.get('foo')).toBeUndefined();
|
||
});
|
||
|
||
test('set / get', () => {
|
||
const store = new Store();
|
||
store.set('foo', 'bar');
|
||
expect(store.get('foo')).toBe('bar');
|
||
});
|
||
|
||
test('使用自定义 initialData', () => {
|
||
const store = new Store({ initialData: { a: 1, b: 2 } });
|
||
expect(store.get('a')).toBe(1);
|
||
expect(store.get('b')).toBe(2);
|
||
});
|
||
|
||
test('set 覆盖 initialData 中的值', () => {
|
||
const store = new Store({ initialData: { a: 1 } });
|
||
store.set('a', 100);
|
||
expect(store.get('a')).toBe(100);
|
||
});
|
||
});
|
||
|
||
describe('FlowState', () => {
|
||
test('初始 isAbort 为 false', () => {
|
||
const fs = new FlowState();
|
||
expect(fs.isAbort).toBe(false);
|
||
});
|
||
|
||
test('abort 后 isAbort 为 true,reset 后恢复', () => {
|
||
const fs = new FlowState();
|
||
fs.abort();
|
||
expect(fs.isAbort).toBe(true);
|
||
fs.reset();
|
||
expect(fs.isAbort).toBe(false);
|
||
});
|
||
});
|