blob: 67fbac7ef35d6245d7825ce1340b58de008669ea [file] [log] [blame]
Ben Murdoch097c5b22016-05-18 11:27:45 +01001// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Ben Murdoch61f157c2016-09-16 13:49:30 +01005// Flags: --harmony-regexp-lookbehind
Ben Murdoch097c5b22016-05-18 11:27:45 +01006
7var r = /./ug;
8assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
9assertEquals(2, r.lastIndex);
10r.lastIndex = 1;
11assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
12assertEquals(2, r.lastIndex);
13assertEquals(["\ud801\udc01"], r.exec("\ud800\udc00\ud801\udc01"));
14r.lastIndex = 3;
15assertEquals(["\ud801\udc01"], r.exec("\ud800\udc00\ud801\udc01"));
16assertEquals(4, r.lastIndex);
17r.lastIndex = 4;
18assertNull(r.exec("\ud800\udc00\ud801\udc01"));
19assertEquals(0, r.lastIndex);
20r.lastIndex = 5;
21assertNull(r.exec("\ud800\udc00\ud801\udc01"));
22assertEquals(0, r.lastIndex);
23
24r.lastIndex = 3;
25assertEquals(["\ud802"], r.exec("\ud800\udc00\ud801\ud802"));
26r.lastIndex = 4;
27assertNull(r.exec("\ud800\udc00\ud801\ud802"));
28
29r = /./g;
30assertEquals(["\ud800"], r.exec("\ud800\udc00\ud801\udc01"));
31assertEquals(1, r.lastIndex);
32assertEquals(["\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
33assertEquals(2, r.lastIndex);
34assertEquals(["\ud801"], r.exec("\ud800\udc00\ud801\udc01"));
35assertEquals(3, r.lastIndex);
36assertEquals(["\udc01"], r.exec("\ud800\udc00\ud801\udc01"));
37assertEquals(4, r.lastIndex);
38assertNull(r.exec("\ud800\udc00\ud801\udc01"));
39assertEquals(0, r.lastIndex);
40r.lastIndex = 1;
41assertEquals(["\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
42assertEquals(2, r.lastIndex);
43
44// ------------------------
45
46r = /^./ug;
47assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
48assertEquals(2, r.lastIndex);
49r.lastIndex = 1;
50assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
51assertEquals(2, r.lastIndex);
52assertNull(r.exec("\ud800\udc00\ud801\udc01"));
53assertEquals(0, r.lastIndex);
54r.lastIndex = 3;
55assertNull(r.exec("\ud800\udc00\ud801\udc01"));
56assertEquals(0, r.lastIndex);
57r.lastIndex = 4;
58assertNull(r.exec("\ud800\udc00\ud801\udc01"));
59assertEquals(0, r.lastIndex);
60r.lastIndex = 5;
61assertNull(r.exec("\ud800\udc00\ud801\udc01"));
62assertEquals(0, r.lastIndex);
63
64r = /^./g;
65assertEquals(["\ud800"], r.exec("\ud800\udc00\ud801\udc01"));
66assertEquals(1, r.lastIndex);
67assertNull(r.exec("\ud800\udc00\ud801\udc01"));
68assertEquals(0, r.lastIndex);
69r.lastIndex = 3;
70assertNull(r.exec("\ud800\udc00\ud801\udc01"));
71assertEquals(0, r.lastIndex);
72
73//------------------------
74
75r = /(?:(^.)|.)/ug;
76assertEquals(["\ud800\udc00", "\ud800\udc00"],
77 r.exec("\ud800\udc00\ud801\udc01"));
78assertEquals(2, r.lastIndex);
79r.lastIndex = 1;
80assertEquals(["\ud800\udc00", "\ud800\udc00"],
81 r.exec("\ud800\udc00\ud801\udc01"));
82assertEquals(2, r.lastIndex);
83assertEquals(["\ud801\udc01", undefined], r.exec("\ud800\udc00\ud801\udc01"));
84r.lastIndex = 3;
85assertEquals(["\ud801\udc01", undefined], r.exec("\ud800\udc00\ud801\udc01"));
86r.lastIndex = 4;
87assertNull(r.exec("\ud800\udc00\ud801\udc01"));
88r.lastIndex = 5;
89assertNull(r.exec("\ud800\udc00\ud801\udc01"));
90
91r.lastIndex = 3;
92assertEquals(["\ud802", undefined], r.exec("\ud800\udc00\ud801\ud802"));
93r.lastIndex = 4;
94assertNull(r.exec("\ud800\udc00\ud801\ud802"));
95
96r = /(?:(^.)|.)/g;
97assertEquals(["\ud800", "\ud800"],
98 r.exec("\ud800\udc00\ud801\udc01"));
99assertEquals(1, r.lastIndex);
100assertEquals(["\udc00", undefined], r.exec("\ud800\udc00\ud801\udc01"));
101assertEquals(2, r.lastIndex);
102r.lastIndex = 3;
103assertEquals(["\udc01", undefined], r.exec("\ud800\udc00\ud801\udc01"));
104assertEquals(4, r.lastIndex);