mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 02:42:44 +00:00 
			
		
		
		
	 3892b6e6ec
			
		
	
	
		3892b6e6ec
		
	
	
	
	
		
			
			This allows passing an existing RegExp object (or an object that is sufficiently like a RegExp object) as the "pattern" argument of the RegExp constructor.
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| describe("errors", () => {
 | |
|     test("invalid pattern", () => {
 | |
|         expect(() => {
 | |
|             RegExp("[");
 | |
|         }).toThrowWithMessage(
 | |
|             SyntaxError,
 | |
|             "RegExp compile error: Error during parsing of regular expression:"
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     test("invalid flag", () => {
 | |
|         expect(() => {
 | |
|             RegExp("", "x");
 | |
|         }).toThrowWithMessage(SyntaxError, "Invalid RegExp flag 'x'");
 | |
|     });
 | |
| 
 | |
|     test("repeated flag", () => {
 | |
|         expect(() => {
 | |
|             RegExp("", "gg");
 | |
|         }).toThrowWithMessage(SyntaxError, "Repeated RegExp flag 'g'");
 | |
|     });
 | |
| });
 | |
| 
 | |
| test("basic functionality", () => {
 | |
|     expect(RegExp().toString()).toBe("/(?:)/");
 | |
|     expect(RegExp(undefined).toString()).toBe("/(?:)/");
 | |
|     expect(RegExp("foo").toString()).toBe("/foo/");
 | |
|     expect(RegExp("foo", undefined).toString()).toBe("/foo/");
 | |
|     expect(RegExp("foo", "g").toString()).toBe("/foo/g");
 | |
|     expect(RegExp(undefined, "g").toString()).toBe("/(?:)/g");
 | |
| });
 | |
| 
 | |
| test("regexp object as pattern parameter", () => {
 | |
|     expect(RegExp(/foo/).toString()).toBe("/foo/");
 | |
|     expect(RegExp(/foo/g).toString()).toBe("/foo/g");
 | |
|     expect(RegExp(/foo/g, "").toString()).toBe("/foo/");
 | |
|     expect(RegExp(/foo/g, "y").toString()).toBe("/foo/y");
 | |
| 
 | |
|     var regex_like_object_without_flags = {
 | |
|         source: "foo",
 | |
|         [Symbol.match]: function () {},
 | |
|     };
 | |
|     expect(RegExp(regex_like_object_without_flags).toString()).toBe("/foo/");
 | |
|     expect(RegExp(regex_like_object_without_flags, "y").toString()).toBe("/foo/y");
 | |
| 
 | |
|     var regex_like_object_with_flags = {
 | |
|         source: "foo",
 | |
|         flags: "g",
 | |
|         [Symbol.match]: function () {},
 | |
|     };
 | |
|     expect(RegExp(regex_like_object_with_flags).toString()).toBe("/foo/g");
 | |
|     expect(RegExp(regex_like_object_with_flags, "").toString()).toBe("/foo/");
 | |
|     expect(RegExp(regex_like_object_with_flags, "y").toString()).toBe("/foo/y");
 | |
| });
 |