From a5bd6e13bf51c6e361dc914095870d026cb193a2 Mon Sep 17 00:00:00 2001 From: mahaifeng Date: Fri, 6 Sep 2024 13:09:21 +0800 Subject: [PATCH] =?UTF-8?q?[UTSJSONObject]=E5=8E=BB=E9=99=A4=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E4=B8=AD=E6=89=8B=E5=8A=A8=E7=94=9F=E6=88=90=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uts-tests/utssdk/UTSJSONObject.uts | 234 +++++++++++++----- 1 file changed, 171 insertions(+), 63 deletions(-) diff --git a/uni_modules/uts-tests/utssdk/UTSJSONObject.uts b/uni_modules/uts-tests/utssdk/UTSJSONObject.uts index da74536..b4488bd 100644 --- a/uni_modules/uts-tests/utssdk/UTSJSONObject.uts +++ b/uni_modules/uts-tests/utssdk/UTSJSONObject.uts @@ -2,6 +2,7 @@ import { describe, test, expect, expectNumber, Result } from './tests.uts' export function testUTSJSONObject() : Result { return describe("utsjsonobject", () => { + test('keys', () => { let obj = { name:"zhangsan", @@ -9,6 +10,15 @@ export function testUTSJSONObject() : Result { } expect(UTSJSONObject.keys(obj).length).toEqual(2); console.log(UTSJSONObject.keys(obj)) + // #TEST UTSJSONObject.keys + let obj = { + name: "zhangsan", + age: 11 + } + + let ret1 = UTSJSONObject.keys(obj).length + console.log(ret1) //2 + // #END }) test('toJSONObject', () => { @@ -38,84 +48,182 @@ export function testUTSJSONObject() : Result { test('assign-notype', () => { // #ifdef APP-ANDROID - const target = { a: 1, b: 2 }; - const source = { b: 4, c: 5 }; - const returnedTarget = UTSJSONObject.assign(target, source); - - expect(returnedTarget.toMap().size).toEqual(3); - - type A = { - username:string - age:number - } - type C = { - work:number - } - - let b = UTSJSONObject.assign( { - username:"张三", - age:12 - } as A, - {b:2}, + // #TEST UTSJSONObject.assign + let target = { a: 1, b: 2 }; + let source = { b: 4, c: 5 }; + // 得到一个UTSJSONObject对象 + const returnedTarget = UTSJSONObject.assign(target, source); + // #END + + expect(returnedTarget.toMap().size).toEqual(3); + + type A = { + username : string + age : number + } + type C = { + work : number + } + + let b = UTSJSONObject.assign({ + username: "张三", + age: 12 + } as A, + { b: 2 }, { - work:0.002 + work: 0.002 } as C) - expect(b['age']).toEqual(12); - expect(b['username']).toEqual("张三"); - expect(b['b']).toEqual(2); - expect(b['work']).toEqual(0.002); + expect(b['age']).toEqual(12); + expect(b['username']).toEqual("张三"); + expect(b['b']).toEqual(2); + expect(b['work']).toEqual(0.002); + + // #TEST UTSJSONObject.assign_1 + type User = { + a : number + b : number + } + let target1 = { a: 1, b: 2 }; + let source1 = { b: 4, c: 5 }; + // 得到一个User对象 + const returnedTarget = UTSJSONObject.assign(target1, source1); + // #END + // #endif }) - + test('setvalue-after-get', () => { // #ifdef APP-ANDROID - let obj = { - "cars":[ - { - name:"car1", - value:100 - } - ] - } - - let cars = obj.getArray("cars") - cars![0].set("value",20) - let firstCar = obj.getJSON("cars[0]") - expect(firstCar!['value']).toEqual(20); - // #endif + // #TEST UTSJSONObject.getJSON,UTSJSONObject.getArray + let obj = { + "cars": [ + { + name: "car1", + value: 100 + } + ] + } + + let cars = obj.getArray("cars") + cars![0].set("value", 20) + let firstCar = obj.getJSON("cars[0]") + console.log(firstCar!['value'])//20 + // #END + expect(firstCar!['value']).toEqual(20); + // #endif }) test('get-speed', () => { // #ifdef APP-ANDROID - const utsObj: UTSJSONObject = {} as any as UTSJSONObject - for (let i = 0; i < 100; i++) { - utsObj.set('' + i, '' + i) - } - - console.log('--start--') - let startTime = Date.now() - for (let i = 0; i < 10000; i++) { - utsObj.getString('0') - } - let spendTime = Date.now() - startTime - expect(spendTime < 300).toEqual(true); - // #endif + // #TEST UTSJSONObject.getString + const utsObj : UTSJSONObject = {} as any as UTSJSONObject + for (let i = 0; i < 100; i++) { + utsObj.set('' + i, '' + i) + } + + console.log('--start--') + let startTime = Date.now() + for (let i = 0; i < 10000; i++) { + utsObj.getString('0') + } + // #END + let spendTime = Date.now() - startTime + expect(spendTime < 300).toEqual(true); + // #endif }) - + test('assign-withtype', () => { // #ifdef APP-ANDROID - type User = { - a:number - b:number + type User = { + a : number + b : number + } + const target = { a: 1, b: 2 }; + const source = { b: 4, c: 5 }; + const returnedTarget = UTSJSONObject.assign(target, source); + + expect(returnedTarget!.a).toEqual(1); + console.log(returnedTarget) + // #endif + }) + test('getArray_1', () => { + // #ifdef APP-ANDROID + // #TEST UTSJSONObject.getArray_1 + //这个方法用来获取指定元素类型的数组 + let obj = JSON.parseObject('{"name":"tom","tag":["student","user"]}') + + // 这里得到是 Array<*> + let noGenericArray = obj!.getArray("tag") + console.log(noGenericArray) + + // 这里得到是 Array + let genericArray = obj!.getArray("tag") + console.log(genericArray) + // #END + // #endif + }) + + test('sample', () => { + // #TEST UTSJSONObject.sample_create,UTSJSONObject.get,UTSJSONObject.set + const person : UTSJSONObject = { + name: 'Tom', + printName: () => { + // ... } - const target = { a: 1, b: 2 }; - const source = { b: 4, c: 5 }; - const returnedTarget = UTSJSONObject.assign(target, source); - - expect(returnedTarget!.a).toEqual(1); - console.log(returnedTarget) + } + //返回指定键对应的值,如果对象中不存在此键则返回 null。 + let name : string = person.get('name') as string + //get 方法可以简化为使用下标运算符 `[]` 访问 + name = person['name'] as string + //增加或更新指定键对应的值。 + person.set('name', 'Tom1') + //set 方法可以简化为使用下标运算符 `[]` 赋值 + person['name'] = 'Tom2' + // #END + + // #TEST UTSJSONObject.sample_create1 + + // 写法1 推荐 + let person1 : UTSJSONObject = JSON.parseObject('{"name":"Tom"}')! + + // 写法2 推荐 + const person2 : UTSJSONObject = JSON.parse('{"name":"Tom"}')! + + + // 写法3 如果 as 转换的实际类型不匹配 会导致 crash,建议先通过 `instanceof` 判断类型再进行as转换。 + const parseRet3 = JSON.parse('{"name":"Tom"}') + if (parseRet3 instanceof UTSJSONObject) { + const person = parseRet3 as UTSJSONObject + } + + // #END + // #TEST UTSJSONObject.toMap + person1 = JSON.parseObject('{"name":"Tom"}')! + person1.toMap().forEach((value, key) => { + console.log(key) + console.log(value) + }) + // #END + + // #ifdef APP-ANDROID + // #TEST UTSJSONObject.convert + type User = { + name : string, + age : number + } + let jsonObj = { + name: "张三", + age: 12 + } + // UTSJSONObject => 自定义type + let userA = JSON.parse(jsonObj.toJSONString()) + console.log(userA!.name) + // 自定义type => UTSJSONObject + let utsJsonA = JSON.parseObject(JSON.stringify(userA)) + console.log(utsJsonA) + // #END // #endif }) }) -} +} \ No newline at end of file -- GitLab