1d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
2d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org//
4d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// Redistribution and use in source and binary forms, with or without
5d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// modification, are permitted provided that the following conditions
6d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// are met:
7d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 1.  Redistributions of source code must retain the above copyright
8d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org//     notice, this list of conditions and the following disclaimer.
9d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// 2.  Redistributions in binary form must reproduce the above copyright
10d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org//     notice, this list of conditions and the following disclaimer in the
11d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org//     documentation and/or other materials provided with the distribution.
12d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org//
13d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
24d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgdescription("KDE JS Test");
25d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org// We can't use normal shouldBe here, since they'd eval in the wrong context...
26d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
27d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction shouldBeOfType(msg, val, type) {
28d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  if (typeof(val) != type)
29d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    testFailed(msg + ": value has type " + typeof(val) + " , not:" + type);
30d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org  else
31d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    testPassed(msg);
32d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org}
33d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
34d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction test0() {
35d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    var arguments;
36d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // var execution should not overwrite something that was
37d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // in scope beforehand -- e.g. the arguments thing
38d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    shouldBeOfType("test0", arguments, 'object');
39d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org }
40d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
41d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction test1() {
42d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // No need to undef-initialize something in scope already!
43d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    shouldBeOfType("test1", arguments, 'object');
44d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    var arguments;
45d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org}
46d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
47d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction test2(arguments) {
48d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // Formals OTOH can overwrite the args object
49d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    shouldBeOfType("test2", arguments, 'number');
50d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org}
51d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
52d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
53d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction test3() {
54d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // Ditto for functions..
55d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    shouldBeOfType("test3", arguments, 'function');
56d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    function arguments() {}
57d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org}
58d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
59d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgfunction test4() {
60d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // Here, the -declaration- part of the var below should have no
61d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // effect..
62d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    shouldBeOfType('test4.(1)', arguments, 'object');
63d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    var arguments = 4;
64d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    // .. but the assignment shoud just happen
65d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org    shouldBeOfType('test4.(2)', arguments, 'number');
66d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org}
67d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
68d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org
69d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgtest0();
70d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgtest1();
71d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgtest2(42);
72d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgtest3();
73f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.orgtest4();
74