Skip to content

Commit

Permalink
Adding RegExp tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Dec 4, 2014
1 parent 5253431 commit 0c730a9
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 0 deletions.
1 change: 1 addition & 0 deletions test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<script src="number.js"></script>
<script src="object.js"></script>
<script src="promise.js"></script>
<script src="regexp.js"></script>
<script src="string.js"></script>
<script src="worker-test.js"></script>
<script src="promise/all.js"></script>
Expand Down
1 change: 1 addition & 0 deletions test/native.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<script src="number.js"></script>
<script src="object.js"></script>
<script src="promise.js"></script>
<script src="regexp.js"></script>
<script src="string.js"></script>
<script src="worker-test.js"></script>
<script src="promise/all.js"></script>
Expand Down
103 changes: 103 additions & 0 deletions test/regexp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
var exported = require('../');

describe('RegExp', function () {
it('is on the exported object', function () {
expect(exported.RegExp).to.equal(RegExp);
});

describe('constructor', function () {
it('allows a regex as the pattern', function () {
var a = /a/g;
var b = new RegExp(a);
expect(a).not.to.equal(b);
expect(a).to.eql(b);
});

it('allows a string with flags', function () {
expect(new RegExp('a', 'mgi')).to.eql(/a/gim);
expect(String(new RegExp('a', 'mgi'))).to.equal('/a/gim');
});

it('works with instanceof', function () {
expect(/a/g).to.be.an['instanceof'](RegExp);
expect(new RegExp('a', 'im')).to.be.an['instanceof'](RegExp);
});

it('has the right constructor', function () {
expect(/a/g).to.have.property('constructor', RegExp);
expect(new RegExp('a', 'im')).to.have.property('constructor', RegExp);
});

it('toStrings properly', function () {
expect(Object.prototype.toString.call(/a/g)).to.equal('[object RegExp]');
expect(Object.prototype.toString.call(new RegExp('a', 'g'))).to.equal('[object RegExp]');
});
});

describe('Object properties', function () {
xit('does not have the nonstandard $input property', function () {
expect(RegExp).not.to.have.property('$input'); // Chrome < 39, Opera < 26 have this
});

it('has the right globals', function () {
var enumerableKeys = [
'input',
'multiline',
'lastMatch',
'lastParen',
'leftContext',
'rightContext',
'$1',
'$2',
'$3',
'$4',
'$5',
'$6',
'$7',
'$8',
'$9'
];
var nonEnumerableKeys = [
'$_',
'$*',
'$&',
'$+',
'$`',
"$'"
];
expect(Object.keys(RegExp)).to.eql(enumerableKeys);
var noop = function () {};
var actualNonEnumerables = Object.getOwnPropertyNames(RegExp).filter(function (key) {
return !(key in noop) && key !== '$input'; // see above test
});
expect(actualNonEnumerables).to.have.members(enumerableKeys.concat(nonEnumerableKeys));
});

it('updates RegExp globals', function () {
var re = /(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)/;
var str = 'abcdefghijklmnopq';
re.exec(str);
expect(RegExp.input).to.equal(str);
expect(RegExp.$_).to.equal(str);
expect(RegExp.multiline).to.equal(false);
expect(RegExp['$*']).to.equal(false);
expect(RegExp.lastMatch).to.equal('bcdefghijklmnop');
expect(RegExp['$&']).to.equal('bcdefghijklmnop');
expect(RegExp.lastParen).to.equal('p');
expect(RegExp['$+']).to.equal('p');
expect(RegExp.leftContext).to.equal('a');
expect(RegExp['$`']).to.equal('a');
expect(RegExp.rightContext).to.equal('q');
expect(RegExp["$'"]).to.equal('q');
expect(RegExp.$1).to.equal('b');
expect(RegExp.$2).to.equal('c');
expect(RegExp.$3).to.equal('d');
expect(RegExp.$4).to.equal('e');
expect(RegExp.$5).to.equal('f');
expect(RegExp.$6).to.equal('g');
expect(RegExp.$7).to.equal('h');
expect(RegExp.$8).to.equal('i');
expect(RegExp.$9).to.equal('j');
});
});
});

0 comments on commit 0c730a9

Please sign in to comment.