Chromium Code Reviews| Index: test/mjsunit/string-contains.js |
| diff --git a/test/mjsunit/string-contains.js b/test/mjsunit/string-contains.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..94f943255d4fecf3bd9a0cacad576125f7b059c1 |
| --- /dev/null |
| +++ b/test/mjsunit/string-contains.js |
| @@ -0,0 +1,150 @@ |
| +// Copyright 2013 the V8 project authors. All rights reserved. |
| +// Redistribution and use in source and binary forms, with or without |
| +// modification, are permitted provided that the following conditions are |
| +// met: |
| +// |
| +// * Redistributions of source code must retain the above copyright |
| +// notice, this list of conditions and the following disclaimer. |
| +// * Redistributions in binary form must reproduce the above |
| +// copyright notice, this list of conditions and the following |
| +// disclaimer in the documentation and/or other materials provided |
| +// with the distribution. |
| +// * Neither the name of Google Inc. nor the names of its |
| +// contributors may be used to endorse or promote products derived |
| +// from this software without specific prior written permission. |
| +// |
| +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| + |
|
Michael Starzinger
2013/07/30 10:58:39
This test package needs a "// Flags: --harmony-str
|
| +assertEquals(1, String.prototype.contains.length); |
| + |
| +var reString = "asdf[a-z]+(asdf)?"; |
| +assertTrue(reString.contains("[a-z]+")); |
| +assertTrue(reString.contains("(asdf)?")); |
| + |
| +// Random greek letters |
| +var twoByteString = "\u039a\u0391\u03a3\u03a3\u0395"; |
| + |
| +// Test single char pattern |
| +assertTrue(twoByteString.contains("\u039a"), "Lamda"); |
| +assertTrue(twoByteString.contains("\u0391"), "Alpha"); |
| +assertTrue(twoByteString.contains("\u03a3"), "First Sigma"); |
| +assertTrue(twoByteString.contains("\u03a3",3), "Second Sigma"); |
| +assertTrue(twoByteString.contains("\u0395"), "Epsilon"); |
| +assertFalse(twoByteString.contains("\u0392"), "Not beta"); |
| + |
| +// Test multi-char pattern |
| +assertTrue(twoByteString.contains("\u039a\u0391"), "lambda Alpha"); |
| +assertTrue(twoByteString.contains("\u0391\u03a3"), "Alpha Sigma"); |
| +assertTrue(twoByteString.contains("\u03a3\u03a3"), "Sigma Sigma"); |
| +assertTrue(twoByteString.contains("\u03a3\u0395"), "Sigma Epsilon"); |
| + |
| +assertFalse(twoByteString.contains("\u0391\u03a3\u0395"), |
| + "Not Alpha Sigma Epsilon"); |
| + |
| +//single char pattern |
| +assertTrue(twoByteString.contains("\u0395")); |
| + |
| +assertThrows("String.prototype.contains.call(null, 'test')", TypeError); |
| +assertThrows("String.prototype.contains.call(null, null)", TypeError); |
| +assertThrows("String.prototype.contains.call(undefined, undefined)", TypeError); |
| + |
| +assertThrows("String.prototype.contains.apply(null, ['test'])", TypeError); |
| +assertThrows("String.prototype.contains.apply(null, [null])", TypeError); |
| +assertThrows("String.prototype.contains.apply(undefined, [undefined])", TypeError); |
| + |
| +var TEST_INPUT = [{ |
| + msg: "Empty string", val: "" |
| +}, { |
| + msg: "Number 1234.34", val: 1234.34 |
| +}, { |
| + msg: "Integer number 0", val: 0 |
| +}, { |
| + msg: "Negative number -1", val: -1 |
| +}, { |
| + msg: "Boolean true", val: true |
| +}, { |
| + msg: "Boolean false", val: false |
| +}, { |
| + msg: "Regular expression /\d+/", val: /\d+/ |
| +}, { |
| + msg: "Empty array []", val: [] |
| +}, { |
| + msg: "Empty object {}", val: {} |
| +}, { |
| + msg: "Array of size 3", val: new Array(3) |
| +}]; |
| + |
| +var i = 0; |
| +var l = TEST_INPUT.length; |
| + |
| +for (; i < l; i++) { |
| + var e = TEST_INPUT[i]; |
| + var v = e.val; |
| + var s = String(v); |
| + assertTrue(s.contains(v), e.msg); |
| + assertTrue(String.prototype.contains.call(v, v), e.msg); |
| + assertTrue(String.prototype.contains.apply(v, [v]), e.msg); |
| +} |
| + |
| +// Test cases found in FF |
| +assertTrue("abc".contains("a")); |
| +assertTrue("abc".contains("b")); |
| +assertTrue("abc".contains("abc")); |
| +assertTrue("abc".contains("bc")); |
| +assertFalse("abc".contains("d")); |
| +assertFalse("abc".contains("abcd")); |
| +assertFalse("abc".contains("ac")); |
| +assertTrue("abc".contains("abc", 0)); |
| +assertTrue("abc".contains("bc", 0)); |
| +assertFalse("abc".contains("de", 0)); |
| +assertTrue("abc".contains("bc", 1)); |
| +assertTrue("abc".contains("c", 1)); |
| +assertFalse("abc".contains("a", 1)); |
| +assertFalse("abc".contains("abc", 1)); |
| +assertTrue("abc".contains("c", 2)); |
| +assertFalse("abc".contains("d", 2)); |
| +assertFalse("abc".contains("dcd", 2)); |
| +assertFalse("abc".contains("a", 42)); |
| +assertFalse("abc".contains("a", Infinity)); |
| +assertTrue("abc".contains("ab", -43)); |
| +assertFalse("abc".contains("cd", -42)); |
| +assertTrue("abc".contains("ab", -Infinity)); |
| +assertFalse("abc".contains("cd", -Infinity)); |
| +assertTrue("abc".contains("ab", NaN)); |
| +assertFalse("abc".contains("cd", NaN)); |
| +assertFalse("xyzzy".contains("zy\0", 2)); |
| + |
| +var dots = Array(10000).join('.'); |
| +assertFalse(dots.contains("\x01", 10000)); |
| +assertFalse(dots.contains("\0", 10000)); |
| + |
| +var myobj = { |
| + toString: function () { |
| + return "abc"; |
| + }, |
| + contains: String.prototype.contains |
| +}; |
| +assertTrue(myobj.contains("abc")); |
| +assertFalse(myobj.contains("cd")); |
| + |
| +var gotStr = false; |
| +var gotPos = false; |
| +myobj = { |
| + toString: function () { |
| + assertFalse(gotPos); |
| + gotStr = true; |
| + return "xyz"; |
| + }, |
| + contains: String.prototype.contains |
| +}; |
| + |