source: webkit/trunk/JavaScriptCore/API/testapi.js@ 15384

Last change on this file since 15384 was 15384, checked in by mjs, 19 years ago

4eviewed by Geoff.


  • add handling of hasInstance callback for API objects
  • API/JSCallbackObject.cpp: (KJS::JSCallbackObject::implementsHasInstance): Check if callback is present. (KJS::JSCallbackObject::hasInstance): Invoke appropriate callback.
  • API/JSCallbackObject.h:
  • API/JSClassRef.cpp:
  • API/JSObjectRef.h:
  • API/testapi.c: (MyObject_hasInstance): Test case; should match what construct would do.
  • API/testapi.js:
File size: 3.3 KB
Line 
1// -*- mode: c++; c-basic-offset: 4 -*-
2/*
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27function shouldBe(a, b)
28{
29 var evalA;
30 try {
31 evalA = eval(a);
32 } catch(e) {
33 evalA = e;
34 }
35
36 if (evalA == b || isNaN(evalA) && typeof evalA == 'number' && isNaN(b) && typeof b == 'number')
37 print("PASS: " + a + " should be " + b + " and is.", "green");
38 else
39 print("__FAIL__: " + a + " should be " + b + " but instead is " + evalA + ".", "red");
40}
41
42shouldBe("typeof MyObject", "function"); // our object implements 'call'
43MyObject.cantFind = 1;
44shouldBe("MyObject.cantFind", undefined);
45MyObject.regularType = 1;
46shouldBe("MyObject.regularType", 1);
47MyObject.alwaysOne = 2;
48shouldBe("MyObject.alwaysOne", 1);
49MyObject.cantDelete = 1;
50delete MyObject.cantDelete;
51shouldBe("MyObject.cantDelete", 1);
52MyObject.cantSet = 1;
53shouldBe("MyObject.cantSet", undefined);
54
55var foundMyPropertyName = false;
56var foundRegularType = false;
57for (var p in MyObject) {
58 if (p == "myPropertyName")
59 foundMyPropertyName = true;
60 if (p == "regularType")
61 foundRegularType = true;
62}
63print(foundMyPropertyName
64 ? "PASS: MyObject.myPropertyName was enumerated"
65 : "__FAIL__: MyObject.myPropertyName was not enumerated");
66print(foundRegularType
67 ? "PASS: MyObject.regularType was enumerated"
68 : "__FAIL__: MyObject.regularType was not enumerated");
69
70shouldBe("delete MyObject.regularType", true);
71shouldBe("MyObject.regularType", undefined);
72shouldBe("MyObject(0)", 1);
73shouldBe("MyObject()", undefined);
74shouldBe("typeof new MyObject()", "object");
75shouldBe("MyObject ? 1 : 0", 0); // toBoolean
76shouldBe("+MyObject", 1); // toNumber
77shouldBe("(MyObject.toString())", "[object CallbackObject]"); // toString
78shouldBe("MyObject - 0", NaN); // toPrimitive
79
80shouldBe("typeof MyConstructor", "object");
81constructedObject = new MyConstructor(1);
82shouldBe("typeof constructedObject", "object");
83shouldBe("constructedObject.value", 1);
84shouldBe("(new MyObject()) instanceof MyObject", true);
85shouldBe("(new Object()) instanceof MyObject", false);
Note: See TracBrowser for help on using the repository browser.