1// Copyright 2013 the V8 project authors. All rights reserved.
2// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions
6// are met:
7// 1.  Redistributions of source code must retain the above copyright
8//     notice, this list of conditions and the following disclaimer.
9// 2.  Redistributions in binary form must reproduce the above copyright
10//     notice, this list of conditions and the following disclaimer in the
11//     documentation and/or other materials provided with the distribution.
12//
13// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
24description(
25'Test RegExp.compile method.'
26);
27
28re = new RegExp("a", "i");
29shouldBe("re.toString()", "'/a/i'");
30
31re.compile("a");
32shouldBe("re.multiline", "false");
33shouldBe("re.ignoreCase", "false");
34shouldBe("re.global", "false");
35shouldBe("re.test('A')", "false");
36shouldBe("re.toString()", "'/a/'");
37
38re.compile("b", "g");
39shouldBe("re.toString()", "'/b/g'");
40
41re.compile(new RegExp("c"));
42shouldBe("re.toString()", "'/c/'");
43
44re.compile(new RegExp("c", "i"));
45shouldBe("re.ignoreCase", "true");
46shouldBe("re.test('C')", "true");
47shouldBe("re.toString()", "'/c/i'");
48
49shouldThrow("re.compile(new RegExp('c'), 'i');");
50
51// It's OK to supply a second argument, as long as the argument is "undefined".
52re.compile(re, undefined);
53shouldBe("re.toString()", "'/c/i'");
54
55shouldThrow("re.compile(new RegExp('+'));");
56
57re.compile(undefined);
58shouldBe("re.toString()", "'/undefined/'");
59
60re.compile(null);
61shouldBe("re.toString()", "'/null/'");
62
63re.compile();
64shouldBe("re.toString()", "'/(?:)/'");
65
66re.compile("z", undefined);
67shouldBe("re.toString()", "'/z/'");
68
69// Compiling should reset lastIndex.
70re.lastIndex = 100;
71re.compile(/a/g);
72shouldBe("re.lastIndex", "0");
73re.exec("aaa");
74shouldBe("re.lastIndex", "1");
75