1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation
2425bb815Sopenharmony_ci//
3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License.
5425bb815Sopenharmony_ci// You may obtain a copy of the License at
6425bb815Sopenharmony_ci//
7425bb815Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8425bb815Sopenharmony_ci//
9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS
11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and
13425bb815Sopenharmony_ci// limitations under the License.
14425bb815Sopenharmony_ci
15425bb815Sopenharmony_ci// Test with proxy
16425bb815Sopenharmony_ciassert(JSON.stringify(new Proxy(['foo'], {})) === '["foo"]');
17425bb815Sopenharmony_ciassert(JSON.stringify(new Proxy({0:"foo"}, {})) === '{"0":"foo"}');
18425bb815Sopenharmony_ci
19425bb815Sopenharmony_civar target = [1,2,3];
20425bb815Sopenharmony_civar handler = {
21425bb815Sopenharmony_ci  get(target, prop) {
22425bb815Sopenharmony_ci    if (prop == "length")
23425bb815Sopenharmony_ci    {
24425bb815Sopenharmony_ci      throw 42;
25425bb815Sopenharmony_ci    }
26425bb815Sopenharmony_ci  }
27425bb815Sopenharmony_ci}
28425bb815Sopenharmony_ci
29425bb815Sopenharmony_citry {
30425bb815Sopenharmony_ci  JSON.stringify(new Proxy(target,handler));
31425bb815Sopenharmony_ci  assert(false);
32425bb815Sopenharmony_ci} catch (e) {
33425bb815Sopenharmony_ci  assert(e === 42);
34425bb815Sopenharmony_ci}
35425bb815Sopenharmony_ci
36425bb815Sopenharmony_civar revocable = Proxy.revocable (target, { get (t, p , r) {
37425bb815Sopenharmony_ci  if (p == "toJSON") {
38425bb815Sopenharmony_ci    revocable.revoke();
39425bb815Sopenharmony_ci  }
40425bb815Sopenharmony_ci}});
41425bb815Sopenharmony_civar proxy = revocable.proxy;
42425bb815Sopenharmony_ci
43425bb815Sopenharmony_citry {
44425bb815Sopenharmony_ci  JSON.stringify(proxy);
45425bb815Sopenharmony_ci  assert(false);
46425bb815Sopenharmony_ci} catch (e) {
47425bb815Sopenharmony_ci  assert(e instanceof TypeError);
48425bb815Sopenharmony_ci}
49