• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http: //www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16class Class1 { fld: Number = 2; }
17
18function test_1(): void {
19    let class1_partial: Partial<Class1> = {fld: 3};
20    assert class1_partial.fld == 3;
21    class1_partial.fld = undefined;
22    assert class1_partial.fld === undefined;
23}
24
25// -----------------------------------------------
26
27class Class2 {
28    fld: Number = 2;
29    foo(a0: Partial<Class2>) {
30        a0.fld = undefined;
31    }
32}
33
34function test_2(): void {
35    let class2_original: Class2 = new Class2();
36    let class2_partial: Partial<Class2> = {fld: 3};
37    assert class2_partial.fld == 3;
38    class2_original.foo(class2_partial);
39    assert class2_partial.fld === undefined;
40}
41
42// -----------------------------------------------
43
44class Class3 {
45    mmeb: Number = 2;
46    foo(a0: Partial<Class5>){
47        a0.mmeb = undefined;
48    }
49}
50
51class Class4 extends Class3 {}
52
53class Class5 extends Class4 {
54    mmeb: Number = 2;
55    foo(a0: Partial<Class3>){
56        a0.mmeb = undefined;
57    }
58}
59
60function test_3(): void {
61    let class3_original: Class3 = new Class3();
62    let class5_original: Class3 = new Class5();
63    let class3_partial: Partial<Class3> = {mmeb: 8};
64    let class5_partial: Partial<Class5> = {mmeb: 10};
65    class3_original.foo(class5_partial);
66    class5_original.foo(class3_partial);
67    assert class3_partial.mmeb === undefined;
68    assert class5_partial.mmeb === undefined;
69}
70
71// -----------------------------------------------
72
73class Class6<T> {
74    mmeb: Number = 2;
75    foo(a0: Partial<T>){
76        if(this.mmeb == 3){
77            return;
78        }
79
80        this.bar(a0);
81    }
82    bar(a0: Partial<T>){
83        this.mmeb = 3;
84        this.foo(a0);
85    }
86}
87
88class Class7 { fld: Number = 6;}
89
90class Class8 <T extends Class7> {
91    baz(a0: Partial<T>){
92        a0.fld = undefined;
93    }
94}
95
96function test_4(): void {
97    let class7_partial: Partial<Class7> = {fld: 8};
98    let class6_original: Class6<Class7> = new Class6<Class7>();
99    class6_original.foo(class7_partial);
100}
101
102// -----------------------------------------------
103
104class Class9 { fld: Number = 8; }
105
106class Class10 extends Class9 { memb: Number = 9; }
107
108function test_5(): void {
109    let class10_partial: Partial<Class10> = {memb: 7, fld: 5};
110
111    assert class10_partial.memb == 7;
112    assert class10_partial.fld == 5;
113
114    class10_partial.memb = undefined;
115    class10_partial.fld = undefined;
116
117    assert class10_partial.memb === undefined;
118    assert class10_partial.fld === undefined;
119}
120
121//---------------------------------------
122
123function main(): void {
124    test_1();
125    test_2();
126    test_3();
127    test_4();
128    test_5();
129}
130