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.
		
		
		
		
		
			
		
			
				
					172 lines
				
				3.6 KiB
			
		
		
			
		
	
	
					172 lines
				
				3.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								const assert = require('assert')
							 | 
						||
| 
								 | 
							
								const clone = require('../');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('regexp-clone', function(){
							 | 
						||
| 
								 | 
							
								  function hasEqualSource (a, b) {
							 | 
						||
| 
								 | 
							
								    assert.ok(a !== b);
							 | 
						||
| 
								 | 
							
								    assert.equal(a.source, b.source);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function isIgnoreCase (a) {
							 | 
						||
| 
								 | 
							
								    assert.ok(a.ignoreCase);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function isGlobal (a) {
							 | 
						||
| 
								 | 
							
								    assert.ok(a.global);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function isMultiline (a) {
							 | 
						||
| 
								 | 
							
								    assert.ok(a.multiline);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function isDotAll (a) {
							 | 
						||
| 
								 | 
							
								    assert.ok(a.dotAll);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function isUnicode (a) {
							 | 
						||
| 
								 | 
							
								    assert.ok(a.unicode);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function isSticky(a) {
							 | 
						||
| 
								 | 
							
								    assert.ok(a.sticky);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function testFlag (a, method) {
							 | 
						||
| 
								 | 
							
								    const b = clone(a);
							 | 
						||
| 
								 | 
							
								    hasEqualSource(a, b);
							 | 
						||
| 
								 | 
							
								    method(a);
							 | 
						||
| 
								 | 
							
								    method(b);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function lastIndex(a) {
							 | 
						||
| 
								 | 
							
								    a.test('this string hi there');
							 | 
						||
| 
								 | 
							
								    assert.strictEqual(a.lastIndex, 3);
							 | 
						||
| 
								 | 
							
								    const b = clone(a);
							 | 
						||
| 
								 | 
							
								    assert.strictEqual(b.lastIndex, 3);
							 | 
						||
| 
								 | 
							
								    assert.strictEqual(a.lastIndex, 3);
							 | 
						||
| 
								 | 
							
								    b.test('this string hi there');
							 | 
						||
| 
								 | 
							
								    assert.strictEqual(b.lastIndex, 14);
							 | 
						||
| 
								 | 
							
								    assert.strictEqual(a.lastIndex, 3);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function allFlags(a) {
							 | 
						||
| 
								 | 
							
								    const b = clone(a);
							 | 
						||
| 
								 | 
							
								    hasEqualSource(a, b);
							 | 
						||
| 
								 | 
							
								    testFlag(b, isIgnoreCase);
							 | 
						||
| 
								 | 
							
								    testFlag(b, isGlobal);
							 | 
						||
| 
								 | 
							
								    testFlag(b, isMultiline);
							 | 
						||
| 
								 | 
							
								    testFlag(b, isDotAll);
							 | 
						||
| 
								 | 
							
								    testFlag(b, isUnicode);
							 | 
						||
| 
								 | 
							
								    testFlag(b, isSticky);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function noFlags(a) {
							 | 
						||
| 
								 | 
							
								    const b = clone(a);
							 | 
						||
| 
								 | 
							
								    hasEqualSource(a, b);
							 | 
						||
| 
								 | 
							
								    assert.ok(!b.ignoreCase);
							 | 
						||
| 
								 | 
							
								    assert.ok(!b.global);
							 | 
						||
| 
								 | 
							
								    assert.ok(!b.multiline);
							 | 
						||
| 
								 | 
							
								    assert.ok(!b.dotAll);
							 | 
						||
| 
								 | 
							
								    assert.ok(!b.unicode);
							 | 
						||
| 
								 | 
							
								    assert.ok(!b.sticky);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('literals', function(){
							 | 
						||
| 
								 | 
							
								    it('ignoreCase flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/i;
							 | 
						||
| 
								 | 
							
								      testFlag(a, isIgnoreCase);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('global flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/g;
							 | 
						||
| 
								 | 
							
								      testFlag(a, isGlobal);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('multiline flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/m;
							 | 
						||
| 
								 | 
							
								      testFlag(a, isMultiline);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('dotAll flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/s;
							 | 
						||
| 
								 | 
							
								      testFlag(a, isDotAll);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('unicode flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/u;
							 | 
						||
| 
								 | 
							
								      testFlag(a, isUnicode);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('sticky flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/y;
							 | 
						||
| 
								 | 
							
								      testFlag(a, isSticky);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('no flags', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/;
							 | 
						||
| 
								 | 
							
								      noFlags(a);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('all flags', function(done){
							 | 
						||
| 
								 | 
							
								      const a = /hello/gimsuy;
							 | 
						||
| 
								 | 
							
								      allFlags(a);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('lastIndex', function(done) {
							 | 
						||
| 
								 | 
							
								      const a = /hi/g;
							 | 
						||
| 
								 | 
							
								      lastIndex(a);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('instances', function(){
							 | 
						||
| 
								 | 
							
								    it('ignoreCase flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hello', 'i');
							 | 
						||
| 
								 | 
							
								      testFlag(a, isIgnoreCase);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('global flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hello', 'g');
							 | 
						||
| 
								 | 
							
								      testFlag(a, isGlobal);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('multiline flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hello', 'm');
							 | 
						||
| 
								 | 
							
								      testFlag(a, isMultiline);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('dotAll flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hello', 's');
							 | 
						||
| 
								 | 
							
								      testFlag(a, isDotAll);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('unicode flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hello', 'u');
							 | 
						||
| 
								 | 
							
								      testFlag(a, isUnicode);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('sticky flag', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hello', 'y');
							 | 
						||
| 
								 | 
							
								      testFlag(a, isSticky);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('no flags', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hmm');
							 | 
						||
| 
								 | 
							
								      noFlags(a);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('all flags', function(done){
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hello', 'misguy');
							 | 
						||
| 
								 | 
							
								      allFlags(a);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    it('lastIndex', function(done) {
							 | 
						||
| 
								 | 
							
								      const a = new RegExp('hi', 'g');
							 | 
						||
| 
								 | 
							
								      lastIndex(a);
							 | 
						||
| 
								 | 
							
								      done();
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 |