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_civar r = /[�-��]/u;
16425bb815Sopenharmony_ci
17425bb815Sopenharmony_civar m = r.exec("�");
18425bb815Sopenharmony_ciassert(m !== null);
19425bb815Sopenharmony_ciassert(m[0] === "�");
20425bb815Sopenharmony_ci
21425bb815Sopenharmony_cir = /[�E]/ug;
22425bb815Sopenharmony_ciassert (r.exec("E�E")[0] === 'E');
23425bb815Sopenharmony_ciassert (r.exec("E�E")[0] === '�');
24425bb815Sopenharmony_ciassert (r.exec("E�E")[0] === 'E');
25425bb815Sopenharmony_ci
26425bb815Sopenharmony_citry {
27425bb815Sopenharmony_ci  eval("/[�-��]/");
28425bb815Sopenharmony_ci  assert (false);
29425bb815Sopenharmony_ci} catch (e) {
30425bb815Sopenharmony_ci  assert (e instanceof SyntaxError);
31425bb815Sopenharmony_ci}
32425bb815Sopenharmony_ci
33425bb815Sopenharmony_ciassert (/\udc96/.exec("\ud803\udc96")[0] === '\udc96');
34425bb815Sopenharmony_ciassert (/\udc96/u.exec("\ud803\udc96") === null);
35425bb815Sopenharmony_ciassert (/\udc96/u.exec("\udc96")[0] === '\udc96');
36425bb815Sopenharmony_ci
37425bb815Sopenharmony_ciassert (/\ud803/.exec("\ud803\udc96")[0] === '\ud803');
38425bb815Sopenharmony_ciassert (/\ud803/u.exec("\ud803\udc96") === null);
39425bb815Sopenharmony_ciassert (/\ud803/u.exec("\ud803")[0] === '\ud803');
40425bb815Sopenharmony_ci
41425bb815Sopenharmony_ciassert (/./u.exec("\ud803\udc96")[0] === '�');
42425bb815Sopenharmony_ciassert (/./.exec("\ud803\udc96")[0] === '\ud803');
43425bb815Sopenharmony_ciassert (/./u.exec("\ud803\ud803")[0] === '\ud803');
44425bb815Sopenharmony_ciassert (/./u.exec("\udc96\udc96")[0] === '\udc96');
45425bb815Sopenharmony_ciassert (/./u.exec("\ud803")[0] === '\ud803');
46425bb815Sopenharmony_ci
47425bb815Sopenharmony_civar r = /abc/y;
48425bb815Sopenharmony_cim = r.exec ("strabcstr");
49425bb815Sopenharmony_ciassert (m === null);
50425bb815Sopenharmony_ci
51425bb815Sopenharmony_cir.lastIndex = 3;
52425bb815Sopenharmony_cim = r.exec ("strabcstr");
53425bb815Sopenharmony_ciassert (m[0] === "abc");
54425bb815Sopenharmony_ciassert (r.lastIndex === 6);
55425bb815Sopenharmony_ci
56425bb815Sopenharmony_cim = r.exec ("strabcstr");
57425bb815Sopenharmony_ciassert (m === null);
58425bb815Sopenharmony_ciassert (r.lastIndex === 0);
59425bb815Sopenharmony_ci
60425bb815Sopenharmony_civar r = /abc/yg;
61425bb815Sopenharmony_cim = r.exec ("strabcstr");
62425bb815Sopenharmony_ciassert (m === null);
63425bb815Sopenharmony_ci
64425bb815Sopenharmony_citry {
65425bb815Sopenharmony_ci  RegExp.prototype.flags;
66425bb815Sopenharmony_ci  assert (false);
67425bb815Sopenharmony_ci} catch (e) {
68425bb815Sopenharmony_ci  assert (e instanceof TypeError);
69425bb815Sopenharmony_ci}
70425bb815Sopenharmony_ci
71425bb815Sopenharmony_civar flagsProp = Object.getOwnPropertyDescriptor (RegExp.prototype, "flags");
72425bb815Sopenharmony_ciassert(flagsProp.get.call({}) === '');
73