mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
3.4 KiB
203 lines
3.4 KiB
/*
|
|
* RegExp called both as a function and as a constructor.
|
|
*
|
|
* Argument coercions are tested specifically (E5 Section 15.10.3, 15.10.4),
|
|
* because 'undefined' has special treatment.
|
|
*/
|
|
|
|
var r, t;
|
|
|
|
/*
|
|
* RegExp called as a function
|
|
*/
|
|
|
|
/*===
|
|
|
|
|
|
true
|
|
true
|
|
TypeError
|
|
Foo
|
|
===*/
|
|
|
|
r = /foo/;
|
|
|
|
try {
|
|
/* same as new RegExp(), which is the same as new RegExp('', ''); */
|
|
t = RegExp();
|
|
t = t.exec('');
|
|
print(t[0]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
/* same as new RegExp(), which is the same as new RegExp('', ''); */
|
|
/* NB: Rhino and Smjs apparently treat this as new RegExp('undefined', '') */
|
|
t = RegExp(undefined, undefined);
|
|
t = t.exec('');
|
|
print(t[0]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
/* not the same as new RegExp(), special behavior */
|
|
t = RegExp(r);
|
|
print(r === t); /* must be the *same* object */
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
/* not the same as new RegExp(), special behavior */
|
|
t = RegExp(r, undefined); /* must be the *same* object */
|
|
print(r === t);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = RegExp(r, 1);
|
|
print('no error');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = RegExp('foo', 'i');
|
|
t = t.exec('Foo');
|
|
print(t[0]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
/*
|
|
* RegExp called as a constructor
|
|
*/
|
|
|
|
/*===
|
|
false
|
|
TypeError
|
|
Foo
|
|
SyntaxError
|
|
SyntaxError
|
|
SyntaxError
|
|
SyntaxError
|
|
===*/
|
|
|
|
try {
|
|
/* Note: different from RegExp(r) */
|
|
t = new RegExp(r);
|
|
print(r === t); /* must NOT be the same object */
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp(r, 1);
|
|
print('no error');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp('foo', 'i');
|
|
t = t.exec('Foo');
|
|
print(t[0]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp('foo', 'bar');
|
|
print('no error');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp('foo', 'gg');
|
|
print('no error');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp('foo', 'ii');
|
|
print('no error');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp('foo', 'mm');
|
|
print('no error');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
/*
|
|
* Specific coercion tests
|
|
*/
|
|
|
|
/*===
|
|
|
|
|
|
null
|
|
SyntaxError
|
|
Foo Fo
|
|
===*/
|
|
|
|
/* Note: Rhino and Smjs coerce an explicitly given 'undefined' into "undefined",
|
|
* so that e.g. new RegExp(undefined) is equivalent to /undefined/. E5 requires
|
|
* undefined to be coerced to an empty string in the first paragraph of Section
|
|
* 15.10.4.1.
|
|
*/
|
|
try {
|
|
t = new RegExp(undefined, undefined); /* same as new RegExp("", "") */
|
|
t = t.exec(''); /* should match */
|
|
print(t[0]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp(); /* same as above */
|
|
t = t.exec(''); /* should match */
|
|
print(t[0]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
t = new RegExp(null); /* same as new RegExp("null", "") */
|
|
t = t.exec('nullx');
|
|
print(t[0]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
/* should cause SyntaxError, invalid flags */
|
|
t = new RegExp('foo', null); /* same as new RegExp("foo", "null") */
|
|
print('no error');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
try {
|
|
/* ensure ToString(a) = "(fo)o", ToString(b) = "i" */
|
|
var a = {};
|
|
a.toString = function() { return '(fo)o'; };
|
|
var b = {};
|
|
b.toString = function() { return 'i'; };
|
|
|
|
t = new RegExp(a, b);
|
|
t = t.exec('Foo');
|
|
print(t[0], t[1]);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
|
|
|