UTSJSONObject.uts 5.9 KB
Newer Older
1 2 3 4
import { describe, test, expect, expectNumber, Result } from './tests.uts'

export function testUTSJSONObject() : Result {
  return describe("utsjsonobject", () => {
5

6
    test('keys', () => {
M
mahaifeng 已提交
7
      // #TEST UTSJSONObject.keys
8 9 10 11
        let obj = {
          name:"zhangsan",
          age:11
        }
雪洛's avatar
雪洛 已提交
12
        expect(UTSJSONObject.keys(obj).length).toEqual(2);
M
mahaifeng 已提交
13 14
    
         // #END
15
    })
16
    
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
    test('toJSONObject', () => {
      // #ifdef APP-ANDROID
        let result = {}
        result["opt"] = "xxxx"
        
        let subArray = [] as Array<UTSJSONObject>
        let subModel = {}
        subModel["name"] = "xxx"
        subModel["type"] = 0
        subArray.push(subModel)
        
        let service = {}
        service["name"] = "0xxxb34fb"
        service["type"] = 0
        
        //这个数据返回为空对象数组
        service["array"] = subArray
        
        result["service"] = service
        
        expect(result.toJSONObject().toJSONString()).toEqual('{"opt":"xxxx","service":{"array":[{"name":"xxx","type":0}],"name":"0xxxb34fb","type":0}}');
        
      // #endif
    })
41
    
42 43
    test('assign-notype', () => {
      // #ifdef APP-ANDROID
44 45 46 47
      // #TEST UTSJSONObject.assign
      let target = { a: 1, b: 2 };
      let source = { b: 4, c: 5 };
      // 得到一个UTSJSONObject对象
48
      let returnedTarget = UTSJSONObject.assign(target, source);
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
      // #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 },
66
        {
67
          work: 0.002
68
        } as C)
69 70 71 72 73 74 75 76
      expect(b['age']).toEqual(12);
      expect(b['username']).toEqual("张三");
      expect(b['b']).toEqual(2);
      expect(b['work']).toEqual(0.002);

      // #TEST UTSJSONObject.assign_1
      let target1 = { a: 1, b: 2 };
      let source1 = { b: 4, c: 5 };
77 78 79
      // 得到一个UTSJSONObject对象
      let returned= UTSJSONObject.assign<UTSJSONObject>(target1, source1);
      console.log(returned)
80 81
      // #END

82 83
      // #endif
    })
84

85
    test('setvalue-after-get', () => {
lizhongyi_'s avatar
lizhongyi_ 已提交
86
      // #ifdef APP-ANDROID
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
      // #TEST UTSJSONObject.getJSON,UTSJSONObject.getArray
      let obj = {
        "cars": [
          {
            name: "car1",
            value: 100
          }
        ]
      }

      let cars = obj.getArray<UTSJSONObject>("cars")
      cars![0].set("value", 20)
      let firstCar = obj.getJSON("cars[0]")
      console.log(firstCar!['value'])//20
      // #END
      expect(firstCar!['value']).toEqual(20);
      // #endif
104 105
    })
    
106 107 108
    
    test('get-speed', () => {
      // #ifdef APP-ANDROID
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
      // #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
124
    })
125

126 127
    test('assign-withtype', () => {
      // #ifdef APP-ANDROID
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
      type User = {
        a : number
        b : number
      }
      const target = { a: 1, b: 2 };
      const source = { b: 4, c: 5 };
      const returnedTarget = UTSJSONObject.assign<User>(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<string>
      let genericArray = obj!.getArray<string>("tag")
      console.log(genericArray)
      // #END
      // #endif
    })

    test('sample', () => {
      // #TEST UTSJSONObject.sample_create,UTSJSONObject.get,UTSJSONObject.set
      const person : UTSJSONObject = {
        name: 'Tom',
        printName: () => {
          // ...
163
        }
164 165
      }
      //返回指定键对应的值,如果对象中不存在此键则返回 null。
166
      let name : string = person["name"] as String
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
      //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<UTSJSONObject>('{"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<User>(jsonObj.toJSONString())
      console.log(userA!.name)
      // 自定义type => UTSJSONObject
      let utsJsonA = JSON.parseObject(JSON.stringify(userA))
      console.log(utsJsonA)
       // #END
216 217 218
      // #endif
    })
  })
219
}