# Copyright 2013 the V8 project authors. All rights reserved.
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  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.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS 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 APPLE INC. OR ITS 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.

This test checks for a regression against String#split is buggy.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS ''.split() is testCode[i][1]
PASS ''.split(/./) is testCode[i][1]
PASS ''.split(/.?/) is testCode[i][1]
PASS ''.split(/.??/) is testCode[i][1]
PASS 'ab'.split(/a*/) is testCode[i][1]
PASS 'ab'.split(/a*?/) is testCode[i][1]
PASS 'ab'.split(/(?:ab)/) is testCode[i][1]
PASS 'ab'.split(/(?:ab)*/) is testCode[i][1]
PASS 'ab'.split(/(?:ab)*?/) is testCode[i][1]
PASS 'test'.split('') is testCode[i][1]
PASS 'test'.split() is testCode[i][1]
PASS '111'.split(1) is testCode[i][1]
PASS 'test'.split(/(?:)/, 2) is testCode[i][1]
PASS 'test'.split(/(?:)/, -1) is testCode[i][1]
PASS 'test'.split(/(?:)/, undefined) is testCode[i][1]
PASS 'test'.split(/(?:)/, null) is testCode[i][1]
PASS 'test'.split(/(?:)/, NaN) is testCode[i][1]
PASS 'test'.split(/(?:)/, true) is testCode[i][1]
PASS 'test'.split(/(?:)/, '2') is testCode[i][1]
PASS 'test'.split(/(?:)/, 'two') is testCode[i][1]
PASS 'a'.split(/-/) is testCode[i][1]
PASS 'a'.split(/-?/) is testCode[i][1]
PASS 'a'.split(/-??/) is testCode[i][1]
PASS 'a'.split(/a/) is testCode[i][1]
PASS 'a'.split(/a?/) is testCode[i][1]
PASS 'a'.split(/a??/) is testCode[i][1]
PASS 'ab'.split(/-/) is testCode[i][1]
PASS 'ab'.split(/-?/) is testCode[i][1]
PASS 'ab'.split(/-??/) is testCode[i][1]
PASS 'a-b'.split(/-/) is testCode[i][1]
PASS 'a-b'.split(/-?/) is testCode[i][1]
PASS 'a-b'.split(/-??/) is testCode[i][1]
PASS 'a--b'.split(/-/) is testCode[i][1]
PASS 'a--b'.split(/-?/) is testCode[i][1]
PASS 'a--b'.split(/-??/) is testCode[i][1]
PASS ''.split(/()()/) is testCode[i][1]
PASS '.'.split(/()()/) is testCode[i][1]
PASS '.'.split(/(.?)(.?)/) is testCode[i][1]
PASS '.'.split(/(.??)(.??)/) is testCode[i][1]
PASS '.'.split(/(.)?(.)?/) is testCode[i][1]
PASS 'A<B>bold</B>and<CODE>coded</CODE>'.split(ecmaSampleRe) is testCode[i][1]
PASS 'tesst'.split(/(s)*/) is testCode[i][1]
PASS 'tesst'.split(/(s)*?/) is testCode[i][1]
PASS 'tesst'.split(/(s*)/) is testCode[i][1]
PASS 'tesst'.split(/(s*?)/) is testCode[i][1]
PASS 'tesst'.split(/(?:s)*/) is testCode[i][1]
PASS 'tesst'.split(/(?=s+)/) is testCode[i][1]
PASS 'test'.split('t') is testCode[i][1]
PASS 'test'.split('es') is testCode[i][1]
PASS 'test'.split(/t/) is testCode[i][1]
PASS 'test'.split(/es/) is testCode[i][1]
PASS 'test'.split(/(t)/) is testCode[i][1]
PASS 'test'.split(/(es)/) is testCode[i][1]
PASS 'test'.split(/(t)(e)(s)(t)/) is testCode[i][1]
PASS '.'.split(/(((.((.??)))))/) is testCode[i][1]
PASS '.'.split(/(((((.??)))))/) is testCode[i][1]
PASS 'hello'.split({toString:function(){return 'e';}}) is ["h", "llo"]
PASS var a = 'hello'.split({toString:function(){separatorToStringCalled='OKAY';return 'e';}},0); a.push(separatorToStringCalled); a is ["OKAY"]
PASS successfullyParsed is true

TEST COMPLETE

