13af6ab5fSopenharmony_ci/*
23af6ab5fSopenharmony_ci * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License.
53af6ab5fSopenharmony_ci * You may obtain a copy of the License at
63af6ab5fSopenharmony_ci *
73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
83af6ab5fSopenharmony_ci *
93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and
133af6ab5fSopenharmony_ci * limitations under the License.
143af6ab5fSopenharmony_ci */
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_ciimport {
173af6ab5fSopenharmony_ci    I,
183af6ab5fSopenharmony_ci    foo,
193af6ab5fSopenharmony_ci    I2,
203af6ab5fSopenharmony_ci    I3,
213af6ab5fSopenharmony_ci    bar,
223af6ab5fSopenharmony_ci    C,
233af6ab5fSopenharmony_ci    getDynamicObject,
243af6ab5fSopenharmony_ci    dynamic_array,
253af6ab5fSopenharmony_ci    padding,
263af6ab5fSopenharmony_ci    margin,
273af6ab5fSopenharmony_ci    position,
283af6ab5fSopenharmony_ci    IndexedSignatureType,
293af6ab5fSopenharmony_ci    postCardAction
303af6ab5fSopenharmony_ci} from "./dynamic_lib"
313af6ab5fSopenharmony_ci
323af6ab5fSopenharmony_cifunction main(): void {
333af6ab5fSopenharmony_ci    let obj: I = {
343af6ab5fSopenharmony_ci        f1: {a: 10, b: 20},
353af6ab5fSopenharmony_ci        f2: [{c: 30}, {d: 40}],
363af6ab5fSopenharmony_ci        "prop.xxx": 0
373af6ab5fSopenharmony_ci    }
383af6ab5fSopenharmony_ci
393af6ab5fSopenharmony_ci    obj = {
403af6ab5fSopenharmony_ci        f1: {e: "abc"},
413af6ab5fSopenharmony_ci        f2: [{g: 50}]
423af6ab5fSopenharmony_ci    }
433af6ab5fSopenharmony_ci
443af6ab5fSopenharmony_ci    obj.f1 = {f: 100}
453af6ab5fSopenharmony_ci    obj.f1 = [{a1: 1}, {a2: 2, a3: 3}]
463af6ab5fSopenharmony_ci
473af6ab5fSopenharmony_ci    foo({f2: 'abc', f3: 30})
483af6ab5fSopenharmony_ci    foo([{b1: 1, b2: 2}, {b3: '3'}])
493af6ab5fSopenharmony_ci
503af6ab5fSopenharmony_ci    let obj2: I2 = {
513af6ab5fSopenharmony_ci        f1: {a: 10, b: 20},
523af6ab5fSopenharmony_ci        f2: [{c: 30}, {d: 40}],
533af6ab5fSopenharmony_ci        f3: {a: '11', b: 444, c: {f: {d: [1, 2]}}}
543af6ab5fSopenharmony_ci    }
553af6ab5fSopenharmony_ci    
563af6ab5fSopenharmony_ci    bar({f2: 'abc', f3: 30})
573af6ab5fSopenharmony_ci    bar([{b1: 1, b2: 2}, {b3: '3'}], {c: 4, d: 5})
583af6ab5fSopenharmony_ci
593af6ab5fSopenharmony_ci    let obj3: I3 = {
603af6ab5fSopenharmony_ci        f1: {a: 10, b: 20},
613af6ab5fSopenharmony_ci        f2: {a: '11', b: 444, c: {f: {d: [1, 2]}}},
623af6ab5fSopenharmony_ci        f3: [{c: 30}, {d: 40}]
633af6ab5fSopenharmony_ci    }
643af6ab5fSopenharmony_ci}
653af6ab5fSopenharmony_ci
663af6ab5fSopenharmony_ci// #13412 - assign dynamic object (interop) to some static type from standard library
673af6ab5fSopenharmony_ciinterface InitProps {
683af6ab5fSopenharmony_ci    p?: number;
693af6ab5fSopenharmony_ci    q?: Record<string, Object> | undefined;
703af6ab5fSopenharmony_ci    r?: Object | undefined | Record<string, Object>;
713af6ab5fSopenharmony_ci}
723af6ab5fSopenharmony_cifunction createInitProps(c: C) {
733af6ab5fSopenharmony_ci    let a: InitProps = {
743af6ab5fSopenharmony_ci        p: c.a,
753af6ab5fSopenharmony_ci        q: c.b
763af6ab5fSopenharmony_ci    }
773af6ab5fSopenharmony_ci
783af6ab5fSopenharmony_ci    let b: InitProps = {
793af6ab5fSopenharmony_ci        r: getDynamicObject()
803af6ab5fSopenharmony_ci    }
813af6ab5fSopenharmony_ci}
823af6ab5fSopenharmony_ci
833af6ab5fSopenharmony_ci// #13483 - pass object literal to method call of exported variable
843af6ab5fSopenharmony_cidynamic_array.splice(2, 0, {a: 1, b: '2'});
853af6ab5fSopenharmony_ci
863af6ab5fSopenharmony_ci// #13550 - allow literals as property names in dynamic context
873af6ab5fSopenharmony_cipadding({'top': '0px', 'right': '5px', 'bottom': '10px', 'left': '15px'});
883af6ab5fSopenharmony_cimargin({'top': '10px', 'right': '20px', 'bottom': '30px', 'left': '40px'});
893af6ab5fSopenharmony_ciposition({'x': '20', 'y': '40'});
903af6ab5fSopenharmony_ci
913af6ab5fSopenharmony_ci// allow literal as property name for type aliases that come from interop
923af6ab5fSopenharmony_cifunction typeAliasLitAsPropName(): IndexedSignatureType {
933af6ab5fSopenharmony_ci    return {
943af6ab5fSopenharmony_ci        'a': '1',
953af6ab5fSopenharmony_ci        'b': '2',
963af6ab5fSopenharmony_ci        'c': '3'
973af6ab5fSopenharmony_ci    }
983af6ab5fSopenharmony_ci}
993af6ab5fSopenharmony_ci
1003af6ab5fSopenharmony_ci// #14399
1013af6ab5fSopenharmony_cipostCardAction({}, {
1023af6ab5fSopenharmony_ci    "action": 'router',
1033af6ab5fSopenharmony_ci    "abilityName": 'SomeAbility',
1043af6ab5fSopenharmony_ci    "params": {
1053af6ab5fSopenharmony_ci        "message": 'add detail'
1063af6ab5fSopenharmony_ci    }
1073af6ab5fSopenharmony_ci});