# 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.

KDE JS Test

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


PASS Object.prototype.toString.__proto__ is Function.prototype
PASS Object.prototype.valueOf.__proto__ is Function.prototype
PASS Array.prototype.toString.__proto__ is Function.prototype
PASS Array.prototype.toLocaleString.__proto__ is Function.prototype
PASS Array.prototype.concat.__proto__ is Function.prototype
PASS Array.prototype.join.__proto__ is Function.prototype
PASS Array.prototype.pop.__proto__ is Function.prototype
PASS Array.prototype.push.__proto__ is Function.prototype
PASS Array.prototype.reverse.__proto__ is Function.prototype
PASS Array.prototype.shift.__proto__ is Function.prototype
PASS Array.prototype.slice.__proto__ is Function.prototype
PASS Array.prototype.sort.__proto__ is Function.prototype
PASS Array.prototype.splice.__proto__ is Function.prototype
PASS Array.prototype.unshift.__proto__ is Function.prototype
PASS String.prototype.toString.__proto__ is Function.prototype
PASS String.prototype.valueOf.__proto__ is Function.prototype
PASS String.prototype.charAt.__proto__ is Function.prototype
PASS String.prototype.charCodeAt.__proto__ is Function.prototype
PASS String.prototype.indexOf.__proto__ is Function.prototype
PASS String.prototype.lastIndexOf.__proto__ is Function.prototype
PASS String.prototype.match.__proto__ is Function.prototype
PASS String.prototype.normalize.__proto__ is Function.prototype
PASS String.prototype.replace.__proto__ is Function.prototype
PASS String.prototype.search.__proto__ is Function.prototype
PASS String.prototype.slice.__proto__ is Function.prototype
PASS String.prototype.split.__proto__ is Function.prototype
PASS String.prototype.substr.__proto__ is Function.prototype
PASS String.prototype.substring.__proto__ is Function.prototype
PASS String.prototype.toLowerCase.__proto__ is Function.prototype
PASS String.prototype.toUpperCase.__proto__ is Function.prototype
PASS String.prototype.big.__proto__ is Function.prototype
PASS String.prototype.small.__proto__ is Function.prototype
PASS String.prototype.blink.__proto__ is Function.prototype
PASS String.prototype.bold.__proto__ is Function.prototype
PASS String.prototype.fixed.__proto__ is Function.prototype
PASS String.prototype.italics.__proto__ is Function.prototype
PASS String.prototype.strike.__proto__ is Function.prototype
PASS String.prototype.sub.__proto__ is Function.prototype
PASS String.prototype.sup.__proto__ is Function.prototype
PASS String.prototype.fontcolor.__proto__ is Function.prototype
PASS String.prototype.fontsize.__proto__ is Function.prototype
PASS String.prototype.anchor.__proto__ is Function.prototype
PASS String.prototype.link.__proto__ is Function.prototype
PASS Boolean.prototype.toString.__proto__ is Function.prototype
PASS Boolean.prototype.valueOf.__proto__ is Function.prototype
PASS Date.prototype.toString.__proto__ is Function.prototype
PASS Date.prototype.toUTCString.__proto__ is Function.prototype
PASS Date.prototype.toDateString.__proto__ is Function.prototype
PASS Date.prototype.toTimeString.__proto__ is Function.prototype
PASS Date.prototype.toLocaleString.__proto__ is Function.prototype
PASS Date.prototype.toLocaleDateString.__proto__ is Function.prototype
PASS Date.prototype.toLocaleTimeString.__proto__ is Function.prototype
PASS Date.prototype.valueOf.__proto__ is Function.prototype
PASS Date.prototype.getTime.__proto__ is Function.prototype
PASS Date.prototype.getFullYear.__proto__ is Function.prototype
PASS Date.prototype.getUTCFullYear.__proto__ is Function.prototype
PASS Date.prototype.toGMTString.__proto__ is Function.prototype
PASS Date.prototype.getMonth.__proto__ is Function.prototype
PASS Date.prototype.getUTCMonth.__proto__ is Function.prototype
PASS Date.prototype.getDate.__proto__ is Function.prototype
PASS Date.prototype.getUTCDate.__proto__ is Function.prototype
PASS Date.prototype.getDay.__proto__ is Function.prototype
PASS Date.prototype.getUTCDay.__proto__ is Function.prototype
PASS Date.prototype.getHours.__proto__ is Function.prototype
PASS Date.prototype.getUTCHours.__proto__ is Function.prototype
PASS Date.prototype.getMinutes.__proto__ is Function.prototype
PASS Date.prototype.getUTCMinutes.__proto__ is Function.prototype
PASS Date.prototype.getSeconds.__proto__ is Function.prototype
PASS Date.prototype.getUTCSeconds.__proto__ is Function.prototype
PASS Date.prototype.getMilliseconds.__proto__ is Function.prototype
PASS Date.prototype.getUTCMilliseconds.__proto__ is Function.prototype
PASS Date.prototype.getTimezoneOffset.__proto__ is Function.prototype
PASS Date.prototype.setTime.__proto__ is Function.prototype
PASS Date.prototype.setMilliseconds.__proto__ is Function.prototype
PASS Date.prototype.setUTCMilliseconds.__proto__ is Function.prototype
PASS Date.prototype.setSeconds.__proto__ is Function.prototype
PASS Date.prototype.setUTCSeconds.__proto__ is Function.prototype
PASS Date.prototype.setMinutes.__proto__ is Function.prototype
PASS Date.prototype.setUTCMinutes.__proto__ is Function.prototype
PASS Date.prototype.setHours.__proto__ is Function.prototype
PASS Date.prototype.setUTCHours.__proto__ is Function.prototype
PASS Date.prototype.setDate.__proto__ is Function.prototype
PASS Date.prototype.setUTCDate.__proto__ is Function.prototype
PASS Date.prototype.setMonth.__proto__ is Function.prototype
PASS Date.prototype.setUTCMonth.__proto__ is Function.prototype
PASS Date.prototype.setFullYear.__proto__ is Function.prototype
PASS Date.prototype.setUTCFullYear.__proto__ is Function.prototype
PASS Date.prototype.setYear.__proto__ is Function.prototype
PASS Date.prototype.getYear.__proto__ is Function.prototype
PASS Date.prototype.toGMTString.__proto__ is Function.prototype
PASS RegExp.prototype.exec.__proto__ is Function.prototype
PASS RegExp.prototype.test.__proto__ is Function.prototype
PASS RegExp.prototype.toString.__proto__ is Function.prototype
PASS Error.prototype.toString.__proto__ is Function.prototype
PASS successfullyParsed is true

TEST COMPLETE

